首页
社区
课程
招聘
[原创]第5题解题过程
发表于: 2017-6-11 10:17 4029

[原创]第5题解题过程

2017-6-11 10:17
4029

程序运行后输入回车验证,没有任何提示,于是OD附加进程,但是发现无论是硬件断点还是内存断点,只要程序一运行到下断的位置就会直接崩溃,各种版本的OD过反调试都失效:


后来发现这是一个神奇的反调试,核心代码在驱动层,并且实现方法也很简单,主要就是在底层遍历找到crackme进程将调试端口置为0

而这个检测触发的条件需要应用层程序发送一个控制码来触发:

分析一下应用层程序对应的控制码部分,一共有2个函数里发送了该控制码,以下是一个线程函数里专门每隔3秒钟发送一次该控制码进行反调试检测:


另外一处是在验证输入key时,在把key传给驱动程序前做了一次检测:

这样一来,要过反调试有两个选择,一种是patch应用层程序,把这两处发送的控制码的地方简单patch,但是有个弊端就是程序需至少发送一次该控制码给驱动层才能将bCheck值改成1,后面才会去正常验证key返回结果。这样的话就比较麻烦,所以用另外一种选择,修改驱动,在处理该控制码的位置将调用反调试函数的代码patch掉,然后修正一下校验和,在包含该驱动的exe文件对应处修改patch后的数据:


这样卸载驱动程序后重新运行程序,便可以高枕无忧的进行动态调试了。下面开始分析验证算法。

此时可以正常下断,GetWindowText*可以跟踪到输入串,发现检查了输入串的长度为6才进行校验:


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

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