Delphi- 木马分析
0x0 前言
样本本身为Delphi编写,本人并不精通Delphi编写的思路,所以如果存在纰漏或者错误,还请指出,共同进步。样本本身因为存在混淆,乱序,并且我没有找到可以去混淆乱序的工具,只能手动调试。看起来比较麻烦。适合新手。
0x01 样本信息
样本MD5: 067C37A6C5CFF406520914AABACA3136
样本大小: 537K
语言: Delphi
来源:
https://www.virustotal.com/gui/file/9ae664348eb29f92142f177b1abb142ca93bb35246165e8fc62f965d337be71b/detection
查壳,Delphi编写
0x02 环境与工具
Win 32、OD、IDA、python
0x03 分析
原始样本分析
寻找突破口
整体看结构,比较清晰。
进入第一个函数中 InitExe()中。找到关键点
动态调试,查看赋值起始地址为 0x00453FD0
看到这些函数指针,猜测这里应该是初始化的时候依次调用,联想C语言中的init函数,这里很可能存在恶意代码
通过排查,发现倒数第二函数,为关键函数
至此我们就发现了关键点,接下来就动态了,这里说一句,可能读者会想为什么是这里呢?其实我也是慢慢调试出来的,虽然不可能完全正确,但是恶意行为发生在这里,我们不可能所有语言都了解,当遇到一种不熟悉甚至可能是陌生的语言环境,能够最快的上手这才能够达标。如果这一切如果能有理论支撑,才算比较好的操作。
第一次解密运行
接下来动态调试
进入函数发现很多无用代码和内存申请在赋值在释放的过程,并且存在sleep过程,该过程耗时较长,猜测可能是防止沙箱等检测。
经过等待之后,再次申请0X5E4D的空间并异或解密赋值,通过push\ret操作,指向解密代码
乱序+各种简单反调试
当看到这些乱序代码时,可以暂时开启run跟踪功能,耐心一点就可以。
首先根据PEB找到Kernel模块,然后通过导出表找到对应API
样本先找到VirtualAlloc地址,通过调用申请空间,接下来将得到的API地址和模块地址全部存放在该空间
创建快照,遍历进程,记录其PID和name
接下来就是一些简单的反调试
1) 通过CPUID获取处理器然后比较
2) 比较文件名反调试
3) 反杀软
4) 反调试器反MS工具
5) 通过API反调试
6) PEB结构反调试
获取资源
资源解码,该处应该为配置文件
再次检测avp.exe、bdagent.exe、bdwtxag.exe、dwengine.exe进程,在后边代码中,还存在多次简单的反调试,不过利用论坛调试器可以直接略过
第二次解密运行
根据配置文件多次解密资源文件,并拷贝,每次拷贝0x314的大小,拷贝0x87次,解密前
重新排列解码后为一PE文件
再次以挂起的形式创建进程
利用CreateSection注入代码
木马文件分析
得到上边的PE文件,IDA查看,发现一个很简单的代码填充,编写一个简单脚本过掉
动态加载所需dll
查看权限,提权
获取用户名并且遍历注册表SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall下的所有子键,查看是否存在UninstallString的项,以此获取计算机安装的软件信息
OEL操作,可以看到PWDFILE0YUIPKDFILE0YUICRYPTED0YUI1.0这样的字样
循环调用,获取各种FTP各种信息
发送所得信息到 http://vman23.com/ab4/gate.php
之后与http://vman23.com/ab4/ab4.exe通信,获取ab4.exe
写入文件,并执行,由于该链接已失效,所以不能知道该exe文件作用
扩大战果
尝试爆破该计算机其他用户,同样获取信息,并发送
清理痕迹
最后创建bat文件,并执行,删除该文件和bat文件。
总结
当调试完毕之后,发现还是很简单的。练下基本功,回顾一下IDA脚本和自己的耐心值还是有帮助的。
附件中为样本和IDA python脚本
sample.zip
(283.19 KB, 下载次数: 129)