首页
社区
课程
招聘
[原创]第七题 不问少年crackme解题过程
发表于: 2017-6-15 15:13 4635

[原创]第七题 不问少年crackme解题过程

2017-6-15 15:13
4635

程序运行起来输入测试key,点击验证没反应,再点一次程序崩溃,这其实和题目的设计有关,后面会揭晓原因。

直接拖到od里运行,发现入口点被修改了:

IDA看一下,一眼发现有TLS,先于入口点执行了:

所以省事就先运行程序,然后OD附加进程调试,去下断获取输入的地方,发现没开始验证呢就不断的采集输入的字符串,估计和想实现直接回车验证有关,这样也稍微增加了下断验证点的难度。后来直接不下断点点击验证了,但是调试器却自己中断了:

可以看到代码里直接写了个INT3断点,应该是为了触发异常进入异常处理函数,先看一下代码里的异常处理设置,找到了一处可疑的:

进入异常处理函数,正好设定了处理int3异常,然后就发送0x464号消息:

仔细一看,该消息号保存在一个全局变量里,交叉引用可以看到另一处调用:

该处调用处于一些消息处理的函数里,处理该消息时发现了验证的主函数:

后面要调试验证过程可以直接在这个地方修改流程,可以重复的进入验证函数跟踪:

进入分析验证流程,可以看到作者还特意把计算输入key的函数加密了,需要的时候解密调用,最后计算进入check函数验证:

Check函数的流程是比较上面计算的结果和预先计算的结果是否一致,如果通过比较,就解密一个shellcode去执行:

跟踪一下比较函数吧,毕竟比较关键,发现在下图位置计算两个比较对象的长度:


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//