感觉这个程序原来分析过一次,很相似

目的是得到一个长度为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://hunted.codes/writeups/challenges/practical-malware-analysis/practical-malware-analysis-lab-16-2/

https://jmprsp.wordpress.com/2016/03/21/practical-malware-analysis-anti-debugginglab-16-02/