您的位置:首页 > 其它

[破解实例][OllyDbg] CrackMe002-Afkayas.1

2016-02-04 16:41 796 查看

[破解实例][OllyDbg] CrackMe002-Afkayas.1

本例可执行文件(含破解版)下载:CrackMe002-Afkayas.1

本例比上例简单,只需破解主界面的用户名/序列号。

一、查壳

用PEiD查壳结果为Microsoft Visual Basic 5.0 / 6.0,无壳。

二、破解

使用OllyDbg工具打开Afkayas.1.exe,进入调试运行,断在程序入口处。

错误提示框为:



同以前的方法,找到出现字符串”Try Again”对应的汇编代码位置:







分析可得,

0x0040258B之前的代码验证了输入的Name/Serial是否正确,根据验证结果进行跳转。因此只需将0x0040258B处的条件跳转NOP掉,就能完成破解。

也可直接分析得出正确的Name/Serial关系,将0x004023ED- 0x0040258B的代码单独拎出来,分析如下:

004023ED .. CALL DWORD PTR DS:[EAX+A0]                   ; get the Name we input
...
00402409 .. MOV EDX,DWORD PTR SS:[EBP-B0]
0040240F .. MOV EAX,DWORD PTR SS:[EBP-1C]                ; save Name to EAX
00402412 .. PUSH EAX                                     ; push Name
00402413 .. MOV EBX,DWORD PTR DS:[EDX]
00402415 .. CALL DWORD PTR DS:[<&MSVBVM50.__vbaLenBstr>] ; get length of Name
0040241B .. MOV EDI,EAX                                  ; EDI = length of Name
0040241D .. MOV ECX,DWORD PTR SS:[EBP-18]                ; save Name to ECX
00402420 .. IMUL EDI,EDI,17CFB                           ; EDI *= 0x17CFB
00402426 .. PUSH ECX                                     ; push Name
00402427 .. JO Afkayas_.004026BE                         ; jump if overflow
0040242D .. CALL DWORD PTR DS:[<&MSVBVM50.#516>]         ; get the 1'st char of Name
00402433 .. MOVSX EDX,AX                                 ; Name[0]
00402436 .. ADD EDI,EDX                                  ; EDI += Name[0], remember as _res
00402438 .. JO Afkayas_.004026BE
0040243E .. PUSH EDI
0040243F .. CALL DWORD PTR DS:[<&MSVBVM50.__vbaStrI4>]   ; _str = itos(_res)
...
0040251C .. PUSH EAX                                     ;  push the real serial we input
0040251D .. PUSH Afkayas_.00401B70                       ;  "AKA-"
00402522 .. PUSH ECX                                     ;  _str
00402523 .. CALL EDI                                     ;  get the correct serial "AKA-"+_str
00402525 .. MOV EBX,DWORD PTR DS:[<&MSVBVM50.__vbaStrMove>]
0040252B .. MOV EDX,EAX
0040252D .. LEA ECX,DWORD PTR SS:[EBP-20]
00402530 .. CALL EBX
00402532 .. PUSH EAX                                     ; push the correct serial
00402533 .. CALL DWORD PTR DS:[<&MSVBVM50.__vbaStrCmp>]  ; compare
00402539 .. MOV ESI,EAX                                  ; ESI = 0 if equal,1 if not
0040253B .. LEA EDX,DWORD PTR SS:[EBP-20]
0040253E .. NEG ESI                                      ; ESI = -ESI
00402540 .. LEA EAX,DWORD PTR SS:[EBP-18]
00402543 .. PUSH EDX
00402544 .. SBB ESI,ESI                                  ; ESI = ESI-ESI-CF
00402546 .. LEA ECX,DWORD PTR SS:[EBP-1C]
00402549 .. PUSH EAX
0040254A .. INC ESI                                      ; ESI++
0040254B .. PUSH ECX
0040254C .. PUSH 3
0040254E .. NEG ESI                                      ; ESI = -ESI => -1 if equal,0 if not
...
00402579 .. TEST SI,SI
...
0040258B .. JE SHORT Afkayas_.004025E5


可知正确的Name/Serial关系为 _res = strlen(Name)* 0x17CFB +Name[0],Serial = “AKA-_res”。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: