查看文章
 
逆向工程初步( 二)
2008-08-27 0:11

四、         逆向工程实例

我自己用MFC写了一个CrackMe&ReverseMe,再进行逆向分析,应该说这也是学习crackreverse engineering的好方法。

破解过程很简单,因为当输入错误时会有提示。所以直接在debugger中查找字符串就能迅速定位。再下断点进行分析。

因为使用文本框进行输入,所以也可在GetDlgItemGetWindowText函数上下断点。

下面就是在OllyDbg中分析后截取的代码片段。包含了验证过程的全部调试代码。

00401508 . E8 DF030000   CALL <JMP.&MFC42.#3092_?GetDlgItem@CWnd@>

0040150D . 8BC8          MOV ECX,EAX

0040150F . E8 D2030000 CALL <JMP.&MFC42.#3874_?GetWindowTextA@C>; GetDlgItem -> GetWindowText

00401514 . 8B4C24 08     MOV ECX,DWORD PTR SS:[ESP+8]             ; 明显是取用户输入的字符

00401518 . 8B41 F8       MOV EAX,DWORD PTR DS:[ECX-8]

0040151B . 83F8 05       CMP EAX,5                                ; 先比较

0040151E . 0F8C ED000000 JL CrackMe&.00401611                     ; 再跳转

00401524 . 8D5424 08     LEA EDX,DWORD PTR SS:[ESP+8]             ; 可以猜想是对位数的判断

00401528 . 8D4C24 0C     LEA ECX,DWORD PTR SS:[ESP+C]             ; 判断UN是否有5位以上

0040152C . 52            PUSH EDX

0040152D . E8 AE030000   CALL <JMP.&MFC42.#858_??4CString@@QAEABV>

00401532 . 8D4424 10     LEA EAX,DWORD PTR SS:[ESP+10]

00401536 . 8BCD          MOV ECX,EBP

00401538 . 50            PUSH EAX

00401539 . 68 E9030000   PUSH 3E9

0040153E . E8 A9030000   CALL <JMP.&MFC42.#3092_?GetDlgItem@CWnd@>

00401543 . 8BC8          MOV ECX,EAX

00401545 . E8 9C030000   CALL <JMP.&MFC42.#3874_?GetWindowTextA@C>

0040154A . 8B4C24 10     MOV ECX,DWORD PTR SS:[ESP+10]

0040154E . 8379 F8 08    CMP DWORD PTR DS:[ECX-8],8             ; 同上,判断SN是否有8

00401552 . 0F8C B9000000 JL CrackMe&.00401611

00401558 . 8B5424 08     MOV EDX,DWORD PTR SS:[ESP+8]

0040155C . 56            PUSH ESI

0040155D . 8B42 F8       MOV EAX,DWORD PTR DS:[EDX-8]

00401560 . 99            CDQ

00401561 . 2BC2          SUB EAX,EDX

00401563 . 8BF0          MOV ESI,EAX

00401565 . D1FE          SAR ESI,1

00401567 . 78 3F         JS SHORT CrackMe&.004015A8               ; 循环

00401569 > 6A 01         PUSH 1

0040156B . 8D4424 24     LEA EAX,DWORD PTR SS:[ESP+24]

0040156F . 56            PUSH ESI

00401570 . 50            PUSH EAX

00401571 . 8D4C24 18     LEA ECX,DWORD PTR SS:[ESP+18]

00401575 . E8 60030000   CALL <JMP.&MFC42.#4278_?Mid@CString@@QBE>; CString::Mid(),取指定

0040157A . 50           PUSH EAX                                    的字符(串)

0040157B . 8D4C24 20     LEA ECX,DWORD PTR SS:[ESP+20]

0040157F . C64424 34 05 MOV BYTE PTR SS:[ESP+34],5

00401584 . E8 57030000   CALL <JMP.&MFC42.#858_??4CString@@QAEABV>

00401589 . 8D4C24 20     LEA ECX,DWORD PTR SS:[ESP+20]

0040158D . C64424 30 04 MOV BYTE PTR SS:[ESP+30],4

00401592 . E8 07030000   CALL <JMP.&MFC42.#800_??1CString@@QAE@XZ>

00401597 . 8D4C24 1C     LEA ECX,DWORD PTR SS:[ESP+1C]

0040159B . 51            PUSH ECX

0040159C . 8D4C24 14     LEA ECX,DWORD PTR SS:[ESP+14]      ; 观察此处所指向的堆栈中的内容

004015A0 . E8 2F030000   CALL <JMP.&MFC42.#939_??YCString@@QAEABV>; 发现每次循环在UN后添加内容

004015A5 . 4E            DEC ESI        ; 仔细观察就可发现是把UN的前一半倒序添加到原UN

004015A6 .^ 79 C1         JNS SHORT CrackMe&.00401569             ; 是对原UN进行处理变形

004015A8 > 8B5424 0C     MOV EDX,DWORD PTR SS:[ESP+C]

004015AC . 8B4A F8       MOV ECX,DWORD PTR DS:[EDX-8]

004015AF . 8BC1          MOV EAX,ECX


类别:软件安全||添加到搜藏 |分享到i贴吧|浏览(164)|评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
     

   
帮助中心 | 空间客服 | 投诉中心 | 空间协议
©2012 Baidu