本帖最后由 CHHSun 于 2009-11-5 15:54 编辑
声明:此方法只是为了学习条件记录断点,不的用于其它用途
也还是飓风加密后的产品,是哪种程序加的就不说了,
看图1
,
查壳ASProtect 1.2x - 1.3x [Registered] -> Alexey Solodovnikov [Overlay],
(不一定查的准)想脱的自己脱用脚脱,脱完自己修,不一定好修哈。
带着他找密码吧,找码过程和视频的8版差不多,是8位密码的,就是Z写的那个最早
的。但是没有字符给你找了。
----
这里用到一个条件记录断点,关键还是这个吧
开工,OD载入,
停在图2 ,
是什么壳,高手知道,咱不知
运行起来,先输入8位假码,不要确定,查看--可执行模块(Alt+E)
找到user32.dll这一行右键---查看名称(Ctrl+n)
图3
找到TranslateMessage这一行右键条件记录断点 图4
图5,
按图上的来,输入一些数据,;输入完确定后断在
TranslateMessage这一行是粉红色的断点哦,呵呵
断点设完了,下面找码
--------
到程序运行窗口点确定
中断在这里 图6
在堆栈中中断的这一行反汇编中跟随(没有‘反汇编中跟随’的在这一行按回车)
返回后找到这一段的断首PUSH开头的。F2下断
图7
重新在运行下,中断在这个断首,在堆栈中在反汇编中跟随,在找断首F2下断,运行在这个
断上,在返回找到头在下断,在重新运行,(如果出现密码错误就不用在重运行了,在点确
定就行,哆嗦吧)
这样反复几次找到 图8
两个RETN后就快到关键地方了,
在上面那个RETN(注2)上下断,运行后密码不对,在点确定断下,在在堆栈中反汇编中跟
随
在返回后就到我关键的代码段了,
图9 ,
c:\china-drm\是不是很熟呀
向上找到头,下断,后输入8位假码运行,中断后一步一步的来,其它断点可以全都删除了
向下找,找到“yao1”(没有的看看找下字符串)下面的 call
setne bl
test bl, bl
je XXXX
到这个CALL后看堆栈
看你输入的假的前两位和下面的,下面真码的前2位,
图10
(我的假码是aassddff)
aa是假的,46是真码
这是第一步密码验证,后面还有yao2 yao3
继续向下由于密码不对,要把 这个JE跳过去,不跳就密码错误了
跳过后在F8向下找yao2,YAO2以上的跳转都不要跳过这个yao2,否则密码不对
向下找到yao2后,会有这样的地方下面的JE有个OK和yao1不一样 00469F14 E8 1BADF9FF call 00404C34 停在这里看堆栈
00469F19 74 0C je short 00469F27
00469F1B B8 EC9F4600 mov eax, 00469FEC
00469F20 E8 DB34FCFF call 0042D400
00469F25 EB 28 jmp short 00469F4F
00469F27 A1 54014700 mov eax, dword ptr [470154]
00469F2C BA 3CA04600 mov edx, 0046A03C ; ASCII
"ok"
图11
假码真码的3-6位比较
一个真一个假
记完真的后,在F8向下
JE要跳过的,不跳还是错
F8向下,一会就到RETN了可咋办来
别动了,鼠标中键向下找,一会就找到
yao3了,在他的下面还有一段 0046A19F E8 90AAF9FF call 00404C34 最后两位密码验证,停在这里,看
堆栈,假码对应的最后两位
0046A1A4 0F95C3 setne bl
0046A1A7 84DB test bl, bl
0046A1A9 74 11 je short 0046A1BC
0046A1AB A1 0C054700 mov eax, dword ptr [47050C]
0046A1B0 8B00 mov eax, dword ptr [eax]
0046A1B2 E8 3D07FFFF call 0045A8F4
0046A1B7 E9 ED000000 jmp 0046A2A9
到这里运行是不会断下的,重载程序输入8位前6位正确的密码,后面的两位自己补,中断后
在看堆栈最后两位的比较。
8位密码找完了,这是老版的,和Z以前的那个教程方法后面差不多一样,但是这个有壳,没字符。
总结下,
飓风的破解有时要怪怪的方法才能破
有壳没字符串的时候用条件记录断点试下
CHHSUN 09.11.05 |