首页
社区
课程
招聘
[旧帖] [原创]爆破CrackMe12.zip_255 0.00雪花
发表于: 2016-1-29 21:26 1619

[旧帖] [原创]爆破CrackMe12.zip_255 0.00雪花

2016-1-29 21:26
1619
CrackMe提供者:acafeel
原帖:http://bbs.pediy.com/showthread.php?t=8822

工具:od
平台:winxpsp3

这个程序有两层壳,手工脱壳费了些时间。其实也挺简单,主要是第一次接触两层壳,不熟悉,导致脱掉第一层壳之后一眼没看到代码,以为搞错了,其实不过是个障眼法。
直接运行刚脱壳的程序,发现闪退。显然程序有反调试代码。od载入,
0048FFF8 >  55              push    ebp
0048FFF9    8BEC            mov     ebp, esp
0048FFFB    83C4 F4         add     esp, -0C
0048FFFE    B8 18FE4800     mov     eax, 0048FE18
00490003    E8 6C65F7FF     call    00406574
00490008    A1 6C234900     mov     eax, dword ptr [49236C]
0049000D    8B00            mov     eax, dword ptr [eax]
0049000F    E8 D890FAFF     call    004390EC
00490014    E8 FFFCFFFF     call    0048FD18                         ;反调试
00490019    84C0            test    al, al                           ;测试
0049001B    74 0E           je      short 0049002B                   ;爆破点
0049001D    A1 6C234900     mov     eax, dword ptr [49236C]
00490022    8B00            mov     eax, dword ptr [eax]
00490024    E8 0F92FAFF     call    00439238
00490029    EB 24           jmp     short 0049004F
0049002B    8B0D 6C244900   mov     ecx, dword ptr [49246C]          ; test.0049393C
00490031    A1 6C234900     mov     eax, dword ptr [49236C]
00490036    8B00            mov     eax, dword ptr [eax]
00490038    8B15 68F24800   mov     edx, dword ptr [48F268]          ; test.0048F2B4
0049003E    E8 C190FAFF     call    00439104
00490043    A1 6C234900     mov     eax, dword ptr [49236C]
00490048    8B00            mov     eax, dword ptr [eax]
0049004A    E8 3591FAFF     call    00439184
0049004F    E8 5839F7FF     call    004039AC

程序入口函数就这么简短,稍微测试一下就可以发现反调试爆破点。具体爆破看个人喜好了。下面寻找注册按钮响应函数,
0048FB37    55              push    ebp
0048FB38    68 E5FB4800     push    0048FBE5
0048FB3D    64:FF30         push    dword ptr fs:[eax]
0048FB40    64:8920         mov     dword ptr fs:[eax], esp
0048FB43    8D55 FC         lea     edx, dword ptr [ebp-4]
0048FB46    A1 3C394900     mov     eax, dword ptr [49393C]
0048FB4B    8B80 D8020000   mov     eax, dword ptr [eax+2D8]
0048FB51    E8 9670FBFF     call    00446BEC                                ;取输入的用户名
0048FB56    8B45 FC         mov     eax, dword ptr [ebp-4]
0048FB59    50              push    eax
0048FB5A    B9 F8FB4800     mov     ecx, 0048FBF8                    ; ASCII "name"
0048FB5F    BA 08FC4800     mov     edx, 0048FC08                    ; ASCII "Reg"
0048FB64    A1 44394900     mov     eax, dword ptr [493944]
0048FB69    E8 E2F5FFFF     call    0048F150                                ;保存输入的用户名到注册表
0048FB6E    8D55 F8         lea     edx, dword ptr [ebp-8]
0048FB71    A1 3C394900     mov     eax, dword ptr [49393C]
0048FB76    8B80 E0020000   mov     eax, dword ptr [eax+2E0]
0048FB7C    E8 6B70FBFF     call    00446BEC                                ;取输入的注册码
0048FB81    8B45 F8         mov     eax, dword ptr [ebp-8]
0048FB84    50              push    eax
0048FB85    B9 14FC4800     mov     ecx, 0048FC14                    ; ASCII "code"
0048FB8A    BA 08FC4800     mov     edx, 0048FC08                    ; ASCII "Reg"
0048FB8F    A1 44394900     mov     eax, dword ptr [493944]
0048FB94    E8 B7F5FFFF     call    0048F150                                ;保存输入的注册码到注册表
0048FB99    6A 01           push    1
0048FB9B    8D55 F4         lea     edx, dword ptr [ebp-C]
0048FB9E    A1 6C234900     mov     eax, dword ptr [49236C]
0048FBA3    8B00            mov     eax, dword ptr [eax]
0048FBA5    E8 A29AFAFF     call    0043964C                                ;取应用程序路径
0048FBAA    8B45 F4         mov     eax, dword ptr [ebp-C]
0048FBAD    E8 7643F7FF     call    00403F28
0048FBB2    50              push    eax
0048FBB3    E8 386CF7FF     call    <jmp.&kernel32.WinExec>                ;重启应用程序

我们发现该函数仅简单的保存了用户输入,然后就重启自身。其间并没有验证操作。重启的程序依然显示未注册。可以推测验证工作是在程序启动之后显示之前进行的。本文拖了很久是因为我一直没有找到一个普遍适用的方法定位该处理函数。我猜想作为框架中可供用户使用的该函数应该是一个可重载的虚函数。定位这类函数不知道有没有同道有可行的方法。最后还是使用特例找到了处理函数(在kernel32.CompareStringA上下断回推),
0048F941    8B45 EC         mov     eax, dword ptr [ebp-14]                ;程序计算的注册码
0048F944    8B15 4C394900   mov     edx, dword ptr [49394C]                ;用户输入的注册码
0048F94A    E8 B989F7FF     call    00408308                                ;比较
0048F94F    84C0            test    al, al                                ;测试结果
0048F951    74 6D           je      short 0048F9C0                        ;爆破点

程序中验证注册码有两处,如果仅处理上面一处,程序显示结果为“小心!破解版本”,另一处在下面
0048F9CD    8B45 E4         mov     eax, dword ptr [ebp-1C]
0048F9D0    8B15 4C394900   mov     edx, dword ptr [49394C]
0048F9D6    E8 2D89F7FF     call    00408308
0048F9DB    84C0            test    al, al
0048F9DD    75 57           jnz     short 0048FA36

有更好的方法请回帖指教,谢谢!

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//