吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 5444|回复: 29

[原创逆向图文] 好名字取名软件逆向过程

  [复制链接]
abao991 发表于 2014-11-9 13:24 | 显示全部楼层 |阅读模式

本帖最后由 abao991 于 2014-11-9 13:46 编辑

一、脱壳
查壳:ASPack 2.12 -> Alexey Solodovnikov
a.png
但是使用脱壳机脱壳后无法运行,用OD载入看下
  1. 00A25001 >  60              pushad
  2. 00A25002    E8 03000000     call 好名字取.00A2500A                       ; 此处使用ESP定律
  3. 00A25007  - E9 EB045D45     jmp 45FF54F7
  4. 00A2500C    55              push ebp
  5. 00A2500D    C3              retn
  6. 00A2500E    E8 01000000     call 好名字取.00A25014
  7. 00A25013    EB 5D           jmp short 好名字取.00A25072
  8. 00A25015    BB EDFFFFFF     mov ebx,-0x13
  9. 00A2501A    03DD            add ebx,ebp
  10. 00A2501C    81EB 00506200   sub ebx,好名字取.00625000
  11. 00A25022    83BD 88040000 0>cmp dword ptr ss:[ebp+0x488],0x0
  12. 00A25029    899D 88040000   mov dword ptr ss:[ebp+0x488],ebx
复制代码

具体下断过程就省略了,下硬件断点后F9运行,来到这里:
  1. 00A25416   /75 08           jnz short 好名字取.00A25420
  2. 00A25418   |B8 01000000     mov eax,0x1
  3. 00A2541D   |C2 0C00         retn 0xC
  4. 00A25420   \68 A00B4F00     push 好名字取.004F0BA0
  5. 00A25425    C3              retn
复制代码

单步过RETN后代码,明显这里不是我们的OEP
  1. 004F0BA0    F8              clc
  2. 004F0BA1    EB 23           jmp short 好名字取.004F0BC6
  3. 004F0BA3    101C7C          adc byte ptr ss:[esp+edi*2],bl
  4. 004F0BA6    40              inc eax
  5. 004F0BA7    FB              sti
  6. 004F0BA8    A9 2B70F657     test eax,0x57F6702B
  7. 004F0BAD    8577 DF         test dword ptr ds:[edi-0x21],esi
  8. 004F0BB0    DC79 5A         fdivr qword ptr ds:[ecx+0x5A]
  9. 004F0BB3    3BF9            cmp edi,ecx
  10. 004F0BB5    CD 94           int 0x94
  11. 004F0BB7    28A5 B65B9267   sub byte ptr ss:[ebp+0x67925BB6],ah
  12. 004F0BBD    A6              cmps byte ptr ds:[esi],byte ptr es:[edi]
  13. 004F0BBE    24 AA           and al,0xAA
  14. 004F0BC0    04 65           add al,0x65
复制代码

那么我们继续单步,来到
  1. 004F0BC6    60              pushad
  2. 004F0BC7    73 1E           jnb short 好名字取.004F0BE7
  3. 004F0BC9    4D              dec ebp
  4. 004F0BCA    B2 3C           mov dl,0x3C
  5. 004F0BCC    5F              pop edi
  6. 004F0BCD    DE1B            ficomp word ptr ds:[ebx]
复制代码

看到PUSHAD,可以继续使用ESP定律,之后来到
  1. 004F0E35    F8              clc
  2. 004F0E36    73 0D           jnb short 好名字取.004F0E45
  3. 004F0E38    A3 A1D2AFF8     mov dword ptr ds:[0xF8AFD2A1],eax
  4. 004F0E3D    F1              int1
  5. 004F0E3E    38BE 49C5A5FA   cmp byte ptr ds:[esi-0x55A3AB7],bh
  6. 004F0E44    4D              dec ebp
  7. 004F0E45  ^ E9 E289FDFF     jmp 好名字取.004C982C
复制代码

单步过004F0E46,就跳到了程序的OEP。
  1. 004C982C    55              push ebp
  2. 004C982D    8BEC            mov ebp,esp
  3. 004C982F    6A FF           push -0x1
  4. 004C9831    68 38F29700     push 好名字取.0097F238
  5. 004C9836    68 A4C14C00     push 好名字取.004CC1A4
  6. 004C983B    64:A1 00000000  mov eax,dword ptr fs:[0]
  7. 004C9841    50              push eax
  8. 004C9842    64:8925 0000000>mov dword ptr fs:[0],esp
  9. 004C9849    83EC 58         sub esp,0x58
  10. 004C984C    53              push ebx
  11. 004C984D    56              push esi
  12. 004C984E    57              push edi
  13. 004C984F    8965 E8         mov dword ptr ss:[ebp-0x18],esp
复制代码

之后脱壳+修复就可以了。
二、逆向
1、逆向提示
首先打开注册界面,输入假码,弹出信息框“注册失败,请与作者联系,获得正确注册码!”
查找字符串,提示没有发现。
既然有信息框,可以使用F12暂停法。
F12暂停-Alt+F9-点击信息框上的确定,到达0042F3E6
  1. 0042F3D8   .  8D0470        lea eax,dword ptr ds:[eax+esi*2]
  2. 0042F3DB   .  50            push eax                                 ; /Style
  3. 0042F3DC   .  52            push edx                                 ; |Title
  4. 0042F3DD   .  51            push ecx                                 ; |Text
  5. 0042F3DE   .  6A 00         push 0x0                                 ; |hOwner = NULL
  6. 0042F3E0   .  FF15 B4164F00 call dword ptr ds:[<&user32.MessageBoxA>>; \MessageBoxA
  7. 0042F3E6   .  5F            pop edi                                  ;  0932FA29
  8. 0042F3E7   .  83F8 03       cmp eax,0x3                              ;  Switch (cases 2..7)
  9. 0042F3EA   .  5E            pop esi
复制代码

很明显,42F3E0就是弹出信息框的位置,向上找,没有发现能跳过调用信息框的跳转。
那么我们继续单步。
过了RETN之后,来到这里
  1. 004582F6 . 894424 10 mov dword ptr ss:[esp+0x10],eax
  2. 004582FA . 8D5424 08 lea edx,dword ptr ss:[esp+0x8]
  3. 004582FE . 52 push edx
  4. 004582FF . FFD3 call ebx
  5. 00458301 . 8B4424 0C mov eax,dword ptr ss:[esp+0xC]
  6. 00458305 . 8B5424 10 mov edx,dword ptr ss:[esp+0x10]
  7. 00458309 . 8B4C24 14 mov ecx,dword ptr ss:[esp+0x14]
  8. 0045830D . 83C4 18 add esp,0x18
复制代码


[color=rgb(51, 102, 153) !important]复制代码

程序运行到了00458301,说明上面004582FF就是调用注册失败的call。
可能有和我一样的新手不明白,简单解释下。
我们从上面的代码开始看起。
程序首先从004582F6开始,执行到004582FF,遇到了一个CALL。如果我们用OD F7跟进这个CALL,当我们F8步过这个CALL的断尾RETN时,程序会返回到调用它的下一行继续执行,也就是00458301。同样,刚才我提到,程序运行到了00458301,就说明是从004582FF这个CALL出来的。
向上看,没有发现能跳过004582FF的跳转。那么我们继续单步到达这里。
  1. 004222F3   > \E8 DAEEFDFF   call 好名字取.004011D2
  2. 004222F8   .  85C0          test eax,eax
  3. 004222FA   .  0F84 3F000000 je 好名字取.0042233F                         ;  这个跳转能够跳过00422332,即跳过注册失败</b></font>
  4. 00422300   .  F9            stc
  5. 00422301   .  72 01         jb short 好名字取.00422304
  6. 00422303      B3            db B3
  7. 00422304   .  68 04000080   push 0x80000004
  8. 00422309   .  6A 00         push 0x0
  9. 0042230B   .  68 9ED88100   push 好名字取.0081D89E
  10. 00422310   .  68 01030080   push 0x80000301
  11. 00422315   .  6A 00         push 0x0
  12. 00422317   .  68 40000000   push 0x40
  13. 0042231C   .  68 04000080   push 0x80000004
  14. 00422321   .  6A 00         push 0x0
  15. 00422323   .  68 A9D88100   push 好名字取.0081D8A9
  16. 00422328   .  68 03000000   push 0x3
  17. 0042232D   .  BB 40F34200   mov ebx,好名字取.0042F340
  18. <font color="#ff0000"><b>00422332   .  E8 599C0000   call 好名字取.0042BF90                       ;  调用注册失败</b></font>
  19. 00422337   .  83C4 28       add esp,0x28
复制代码


看上面的注释,
je 好名字取.0042233F  如果不跳,就调用了注册失败。所以我们改为JMP。

                               
登录/注册后可看大图


2、逆向功能
重新运行程序,可以发现同样提示未注册,说明有重启验证。字符串搜索“注册”
  1. 004010A5      C0            db C0
  2. 004010A6      0F845B00      dd 好名字取.005B840F
  3. 004010AA      00            db 00
  4. 004010AB      00            db 00
  5. 004010AC      F9            db F9
  6. 004010AD      72            db 72                                    ;  CHAR 'r'
  7. 004010AE      01            db 01
  8. 004010AF      B3            db B3
  9. 004010B0   .  68 04000080   push 0x80000004
  10. 004010B5   .  6A 00         push 0x0
  11. 004010B7   .  68 C9644F00   push 好名字取.004F64C9
  12. 004010BC   .  68 01030080   push 0x80000301
  13. 004010C1   .  6A 00         push 0x0
  14. 004010C3   .  68 30000000   push 0x30
  15. 004010C8   .  68 04000080   push 0x80000004
  16. 004010CD   .  6A 00         push 0x0
  17. 004010CF   .  68 D2644F00   push 好名字取.004F64D2                       ;  未注册版本,不可以选择高分名字!
  18. 004010D4   .  68 03000000   push 0x3
  19. 004010D9   .  BB 40F34200   mov ebx,好名字取.0042F340
  20. 004010DE   .  E8 ADAE0200   call 好名字取.0042BF90
  21. 004010E3   .  83C4 28       add esp,0x28
复制代码

可以看到前面的 db 00。右键-分析-从模块中删除分析
  1. 00401085   /0F85 7C000000   jnz 好名字取.00401107
  2. 0040108B   |F8              clc
  3. 0040108C   |73 01           jnb short 好名字取.0040108F
  4. 0040108E   |0FE83E          psubsb mm7,qword ptr ds:[esi]
  5. 00401091   |0100            add dword ptr ds:[eax],eax
  6. 00401093   |0089 45FCF873   add byte ptr ds:[ecx+0x73F8FC45],cl
  7. 00401099   |0181 8B45FC83   add dword ptr ds:[ecx-0x7C03BA75],eax
  8. 0040109F   |E0 01           loopdne short 好名字取.004010A2
  9. 004010A1   |83F0 01         xor eax,0x1
  10. 004010A4   |85C0            test eax,eax
  11. 004010A6   |0F84 5B000000   je 好名字取.00401107
  12. 004010AC   |F9              stc
  13. 004010AD   |72 01           jb short 好名字取.004010B0
  14. 004010AF   |B3 68           mov bl,0x68
  15. 004010B1   |04 00           add al,0x0
  16. 004010B3   |0080 6A0068C9   add byte ptr ds:[eax-0x3697FF96],al
  17. 004010B9   |64:4F           dec edi
  18. 004010BB   |0068 01         add byte ptr ds:[eax+0x1],ch
  19. 004010BE   |0300            add eax,dword ptr ds:[eax]
  20. 004010C0   |806A 00 68      sub byte ptr ds:[edx],0x68
  21. 004010C4   |3000            xor byte ptr ds:[eax],al
  22. 004010C6   |0000            add byte ptr ds:[eax],al
  23. 004010C8   |68 04000080     push 0x80000004
  24. 004010CD   |6A 00           push 0x0
  25. 004010CF   |68 D2644F00     push 好名字取.004F64D2                       ; 未注册版本,不可以选择高分名字!
  26. 004010D4   |68 03000000     push 0x3
  27. 004010D9   |BB 40F34200     mov ebx,好名字取.0042F340
  28. 004010DE   |E8 ADAE0200     call 好名字取.0042BF90
  29. 004010E3   |83C4 28         add esp,0x28
  30. 004010E6   |F9              stc
  31. 004010E7   |72 01           jb short 好名字取.004010EA
  32. 004010E9   |7C 6A           jl short 好名字取.00401155
  33. 004010EB   |0068 F3         add byte ptr ds:[eax-0xD],ch
  34. 004010EE   |64:4F           dec edi
  35. 004010F0   |006A FF         add byte ptr ds:[edx-0x1],ch
  36. 004010F3   |6A 09           push 0x9
  37. 004010F5   |68 C00B0116     push 0x16010BC0
  38. 004010FA   |68 01000152     push 0x52010001
  39. 004010FF   |E8 98AE0200     call 好名字取.0042BF9C
  40. 00401104   |83C4 18         add esp,0x18
  41. 00401107   \8BE5            mov esp,ebp
复制代码

把00401085中JE改为JMP以跳过注册失败,继续查找。
  1. 004128F4   > \833D E8029E00>cmp dword ptr ds:[0x9E02E8],0x0
  2. 004128FB   .  0F84 0A000000 je 好名字取.0041290B
  3. 00412901   .  B8 A25A7D00   mov eax,好名字取.007D5AA2                    ;  已经注册版本!感谢您对我们的支持!
  4. 00412906   .  E9 05000000   jmp 好名字取.00412910
  5. 0041290B   >  B8 C55A7D00   mov eax,好名字取.007D5AC5                    ;  未注册版本!请与作者联系注册事宜!
复制代码

可以看到,程序将9E02E8的值与0进行比较,所以9E02E8是关键常量,右键-查找所有常量-9E02E8
  1. 参考位于 好名字取:.text 到常量 9E02E8
  2. 地址       反汇编                                    注释
  3. 004053CD   cmp dword ptr ds:[0x9E02E8],0x0           ds:[009E02E8]=00000000
  4. 0040C738   mov dword ptr ds:[0x9E02E8],eax
  5. 004128F4   cmp dword ptr ds:[0x9E02E8],0x0           (初始 CPU 选择)
  6. 00422186   dd 好名字取.009E02E8
  7. 004236C9   mov eax,dword ptr ds:[0x9E02E8]           [009E02E8]=00000000
复制代码

0040C738就是给常量赋值的地方,可以从这里入手,也可以到其他位置逐个修改。
还有个别需要修改的地方,比如标题的未注册,都可以通过字符串查找找到。

附上软件下载地址:
http://www.duote.com/soft/30410.html
吾爱汇编论坛原创,转载请注明出处。



评分

参与人数 20威望 +1 HB +49 THX +11 收起 理由
29590 + 1
24567 + 2
虚心学习 + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
一路走来不容易 + 1
Soul1999 + 1
yexing + 1
消逝的过去 + 2
792121621 + 1
liugu0hai + 1 + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
jaunic + 2
hnymsh + 1
lies + 1
tony2526 + 1 + 1 ★★★★★ 热心人,佛祖保佑你事事顺利 ,财源滚滚!!!
nn19880115 + 1 + 1 评分=感恩!简单却充满爱!感谢您的作品!
东子郭 + 3 + 1 评分=感恩!简单却充满爱!感谢您的作品!
haliyou001 + 1 评分=感恩!简单却充满爱!感谢您的作品!
ikeeki + 2 + 1 我很赞同!
王婆卖瓜 + 5 + 1 积极评分从我做起,感谢!
bigeorry + 5 + 1 感谢楼主,我来加个分
Shark恒 + 1 + 20 你将受到所有人的崇拜!教程非常棒~~

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
bigeorry 发表于 2014-11-9 13:29 | 显示全部楼层

我来坐个沙发。楼主为何不把练手软件也放上来啊

评分

参与人数 1HB +1 收起 理由
abao991 + 1 沙发奖励~

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
柠檬狗丶 发表于 2014-11-9 13:38 | 显示全部楼层

上软件看看呀

评分

参与人数 1HB +1 收起 理由
abao991 + 1 板凳奖励~

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
虚竹 发表于 2014-11-9 14:06 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
Shark恒 发表于 2014-11-9 15:42 | 显示全部楼层

楼主讲的这么详细,咋不加个分啊。我加了
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
活在当下 发表于 2014-11-9 21:18 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
彩虹 发表于 2014-11-9 21:48 | 显示全部楼层

讲的很详细,学习了,话说回来,是不是把eax的值修改为1就成功了呢?
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| abao991 发表于 2014-11-11 22:31 | 显示全部楼层

彩虹 发表于 2014-11-9 21:48
讲的很详细,学习了,话说回来,是不是把eax的值修改为1就成功了呢?


吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
王婆卖瓜 发表于 2014-11-15 23:08 | 显示全部楼层

楼主讲得很好,很容易懂。加分了。继续发其他的
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
虚竹 发表于 2014-11-15 23:27 | 显示全部楼层

....能不能出视频教程啊!

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层
7层
8层
9层
10层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

快速回复 返回顶部 返回列表