Crackme 4
来源:互联网 发布:linux简单管道 编辑:程序博客网 时间:2024/05/16 06:03
刚接触这题有点蒙蔽,做了好长时间才搞懂
以后给自己个提议首先寻找比较函数 就是说先找到那个strcmp因为往往这个地方就是判断你输入的序列号对不对的地方
接着在这里找到生成的序列号之后去找算法,算法往往在此之前。
发现没有注册按钮 首先来PEID
没有壳
首先用OD调试,没有跳出什么输入错误之类的东西,所以没有CMP不好调试
利用dede反编译工具
看到有几个函数
chkcode
下断点
找到了一个serial
那么生成算法就在上面了 找吧同时发现了一些猫腻
首先找到了黑头,并且已经入栈了
5 和字符串也已经入栈了 哈哈哈
name 入栈 万事具备只差东风
接下来的 strcat 函数下断点 估计是把以上字符串粘贴在一起吧
单击界面中间的矩形阴影
每次都会且只会在Panel1Click事件断下:
Panel1Click事件
这里写图片描述
...00457FCA .. MOV ESI,EAX ; ESI = EAX...00458031 .. CMP DWORD PTR DS:[ESI+30C],85 ; Mem[ESI+30C] == 0x850045803B .. JNZ SHORT CKme.004580B3 ; if not equal, end...00458094 .. XOR EDX,EDX00458096 .. MOV EAX,DWORD PTR DS:[ESI+2F0]0045809C .. CALL CKme.00423260 ; 去除矩形阴影004580A1 .. MOV EAX,DWORD PTR DS:[45B820]004580A6 .. ADD EAX,70 ; EAX = addr where store addr of "如果注册成功,程序中会出现..."004580A9 .. MOV EDX,CKme.00458114 ; EDX = addr where store "恭喜恭喜!注册成功!"004580AE .. CALL CKme.00403950 ; 修改输入框提示为注册成功004580B3 .. XOR EAX,EAX
在chkcode事件中我们知道,如果注册码正确,内存[ESI+30C]被赋值0x3E,否则内存[ESI+30C]等于0,显然都不等于0x85,因此0x0045803B处的指令会发生跳转,程序结束,就像什么也没发生。
显然,要让0x0045803B处的指令不跳转,那么内存[ESI+30C]的值就必须是0x85,所以应该还有其他地方会对[ESI+30C]进行写操作。
双击界面中间的矩形阴影
每次都会依次在Panel1Click、Panel1DblClick和chkcode三个事件断下,我们来看看双击事件:
...00457E8E .. MOV ESI,EAX ; ESI = EAX...00457EF5 .. CMP DWORD PTR DS:[ESI+30C],3E ; Mem[ESI+30C] == 0x3E00457EFC .. JNZ SHORT CKme.00457F08 ; not equal => end00457EFE .. MOV DWORD PTR DS:[ESI+30C],85 ; equal => Mem[ESI+30C] = 0x85
在chkcode事件中我们知道,如果注册码正确,内存[ESI+30C]被赋值0x3E,否则内存[ESI+30C]等于0;
因此,若是注册码正确,内存[ESI+30C]会再次被赋值为0x85,否则内存[ESI+30C]依旧等于0。
答案依旧很明显了
内存[ESI+30C]初始值为0;若是注册码正确,在chkcode事件中,内存[ESI+30C]被赋值0x3E,在Panel1DblClick事件(双击矩形阴影进行触发)中被进一步赋值0x85,从而在Panel1Click事件(单击或双击矩形阴影进行触发)中0x0045803B处的指令就不会发生跳转,从而反馈注册成功的信息,最后界面的矩形阴影会被一幅照片取代。
如果要爆破,只需将0x0045803B处的跳转指令NOP掉即可。
注册机
# coding=utf8s = raw_input("name:")print "黑头Sun Bird"+str(len(s)+5)+"dseloffc-012-OK"+s
- Crackme 4
- 160crackme-4
- 170527 逆向-CrackMe(4)
- CrackMe破解【4】- 入门级别
- 《PEDIY CrackMe 2007》学习笔记(二) - 序列号 - 4nil - 一只老虎的CRACKME
- 日拱一卒——160个crackme之#4
- Triangle CrackMe
- CrackMe-crackhead
- crackme 网站
- Crackme 1
- Crackme 2
- Crackme 3
- Crackme 20
- Crackme 21
- Crackme 22
- Crackme 23
- Crackme 5
- Crackme 24
- Unity下XLua方案的各值类型GC优化深度剖析
- java第十八天
- linux 内核同步
- java第十五天-总结1
- LightOJ 1061N Queen Again(搜索+状压DP)
- Crackme 4
- 浅谈retrofit2.1+okhttp3 搭建MVP框架
- java第十六天-异常体系
- 排序面试指南
- Android热修复技术选型——三大流派解析
- 防止刷票的一些方法介绍
- java.util.MissingFormatArgumentException: Format specifier 'd'
- 前端工程师不得不知道的ES6新特性(四)
- 即时通讯下数据粘包、断包处理实例(基于CocoaAsyncSocket)