-
-
[原创]看雪第三题之误打误撞通过过程
-
发表于: 2017-10-28 22:22 2178
-
沉浸在第二题没考虑sub对跳转影响的失误中,下了个第三题来看看
虽然找到了答案,但是这道题很多东西都没搞清楚,能解出这道题主要是题目有个BUG,在最关键的比较居然采用了明文比较
这道题难点其实就是反调试,反调试过了就可以PASS,
载入程序,run,输入序列号,最好长一点(>64位最好,短的好像会有其他处理),点check,然后就异常退出了。
看到是VC的程序,下断getdlgitemtextA/W果然断下来,依次回溯堆栈
可以回到主程序流程,单步一直跟,遇到异常退出就记下哪个函数,借助IDA就可以找到很多作者写的反调试函数,手段有
查找调试进程、调试窗口、SEH、驱动检查。。。等,感觉用太多了,后果就是,我看到类似的函数就把所有检查返回值的条件跳转改成强制跳转。。。这样就可以正常运行了中间有个setunhandfliter的异常处理函数下面有个除零异常,看了下说明是遇到没有处理的异常就用此函数指定的函数处理,找到处理的地址,把前一个跳转直接改跳过这个调试检查,后面一些检查也同样处理,之后就正常运行了。
然后就是找正确的码,这个其实如果跟了反调试函数的话,很容易就会看到在一个参数为ok的MessageBoxA函数上面几行就有个memcmp函数,尝试下个断点在这
继续运行,就可以在堆栈参数中看到你输入的错误码和正确码的比较,然后把正确码复制出来就完了....
中间有对输入序列号的长度检查还有加密手段等都没去跟,听群里的大神说是BASE64,我还去解了下,无果,就这样吧 。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
赞赏
看原图
赞赏
雪币:
留言: