感觉这个程序原来分析过一次,很相似
目的是得到一个长度为4的pw
IDA中逻辑非常清晰,在CreateThread中对数据byte_408030进行修改
然后v5作为判断标志
在这儿下断看数据就好~
(然后用OD下断看不到,结合本章知识点猜想是有反调试器的手段)
在函数TlsCallBack里发现了这个:
在字符串里找到了这个:如果改下字符串的话,是不是可能就绕过了调试器z
在winhex里修改下保存
FindWindow:该函数获得一个顶层窗体的句柄,该窗体的类名和窗体名与给定的字符串相匹配
在OD中调试发现了最重要的问题:
main中是根本没有进去的~直接进去的是TlsCallback
所以,需要百度一下TlsCallback反调试的原理以及绕过方式
http://www.weixianmanbu.com/article/92.html
根据这篇文章的绕过TLS的两种思路,分别进行实验:
方法1:OD将TLS强制jmp到main中
方法2:在IDA中查看TLS区段大小,将其全部nop掉
这两个方法确实可以去除TLS
但是,F4执行到401233还是有问题
所以,猜测在CreateThread之中仍有其他检测
可见,bl是与当前程序运行环境有关的值,将其patch成mov bl,0即可,运行到已终止
所以,4位密码就是byrr
总结一下,这个程序有三个反调试:
(1)TLS
(2)FindWindow中对OLLYDBG的判断
(3)手动实现了fs:[30h]的IsDebugPresent的判断
https://blog.csdn.net/whatday/article/details/8604646
https://jmprsp.wordpress.com/2016/03/21/practical-malware-analysis-anti-debugginglab-16-02/