1、用peid 0.94查询,发现并没有加壳,这对在下这种第二次破解软件的新手来说的确是非常大的帮助。
2、直接运行Full版本发现,启动时需要加载key文件。由于通过试用版在下发现,它的验证是需要获取遥控器的机身码的,所以即使直接跳过应该也无济于事。所以我开始尝试构造KEY。
key文件选择时提示key文件是一个dat文件,而且鉴于大多数软件为了编写方便,这种文件一般都实际上为文本文件,于是新建一txt文件,添加如下内容
123456
运行,导入这个key文件,弹出List index out of bounds (1),于是猜测key文件包含多行,于是添加内容
234567
345678
456789
再次运行发现出现如下图有意思的内容
于是,可以发现,key文件的第一行为机身号,第二行为用户名,第三行为注册时间。但是无论怎么构造key文件,依然会弹出List index out of bounds (n)的对话框,于是,在下就想到试用版中,这里是填写了信息的,去看看他的内容是什么。
3、用OllyICE打开EZSuper v2.2.1104.678.Trail,查找>所有参考文本字串,查找Unlimited,于是乎发现一些很有意思的内容:
6mAyd9KizPOq2yCwZ7w
B426ZvplwW74Gxkmf8U
uExR13Jie9gvM8PNf7k
rN3F6YQxuTn0rv6npAs
gWaIwSUtOvFO8Lqk/4E
PyMrtUhgIbvcv1/xl8E
qdECjCgvbzxDhyKRIYM
n3MQ6VYSQ/GXBMZrizU
7EIe9WLnG/QvAKbup/c
r0DP0NnQCka9binVf5w
vkC1/pRxSfmQJLSjqb4
9ZbzRunDvv7vQQF20qE
jb9uEm7Kchx89YAhREM
c/0/R88+uWRcpUG9pJo
c6NZx7qkOoS6lM7l/mU
cxiSHoe3e40JTnFaeyU
5B1AUzirZMBXG/QSYV6QM3n64xFwUgSGkmv9U7a
<Unlimited>
2009-10-04
001AC4D2
EF93CC3E
1C60C413
0C70C412
DCA0CC1F
CCB0CC1E
FC80CC1F
EC90CC1E
9CE0CC1B
8CF0CC1A
BCC0CC1B
ACD0CC1A
5C20C417
4C30C416
5B27C477
7C00C417
3549C493
2C50C412
5428C497
3844C453
DDA1CC1F
CDB1CC1E
DEA2CC3F
CEB2CC3E
5925C457
4935C456
7905C457
6915C456
8FF3CC3A
1F63C433
F884CC5F
0A76C472
2A56C472
3A46C473
DBA7CC7F
99E5CC5B
CBB7CC7E
F272BD17
F272BD14
F272BD1E
F272BD06
F272BC16
F272BF16
F272BD56
F272BD96
B272BD16
CD72BD16
F232BD16
F24DBD16
于是,尝试使用这些文本构造key文件,直到full版本不再报错,得到如下的key文件:
970c6B232BD1660d69f782b56100e7cb2
<Unlimited>
2009-10-04
001AC4D2
EF93CC3E
1C60C413
0C70C412
DCA0CC1F
CCB0CC1E
FC80CC1F
EC90CC1E
9CE0CC1B
8CF0CC1A
BCC0CC1B
ACD0CC1A
5C20C417
4C30C416
5B27C477
7C00C417
3549C493
2C50C412
5428C497
3844C453
DDA1CC1F
CDB1CC1E
DEA2CC3F
CEB2CC3E
5925C457
4935C456
7905C457
6915C456
8FF3CC3A
1F63C433
F884CC5F
0A76C472
2A56C472
3A46C473
DBA7CC7F
99E5CC5B
CBB7CC7E
F272BD17
F272BD14
F272BD1E
F272BD06
F272BC16
F272BF16
F272BD56
F272BD96
B272BD16
CD72BD16
F232BD16
F24DBD16
5B1AUzirZMBXG/QSYV6QM3n64xFwUgSGkmv9U7a
然后在下发现,只要行数足够,内容可以任意变化。
4、构造完key后,使用OllyICE加载Full版本,进行动态调试,由于验证不成功后,任务栏的图标上,会弹出气泡提示,在网上查询后得知,这个功能是通过shell32.Shell_NotifyIcon的函数调用实现的。
使用OllyICE加载加载后,查找>当前模块中的名称 ,找到
名称位于 EZSuper, 条目 471
地址=00639338
区段=.idata
类型=输入
名称=shell32.Shell_NotifyIconW
在这个地方下断
实际上,在这里下断后,会导致程序报错,回车进入,在具体的语句处:
0058DD56 |. E8 F9D6EBFF call <jmp.&shell32.Shell_NotifyIconW>
下断即可。
5、运行,并用遥控器按下绿色key后,断下程序,来到
0058DD56 |. E8 F9D6EBFF call <jmp.&shell32.Shell_NotifyIconW>
0058DD5B |. EB 1F jmp short 0058DD7C
0058DD5D |> 8B83 84070000 mov eax, dword ptr [ebx+784]
0058DD63 |. E8 D81EEBFF call 0043FC40
0058DD68 |. 8983 F0030000 mov dword ptr [ebx+3F0], eax
0058DD6E |. 8D83 DC030000 lea eax, dword ptr [ebx+3DC]
0058DD74 |. 50 push eax
0058DD75 |. 6A 01 push 1
0058DD77 |. E8 D8D6EBFF call <jmp.&shell32.Shell_NotifyIconW>
0058DD7C |> 5B pop ebx
0058DD7D \. C3 retn
很显然,这里已经开始显示提示了,等到提示真正弹出,F8跟踪回到到调用处(这里嵌套了好几次call,注意找到真正的起始地址)
005A10E6 |. E8 39CDFEFF call 0058DE24
会发现这里是好大的一个块,这里尝试在这个调用上方下断
005A0EDC /. 55 push ebp
005A0F43 |> /8D4D E8 /lea ecx, dword ptr [ebp-18]
这两个地方。然后再按一次绿色key,单步F8跟踪,然后在寄存器中看见一些很有意思的东西,我们key文件的内容都在这显示出来了,并且在过程中看见了一些计算中间量。
到这里,需要做的就很清楚了,如果需要内存注册机,可以发现最后的计算结果在这个call(005A1081 |. E8 7259E6FF call 004069F8)这里被传入寄存器,跟进这个call,看他做了点什么就好了。
毕竟这个软件是自己用为主,所以选择了爆破。发现在进入这个块之前,遥控器机身号就已经在ECX了,向上追踪代码:
0059A3B9 |> \68 C4A75900 push 0059A7C4 ; UNICODE “970c”
………………..
0059A433 |. B8 DCA75900 mov eax, 0059A7DC ; UNICODE “%.2x%.2x%.2x%.2x%.2x”
0059A438 |. E8 7B39E7FF call 0040DDB8
0059A43D |. FF75 E8 push dword ptr [ebp-18]
0059A440 |. 68 14A85900 push 0059A814 ; UNICODE “0d69f782b56100e7cb2″
0059A445 |. 8B45 F4 mov eax, dword ptr [ebp-C]
0059A448 |. 05 8C000000 add eax, 8C
0059A44D |. BA 03000000 mov edx, 3
0059A452 |. E8 95C0E6FF call 004064EC
可见,头和尾都是固定的,而 “%.2x%.2x%.2x%.2x%.2x”就是获得机身码的参数,将其更改为key文件中的机身码,就会让他认为遥控器就是已注册的了。当然,爆破还有更好的方法,但是懒得去找关键跳了,并且似乎还得构造寄存器值,够用就好。。
破解总结
毕竟这是我第二次破解软件。。过程中也有很大的运气成分,让大家见笑了。。
这次破解,软件没有加壳、key文件不完整时也显示注册信息,还有试用版中包含了一个key的信息,加上在下的一点点人品,对这次破解予以了很大的帮助。
最后,破解仅仅为了学习,如果你喜欢这一款软件,请支持正版。