查看文章 |
四、 逆向工程实例 我自己用MFC写了一个CrackMe&ReverseMe,再进行逆向分析,应该说这也是学习crack和reverse engineering的好方法。
破解过程很简单,因为当输入错误时会有提示。所以直接在debugger中查找字符串就能迅速定位。再下断点进行分析。 因为使用文本框进行输入,所以也可在GetDlgItem或GetWindowText函数上下断点。
下面就是在OllyDbg中分析后截取的代码片段。包含了验证过程的全部调试代码。 00401508 . E8 DF030000 CALL <JMP.&MFC42.#3092_?GetDlgItem@CWnd@> 0040150D . 8BC8 MOV ECX,EAX 00401514 . 8B 00401518 . 8B 0040151B . 0040151E . 00401524 . 8D5424 08 LEA EDX,DWORD PTR SS:[ESP+8] ; 可以猜想是对位数的判断 00401528 . 8D 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 . E 00401543 . 8BC8 MOV ECX,EAX 00401545 . E8 0040154E . 00401552 . 00401558 . 8B5424 08 MOV EDX,DWORD PTR SS:[ESP+8] 0040155D . 8B 00401560 . 99 CDQ 00401561 . 2BC2 SUB EAX,EDX 00401563 . 8BF0 MOV ESI,EAX 00401565 . D1FE SAR ESI,1 00401567 . 78 00401569 > 0040156B . 8D4424 24 LEA EAX,DWORD PTR SS:[ESP+24] 00401570 . 50 PUSH EAX 00401571 . 8D 00401575 . E8 60030000 CALL <JMP.&MFC42.#4278_?Mid@CString@@QBE>; CString::Mid(),取指定 0040157B . 8D 00401584 . E8 57030000 CALL <JMP.&MFC42.#858_??4CString@@QAEABV> 00401589 . 8D 0040158D . C64424 30 04 MOV BYTE PTR SS:[ESP+30],4 00401592 . E8 07030000 CALL <JMP.&MFC42.#800_??1CString@@QAE@XZ> 00401597 . 8D 0040159B . 51 PUSH ECX 004015AF . 8BC1 MOV EAX,ECX |

