恶意代码分析实战 Lab16-02

知识点:
TLS回调
TLS回调被用来在程序入口点执行之前运行代码。若可执行程序的PE头部包含一个.tls段,则可能此程序使用了反调试技术。
分析报告
1. 样本概况
样本名称Lab16-02.exe,编译器为Microsoft Visual C++ v6.0。
1.1样本信息
样本名称:Lab16-02.exe
MD5值: E88B0D6398970E74DE1DE457B971003F
SHA1值:861185D8D7100DB4ACC6F1F18E67CB360E7D109C
1.2测试环境及工具
测试环境:WinXP
测试工具:IDA 、OD
2. 具体行为分析
2.1主要行为分析
(1) 双击运行程序没有反应,在命令行下运行程序,提示输入长度为4的密码。
 
(2) 使用Ollydbg打开程序,直接终止运行,可能是使用了反调试技术。
(3) 使用PhantOM插件之后,程序必须添加参数运行,不然还是会直接终止。
2.2恶意代码分析
(1) 程序首先查找窗口名为OLLDBG的窗口,若找到,则调用exit函数,终止进程。
 
(2) 接下来利用OutputDebugStringA来检查程序是否被调试。
 
(3) 解决掉反调试的问题后,查看主函数功能。
根据IDA pro中主函数的结构,查看有进行了字符串比较。argv即为程序运行时附加的参数,将其余encode_password进行比较。
 
(4) 利用OD查看encode_password的值。
因为是比较4个字节,所以猜测前四个字节bzrr作为密码。
 
将bzrr作为参数重新运行程序,提示输入了正确的密码。
 
(5) 在命令行上使用bzrr,提示密码错误。
 
(6) 字符串比较函数之前使用了createthread函数来创建一个解密的线程。
检查反调试,已经使用了PhantOm,所以不用管这个。
 
使用了全局变量byte_40A968,此变量被sub_401020引用,此函数使用OutputDebugStringA来检查程序是否被调试。
若检测到调试,则给byte_40A968加1
 
尝试在OD中修改byte_40A968的值,然后解密出byrrp@ss
 
(7) 在命令行中使用密码byrr运行程序,显示密码正确。
 
3. 总结
此程序使用TLS回调函数来进行反调试。当程序启动时,回调函数用类名OLLYDBG调用FindWindowA函数,查看OD是否运行,若运行则退出。当程序创建一个线程时,使用OutputDebugStringA来检查程序是否被调试,若是,则把解密所使用的字符串加1,让分析着得到一个错误的密码。要想获得正确的密码,就得把所有的反调试的地方搞定。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章