MistHill 发表于 2014-3-18 09:57

【大叔的草莓CM20140314】题解及注册机

本帖最后由 MistHill 于 2014-3-19 17:53 编辑

也搞个开放注册,增加点儿娱乐性:lol 。

原帖请参阅Peace的《庆开放,大叔的草莓CM20140314强势推出》。

昨天去拿来看了看,因为之前摆弄过《吾爱破解六周年小玩具-大叔的草莓CM20140313》,所以这次拣了个便宜。可见多参加活动好处大大的,而且Peace大笔一挥,我立马跻身于土豪的队列。

CM20140314与CM20140313相比,手法其实是一样的;只是之前的两个对称密码算法变化为哈希+对称密码算法的组合。

先玩个游戏,从界面的致谢名单来猜测一下各位参与的工作:
Kido应该是再次完成了加壳封装部分;
终于看到了L4Nce的乱序代码,虽然比较简单,但不失为很好的开始,希望能够坚持。那些带VM的商业产品如果没有乱序和膨胀,分分钟就会被人搞定。曾看过Nooby早期一篇这方面的文档,很有意思;
我是用户对算法比较熟,那个对称密码算法应该是在某标准算法的基础上进行的修改。
蒙得对不对,还请各位大人指教!玩逆向可以多一些连蒙带猜,有时可节省不少时间。

哈希算法这次直接用了API,在每一次哈希计算时按以下顺序调用函数:
advapi32.CryptAcquireContextA
advapi32.CryptCreateHash
advapi32.CryptHashData
advapi32.CryptGetHashParam
advapi32.CryptDestroyHash
advapi32.CryptReleaseContext
只用到了ALG_ID=CALG_MD2,即只计算MD2 Hash。主要用在:

[*]序列号:先由硬盘信息计算出一个32位的Hash值,然后再计算它的MD2,得到序列号,显示给用户,并用于解密。
[*]用户名哈希:将输入的用户名计算一个MD2,后面用作比较。
[*]文件校验值的哈希:先计算原执行文件前0x0004A4AB字节的CRC32,转换为字符串"653359BB",计算MD2,用于解密。如果已脱壳,需要Patch这个CRC32。
[*]原执行文件末尾有个字符串"1BCB4B",也计算了一个MD2。在004DE8D9处CALL 00405E3B将此MD2的字符串与文件校验值的MD2字符串进行比较,没搞明白是啥意思,感觉是忽悠,没管它。

下面简单说下注册算法。以下图为例:

用户名:MistHill
序列号:1A2C760693343C4C63F7B614E78EED70
注册码:AE48E3DA28AB50DFC0E4A4E552F806CCA47E756323107BF1154D2E538432F9DA

[*]这里序列号就是硬件信息的哈希:1A2C760693343C4C63F7B614E78EED70。
[*]文件校验值"653359BB"的哈希:c87fbc6084bc9715c5ffca0f879936c6。
[*]两者作strcat,CRC_Hash + HWID_Hash:c87fbc6084bc9715c5ffca0f879936c61A2C760693343C4C63F7B614E78EED70。(请注意字符的大小写!)
[*]用3.作为Key去解密输入的注册码。
[*]用户名"MistHill"的哈希:6f92e73c9bc964301e9299789b692400。
[*]将解密结果与用户名哈希作比较,若匹配则注册成功!

解密的地方在004B626C处:
...
004B626A   CC                  INT3
004B626B   CC                  INT3
004B626C   E8 7C04F5FF         CALL    004066ED
stack:
   0012F6BC   0012F6DC
      0012F6DC0016FAC8ASCII "AE48E3DA28AB50DFC0E4A4E552F806CCA47E756323107BF1154D2E538432F9DA"
   0012F6C0   0012F6E0
      0012F6E00016F618ASCII "c87fbc6084bc9715c5ffca0f879936c61A2C760693343C4C63F7B614E78EED70"
   0012F6C4   00000001
004B6271   E9 03E10000         JMP   004C4379
004B6276   CC                  INT3
004B6277   CC                  INT3
...
004C4377   CC                  INT3
004C4378   CC                  INT3
004C4379   8945 D4             MOV   DWORD PTR , EAX
   0012F6D8   001BAC48ASCII "6f92e73c9bc964301e9299789b692400"
004C437C   E9 F0B7FFFF         JMP   004BFB71
004C4381   CC                  INT3
004C4382   CC                  INT3
...
你会注意到前后那些CC中孤立的两条指令CALL和JMP,这就是乱序搞的鬼。用去解密,正确的解密结果返回在EAX,应该是一个ASCII字符串!
比较的地方在004B2A19处:
...
004B2A17   CC                  INT3
004B2A18   CC                  INT3
004B2A19   E8 1D34F5FF         CALL    00405E3B
stack:
   0012F6C0   001BAC48ASCII "6f92e73c9bc964301e9299789b692400"
   0012F6C4   001BAD18ASCII "6f92e73c9bc964301e9299789b692400"
004B2A1E   E9 07DE0000         JMP   004C082A
004B2A23   CC                  INT3
004B2A24   CC                  INT3
...
栈上是两个要比较的字符串。这是注册码正确的情形,否则栈的指针不为字符串。
爆破点也选在这里!这个CM有点小问题:不检查用户名和注册码是否为空!你可以试试,在004B2A19处下个断点,F9,什么都不用输入,直接点“注 册”按钮,断下后Patch调用00405E3B的返回值为0,它会显示“注册成功”。

解密算法是个啥,没仔细看。感觉是在RC4的基础上改的,先将CRC_Hash+HWID_Hash复制4次,凑足0x100的长度(0x40 * 4),然后用它去初始化state,这点和RC4非常相象。最后解密注册码。
活动结束后请哪位大牛解释一下,让咱也学习学习!

注册机和源码就暂时不发了。也发不了,呵呵,还没写好呢!不过大家动作要快喔,不要让我抢先了!

说过免费提供注册码,有正确的东西分析起来方便一点:只要你给我用户名和序列号,我保证给出有效注册码!我现在是用Peace送给我的注册机{:1_912:} 。不应该哟,我并不领情!:keai

先写这些吧,一个快餐文化充斥的社会,讲究速战速决。你要给他一份法式大餐让他悠闲地坐在那里慢慢品尝、享受,他反而不习惯。

怎么利用CM自身进行Keygen,请参阅我的前一篇帖子《【吾爱破解六周年小玩具-大叔的草莓】题解》,里面有提示!

19/03/2014 编辑
放出命令行的注册机。用法:
Keygen.exe 用户名 序列号

前面说过,那个加密/解密算法是修改过的RC4!这个比较坑爹。
找了个E的RC4模块来看了看,其将Password扩展为Key的部分和CM是一样的(不推荐,容易让人糊涂!),但KSA和PRGA仍然符合规范,与标准RC4的输出结果一致。
但这个CM的KSA和PRGA都被修改了。
如果是故意的,可以理解,意在增加Keygen的难度。因为RC4的算法很简单,可以容易地发现其区别。
如果不是有意的,那就…………。话就难听了,此处删掉数句——恕我直言!

注册机源码就不放出了,不规范的东西不应模仿!

w254800370 发表于 2014-3-18 10:03

膜拜大牛,抢先吃到草霉。

H2o 发表于 2014-3-18 10:04

学习了!前排支持!

monicappp 发表于 2014-3-18 10:13

这个可以有,谢谢楼主

吾爱-路人甲 发表于 2014-3-18 10:13

分析的太好了。大神呀

MistHill 发表于 2014-3-19 17:56

注册机已上传。

a070458 发表于 2014-3-19 20:17

看完LZ的文章 对RC4有了一定的了解了{:1_931:}
感谢楼主

xjun 发表于 2014-3-19 20:23

看完LZ文章,学习到了很多经验。感谢!

浮夸的科比 发表于 2014-3-28 12:43

谢谢分享,楼主辛苦

anchsss 发表于 2014-3-28 16:09

谢谢楼主分享!!!!!
页: [1] 2
查看完整版本: 【大叔的草莓CM20140314】题解及注册机