sniy 发表于 2009-10-11 11:31:11

DnNuke Crackme1.1分析

【文章标题】: DnNuke Crackme1.1分析
【文章作者】: Sniy
【软件名称】: DnNuke Crackme1.1
【软件大小】: 207KB
【下载地址】: 自己搜索下载
【加壳方式】: UPX 0.89.6 - 1.02 / 1.05 - 1.24 (Delphi) stub -> Markus & Laszlo
【保护方式】: 压缩壳
【编写语言】: Delphi
【使用工具】: OD、DEDE、PEID...
【操作平台】: Win XP sp3
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
看到Nisy老大第九期开始报名,昨天晚上看到上面还挂这个crackme,当时就下载下来看了看,昨天弄完之后本想上去回复呢...
不晓得一看crackme被撤了...
现在我就把我的分析发上来了,呵呵...

一、工作思路

0、资料收集

1、查壳

2、脱壳

3、调试


二、详细步骤

0、资料收集
   打开软件,输入序列号:11111111,无任何提示...狂晕....

1、查壳
   使用Peid0.94版本查壳为:UPX 0.89.6 - 1.02 / 1.05 - 1.24 (Delphi) stub -> Markus & Laszlo

2、脱壳
   UPX的壳脱法太多了...大家如果懒的话可以用脱壳工具,我这里用ESP定律
   OD载入,F8单步一下,ESP变红
   00473460 >60            PUSHAD
   00473461    BE 00104400   MOV ESI,crackme.00441000   ;ESP处地址变红
      00473466    8DBE 0000FCFF   LEA EDI,DWORD PTR DS:
   在ESP处选中,右键:数据窗口中跟随,然后下硬件访问断点,Shift+F9(或F9)执行
   004735E4^\E9 AB23FEFF   JMP crackme.00455994    ;执行到此处
   004735E9    0000            ADD BYTE PTR DS:,AL
   004735EB    0008            ADD BYTE PTR DS:,CL
   取消硬件断点,单步F8到OEP00455994    55            PUSH EBP   ;OEP位置
   00455995    8BEC            MOV EBP,ESP
   00455997    83C4 F4         ADD ESP,-0C
   0045599A    B8 74584500   MOV EAX,crackme.00455874
   0045599F    E8 6C02FBFF   CALL crackme.00405C10
   脱壳,修复....

3、调试

   OD载入,查找ASCII,得到以下
   超级字串参考, 条目 15
   地址=004555F1
   反汇编=MOV EDX,111.004556C8
   文本字串=9877553311
   
   超级字串参考, 条目 17
   地址=00455620
   反汇编=MOV EDX,111.0045572C
   文本字串=9977553311
   得出结论:很可能为明码比较...我们继续...
   因为本程序为delphi编写,所以我们用GetWindowTextA或者GetDlgItemTextA一般是无法下断的...
   那怎么办呢...很好办,我们用dede查找OK按钮的地址,在OK按钮地址下断就可以了...
   经过dede查找OK按钮为clickbutton1地址为:004555A4   55                     push    ebpbp 004555A4 下断 ——> F9 ——>输入 :11111111111111111 ——>OK , 断在004555A4/.55            PUSH EBP
004555A5|.8BEC          MOV EBP,ESP
004555A7|.6A 00         PUSH 0
004555A9|.53            PUSH EBX
004555AA|.8BD8          MOV EBX,EAX
004555AC|.33C0          XOR EAX,EAX取消断点,F8单步004555BA|.8D55 FC       LEA EDX,DWORD PTR SS:
004555BD|.8B83 C4020000 MOV EAX,DWORD PTR DS:
004555C3|.E8 78D3FCFF   CALL 111.00422940
004555C8|.837D FC 00    CMP DWORD PTR SS:,0 ;判断输入的注册码是否空
004555CC|.77 12         JA SHORT 111.004555E0      ;是空则按下面几步直接跳出
004555CE|.BA 78564500   MOV EDX,111.00455678
004555D3|.8B83 C4020000 MOV EAX,DWORD PTR DS:
004555D9|.E8 92D3FCFF   CALL 111.00422970
004555DE|.EB 6F         JMP SHORT 111.0045564F
004555E0|>8D55 FC       LEA EDX,DWORD PTR SS:
004555E3|.8B83 C4020000 MOV EAX,DWORD PTR DS:;将注册码给首地址给EAX
004555E9|.E8 52D3FCFF   CALL 111.00422940
004555EE|.8B45 FC       MOV EAX,DWORD PTR SS:
004555F1|.BA C8564500   MOV EDX,111.004556C8       ;9877553311
004555F6|.E8 81E5FAFF   CALL 111.00403B7C;这里比较,如果你输入的与9877553311一样
004555FB|.75 12         JNZ SHORT 111.0045560F ;如果匹配不上则继续下一个注册码比较
004555FD|.BA DC564500   MOV EDX,111.004556DC      ;Yer almost there :)
00455602|.8B83 C4020000 MOV EAX,DWORD PTR DS:
00455608|.E8 63D3FCFF   CALL 111.00422970
0045560D|.EB 40         JMP SHORT 111.0045564F
0045560F|>8D55 FC       LEA EDX,DWORD PTR SS:
00455612|.8B83 C4020000 MOV EAX,DWORD PTR DS:
00455618|.E8 23D3FCFF   CALL 111.00422940
0045561D|.8B45 FC       MOV EAX,DWORD PTR SS:
00455620|.BA 2C574500   MOV EDX,111.0045572C       ;9977553311
00455625|.E8 52E5FAFF   CALL 111.00403B7C         ;这里对注册码进行比较
0045562A|.75 23         JNZ SHORT 111.0045564F
0045562C|.A1 10884500   MOV EAX,DWORD PTR DS:
00455631|.8378 3C 78    CMP DWORD PTR DS:,78
00455635|.75 18         JNZ SHORT 111.0045564F
00455637|.6A 00         PUSH 0
00455639|.B9 38574500   MOV ECX,111.00455738          ;Good crackah :)
0045563E|.BA 48574500   MOV EDX,111.00455748          ;Damn yer good ;). But if this is your first time, then I guess you changed the flag to 0 wich is wrong! Now go back and try again :).. But if ya did make it plz mail me how you did it.. [email protected]
00455643|.A1 18754500   MOV EAX,DWORD PTR DS:
00455648|.8B00          MOV EAX,DWORD PTR DS:解决方式有两种:

第一种:注册码为:9977553311    同时NOP掉: 00455635 JNZ SHORT 111.0045564F
第二种:注册码为:9977553311    同时观察:00455631CMP DWORD PTR DS:,78 ;此处为比较窗口大小...
                                  120 = 0x78H...窗体高度...【小小提示】
--------------------------------------------------------------------------------
【经验总结】
没什么经验总结,就是一步一步的来就可以了...呵呵
大家加油!PYG加油!

--------------------------------------------------------------------------------
【版权声明】: 本文原创于PYG论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2009年10月11日 11:26:51



[ 本帖最后由 sniy 于 2009-10-11 11:50 编辑 ]

sniy 发表于 2009-10-11 11:32:28

不知道为什么论坛不支持 .... ?

MOV 发表于 2009-10-11 11:38:24

呵呵这个是很久的东西了 当时还顶你了以呵呵
等待新的测试题吧呵呵

sniy 发表于 2009-10-11 11:40:52

好的 ... 呵呵谢谢哈    等待后面题目 ...

月无影 发表于 2009-10-11 13:36:58

自己先下载试试手。

coolfire1983 发表于 2009-10-11 14:06:39

直接搜索字符串不是更快?

HDd1145 发表于 2009-10-11 14:10:12

最忌注册 发表于 2009-10-11 14:16:31

把那个CM下来看看

风影子 发表于 2009-10-11 19:47:12

呵。。。学习了,我才刚起步,以后向大家多学习才是

zjid520 发表于 2009-10-11 20:03:52

文章写得不错,继续加油
页: [1] 2
查看完整版本: DnNuke Crackme1.1分析