160cm之001 爆破、追码 by cqr2287
本帖最后由 cqr2287 于 2016-10-15 14:26 编辑最近闲的无聊,在家不能录视频,又有家长看管着,玩cm写帖子能增加技术含量。
160cm是从看雪老师的论坛上下的。我也玩玩。
现在分析001
(求救,分割线怎么用)
static/image/hrline/2.gif
软件有两个验证。如下图
载入od,目测像个Delphi程序,懒得查壳,下按钮事件不方便,这软好多按钮。
先干第一个验证。第一个提示sorry,那么字符串搜索sorry。
0042FA4D A1 6C174300 mov eax,dword ptr ds:
0042FA52 E8 D96EFDFF call Acid_bur.00406930
0042FA57 83F8 04 cmp eax,0x4
0042FA5A 7D 1D jge short Acid_bur.0042FA79
0042FA5C 6A 00 push 0x0
0042FA5E B9 74FB4200 mov ecx,Acid_bur.0042FB74 ; Try Again!
0042FA63 BA 80FB4200 mov edx,Acid_bur.0042FB80 ; Sorry , The serial is incorect !
0042FA68 A1 480A4300 mov eax,dword ptr ds:
0042FA6D 8B00 mov eax,dword ptr ds:
try again是下一个验证的提示,所以这个不对。找下个字符串
0042FB07 B9 CCFB4200 mov ecx,Acid_bur.0042FBCC ; Congratz !!
0042FB0C BA D8FB4200 mov edx,Acid_bur.0042FBD8 ; Good job dude =)
0042FB11 A1 480A4300 mov eax,dword ptr ds:
0042FB16 8B00 mov eax,dword ptr ds:
0042FB18 E8 53A6FFFF call Acid_bur.0042A170
0042FB1D EB 18 jmp short Acid_bur.0042FB37
0042FB1F 6A 00 push 0x0
0042FB21 B9 74FB4200 mov ecx,Acid_bur.0042FB74 ; Try Again!
0042FB26 BA 80FB4200 mov edx,Acid_bur.0042FB80 ; Sorry , The serial is incorect !
这个应该是了。因为第一个验证肯定不会调用第二个验证的失败提示,所以jge一定会跳。我们在jge后面下段
f9运行,输入假的注册码。
断下后,f8跟踪之。
此处算出真马。这个便是第一个验证的真马。
继续跟踪。
0042FB03 /75 1A jnz short Acid_bur.0042FB1F
0042FB05 |6A 00 push 0x0
0042FB07 |B9 CCFB4200 mov ecx,Acid_bur.0042FBCC ; Congratz !!
0042FB0C |BA D8FB4200 mov edx,Acid_bur.0042FBD8 ; Good job dude =)
0042FB11 |A1 480A4300 mov eax,dword ptr ds:
0042FB16 |8B00 mov eax,dword ptr ds:
0042FB18 |E8 53A6FFFF call Acid_bur.0042A170
0042FB1D |EB 18 jmp short Acid_bur.0042FB37
0042FB1F \6A 00 push 0x0
0042FB21 B9 74FB4200 mov ecx,Acid_bur.0042FB74 ; Try Again!
0042FB26 BA 80FB4200 mov edx,Acid_bur.0042FB80 ; Sorry , The serial is incorect !
0042FB2B A1 480A4300 mov eax,dword ptr ds:
0042FB30 8B00 mov eax,dword ptr ds:
0042FB32 E8 39A6FFFF call Acid_bur.0042A170
0042FB37 33C0 xor eax,eax
这个jnz跳过了成功。把jnz Nop掉即可爆破。
下面搞第二个验证
static/image/hrline/4.gif
上面已经分析过,try again是第二个验证的信息内容。所以向上回溯
0042F9FE E8 55B0FEFF call Acid_bur.0041AA58
在push地下call下断点。
运行跟踪之。
what???那就在jge下断点。
一样没用。去找别的try again看看。
有2个。在第一个上面下端看看。
0042F4D0 E8 2745FDFF call Acid_bur.004039FC
0042F4D5 75 1A jnz short Acid_bur.0042F4F1
0042F4D7 6A 00 push 0x0
0042F4D9 B9 64F54200 mov ecx,Acid_bur.0042F564 ; Congratz!
0042F4DE BA 70F54200 mov edx,Acid_bur.0042F570 ; God Job dude !! =)
0042F4E3 A1 480A4300 mov eax,dword ptr ds:
0042F4E8 8B00 mov eax,dword ptr ds:
0042F4EA E8 81ACFFFF call Acid_bur.0042A170
0042F4EF EB 18 jmp short Acid_bur.0042F509
0042F4F1 6A 00 push 0x0
0042F4F3 B9 84F54200 mov ecx,Acid_bur.0042F584 ; Failed!
0042F4F8 BA 8CF54200 mov edx,Acid_bur.0042F58C ; Try Again!!
0042F4FD A1 480A4300 mov eax,dword ptr ds:
0042F502 8B00 mov eax,dword ptr ds:
0042F504 E8 67ACFFFF call Acid_bur.0042A170
0042F509 33C0 xor eax,eax
0042F50B 5A pop edx ; 0012FA2C
在第一个上面断下了。把jnz改成nop就成功爆破了。
想要追码,还需要向上回溯。
0042F46D C3 retn
0042F46E 8BC0 mov eax,eax
0042F470 55 push ebp
0042F471 8BEC mov ebp,esp
0042F46D C3 retn
0042F46E 8BC0 mov eax,eax
0042F470 55 push ebp
0042F471 8BEC mov ebp,esp
明白了吗?
试试。
啊哈,我英语不错滴。
static/image/hrline/4.gif
好啦,吃早饭,各位88
MAXtoDEATH 发表于 2016-10-2 09:51
前排膜,顺便问下如果字符串被线性加密该如何处理?控件下断吗?
软件无论如何加密,最终呈现在你眼前的还是内容。你可以在内存中查找,因为他们最终要解密到内存 cqr2287 发表于 2016-10-4 09:21
不知道,我只搞32位逆向。脱壳方法应该差不多,,主要是修复需要跨平台。32位的比较简单,不知64位是什么 ...
谢谢回复,有机会你尝试下,我这有样本 必须支持技术贴 支持技术贴 谢谢分享,学习到了啊 感谢@Sound 大牛的支持 前排膜,顺便问下如果字符串被线性加密该如何处理?控件下断吗? 膜拜大神 黑龍 发表于 2016-10-2 10:45
膜拜大神
你好谦虚啊
Very_good 发表于 2016-10-2 10:47
你好谦虚啊
菜鸟一个