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

来源:互联网 发布:淘宝上的12号塑料弹壳 编辑:程序博客网 时间:2024/06/04 23:30

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


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


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


一、查壳

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


二、破解

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

错误提示框为:

错误提示框

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

验证代码1
验证代码2
验证代码3

分析可得,
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 EAX00402412 .. PUSH EAX                                     ; push Name00402413 .. MOV EBX,DWORD PTR DS:[EDX]00402415 .. CALL DWORD PTR DS:[<&MSVBVM50.__vbaLenBstr>] ; get length of Name0040241B .. MOV EDI,EAX                                  ; EDI = length of Name0040241D .. MOV ECX,DWORD PTR SS:[EBP-18]                ; save Name to ECX00402420 .. IMUL EDI,EDI,17CFB                           ; EDI *= 0x17CFB00402426 .. PUSH ECX                                     ; push Name00402427 .. JO Afkayas_.004026BE                         ; jump if overflow0040242D .. CALL DWORD PTR DS:[<&MSVBVM50.#516>]         ; get the 1'st char of Name00402433 .. MOVSX EDX,AX                                 ; Name[0]00402436 .. ADD EDI,EDX                                  ; EDI += Name[0], remember as _res00402438 .. JO Afkayas_.004026BE0040243E .. PUSH EDI0040243F .. CALL DWORD PTR DS:[<&MSVBVM50.__vbaStrI4>]   ; _str = itos(_res)...0040251C .. PUSH EAX                                     ;  push the real serial we input0040251D .. PUSH Afkayas_.00401B70                       ;  "AKA-"00402522 .. PUSH ECX                                     ;  _str00402523 .. CALL EDI                                     ;  get the correct serial "AKA-"+_str00402525 .. MOV EBX,DWORD PTR DS:[<&MSVBVM50.__vbaStrMove>]0040252B .. MOV EDX,EAX0040252D .. LEA ECX,DWORD PTR SS:[EBP-20]00402530 .. CALL EBX00402532 .. PUSH EAX                                     ; push the correct serial00402533 .. CALL DWORD PTR DS:[<&MSVBVM50.__vbaStrCmp>]  ; compare00402539 .. MOV ESI,EAX                                  ; ESI = 0 if equal,1 if not0040253B .. LEA EDX,DWORD PTR SS:[EBP-20]0040253E .. NEG ESI                                      ; ESI = -ESI00402540 .. LEA EAX,DWORD PTR SS:[EBP-18]00402543 .. PUSH EDX00402544 .. SBB ESI,ESI                                  ; ESI = ESI-ESI-CF00402546 .. LEA ECX,DWORD PTR SS:[EBP-1C]00402549 .. PUSH EAX0040254A .. INC ESI                                      ; ESI++0040254B .. PUSH ECX0040254C .. PUSH 30040254E .. 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”。


0 0