样本如下图所示
首先将将恶意文件开票资料.exe反汇编如下: 显而易见:程序开辟一块空间,将log.bin的内容填充进去,然后运行它
使用ollydbg进行动态调试,跟进这个方法 同时使用ida打开log.bin,创建方法,并根据动态调试的内容将ida中的函数补充,如下 这段代码将log.db进行了一些操作,然后运行它的偏移地址,而动态调试的过程中143函数返回了abcdefg…字串,并在179函数中将其作为参数传入,同时传入的还有log.db的内容,通过179函数的返回值,我们发现该函数将log.db内容解密,生成了pe文件
为了方便分析,我们将log.bin文件使用base64解码,python代码如下
import base64
encode_bin=''
with open('log.db','r') as f:
# print(f.readlines()[0])
aaa= f.readlines()[0]
encode_bin = base64.b64decode(aaa)
print(encode_bin)
with open('result.txt','wb') as f:
f.write(encode_bin)
解码后的文件如下所示,由此可以看出PE文件被成功的解密. 再次回到log.bin中 其中virtualProctect将v8设置为可执行,十分可疑,从ollydbg中的调试可以看出,在virtualProctect之后只剩下两个call,而这两个call又是v8地址的偏移.我们将重点锁定11c和13a这两个函数 跟进第一个函数11c之后没有什么发现
跟进第二个函数后如下 再通过ida打开解密后的pe文件,根据8f0函数中调用的loadIcon,loadCursor等API函数名称,在ida中回溯 找到8f0函数在ida中对应的函数,如下,即13a处代码运行的就是Gpkey这个函数,同理11c处的调用的函数也可以用这个方法找到,本文忽略,下面我们看一下Gpkey这个函数 初次运行,程序会跳转到A70(about_service)函数处进行持久化,通过创建服务实现持久化 解码的函数如下 检查交叉引用,发现有八处引用 收集所有待加密的字符串,共有三种不同的加密字符串
cWU8ZkF2pg==
tbS00LW1utC0s7nQtLm1pg==
vrWm
为了将所有的加密串解密出来,我们采用一种偷懒的方法进行解密,在ollydbg中解密函数encrypt_mory处下断点,同时修改带解密的代码 得到的对应结果如下 在c500处找到一些网络相关操作 对于670函数无法成功连接导致无法继续动态调试的情况,需要手动修改汇编语句je实现跳转 Ida查看380函数,发现其返回cpu主频信息 继续跟进4e0函数,发现摄像头相关操作 继续跟进5d0函数,发现病毒对进程进行扫描,并查找处杀毒软件,没有发现则返回”暂未发现”
继续跟进,发现病毒统计开机时间 跟进100函数,看到字符串拼接注册表服务项的
继续调试,运行到这里,程序不断的打开某个事件句柄并等待操作,说明此时病毒初始化工作已经完毕,等待接收c2的命令
通过一些字符串的搜索,在sub_100081B0发现了病毒远控相关的代码 同时根据string内容的回溯,也在sub_10008AE0找到了键盘记录相关的代码 至此,病毒分析工作已全部完成,该病毒运行流程如下:
开票资料.exe
|
|
|
加载log.bin,并运行
|
|
对log.db进行解密成pe文件并存储在内存中,并根据其偏移执行相关操作
|
|
通过创建服务实现持久化