[破解实例][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”。
相关文章推荐
- 集群
- ServletRequest获取不到getParameter和filter获取不到request请求中的Parameter
- odbc mysql的安装
- oc 调用 swift Demo
- 面试:字符串集合 查找包含算法 的素数方案
- 实现圆角的3种方式
- [WC2016]鏖战表达式
- Out of memory (Needed 6707872 bytes)
- 数据挖掘总结之分类与聚类的区别
- oracle官方文档- length篇
- js验证中英文
- Educational Codeforces Round 6 解题报告
- [Lintcode]用栈实现队列
- 正则表达式验证Ip地址(绝对正确)
- RtlUpcaseUnicodeString routine
- 【POJ2478】Farey Seque
- jQuery插件开发全解析
- Linux DM9000网卡驱动程序完全分析
- 属于自己的常见Android选项菜单样式集合
- 判断一个值是否等于 NaN