首页
论坛
课程
招聘
[原创]看雪第三题之误打误撞通过过程
2017-10-28 22:22 950

[原创]看雪第三题之误打误撞通过过程

2017-10-28 22:22
950
沉浸在第二题没考虑sub对跳转影响的失误中,下了个第三题来看看
虽然找到了答案,但是这道题很多东西都没搞清楚,能解出这道题主要是题目有个BUG,在最关键的比较居然采用了明文比较
这道题难点其实就是反调试,反调试过了就可以PASS
载入程序,run,输入序列号,最好长一点(>64位最好,短的好像会有其他处理),点check,然后就异常退出了。
看到是VC的程序,下断getdlgitemtextA/W果然断下来,依次回溯堆栈
可以回到主程序流程,单步一直跟,遇到异常退出就记下哪个函数,借助IDA就可以找到很多作者写的反调试函数,手段有 查找调试进程、调试窗口、SEH、驱动检查。。。等,感觉用太多了,后果就是,我看到类似的函数就把所有检查返回值的条件跳转改成强制跳转。。。这样就可以正常运行了中间有个setunhandfliter的异常处理函数下面有个除零异常,看了下说明是遇到没有处理的异常就用此函数指定的函数处理,找到处理的地址,把前一个跳转直接改跳过这个调试检查,后面一些检查也同样处理,之后就正常运行了。

然后就是找正确的码,这个其实如果跟了反调试函数的话,很容易就会看到在一个参数为ok的MessageBoxA函数上面几行就有个memcmp函数,尝试下个断点在这


继续运行,就可以在堆栈参数中看到你输入的错误码和正确码的比较,然后把正确码复制出来就完了....

中间有对输入序列号的长度检查还有加密手段等都没去跟,听群里的大神说是BASE64,我还去解了下,无果,就这样吧 。



[培训]12月3日2020京麒网络安全大会《物联网安全攻防实战》训练营,正在火热报名中!地点:北京 · 新云南皇冠假日酒店

收藏
点赞0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回