样本如下图所示

Image text 首先将将恶意文件开票资料.exe反汇编如下: Image text 显而易见:程序开辟一块空间,将log.bin的内容填充进去,然后运行它

使用ollydbg进行动态调试,跟进这个方法 Image text 同时使用ida打开log.bin,创建方法,并根据动态调试的内容将ida中的函数补充,如下 Image text 这段代码将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文件被成功的解密. Image text 再次回到log.bin中 Image text 其中virtualProctect将v8设置为可执行,十分可疑,从ollydbg中的调试可以看出,在virtualProctect之后只剩下两个call,而这两个call又是v8地址的偏移.我们将重点锁定11c和13a这两个函数 Image text 跟进第一个函数11c之后没有什么发现

跟进第二个函数后如下 Image text 再通过ida打开解密后的pe文件,根据8f0函数中调用的loadIcon,loadCursor等API函数名称,在ida中回溯 Image text 找到8f0函数在ida中对应的函数,如下,即13a处代码运行的就是Gpkey这个函数,同理11c处的调用的函数也可以用这个方法找到,本文忽略,下面我们看一下Gpkey这个函数 Image text 初次运行,程序会跳转到A70(about_service)函数处进行持久化,通过创建服务实现持久化 Image text 解码的函数如下 Image text 检查交叉引用,发现有八处引用 Image text 收集所有待加密的字符串,共有三种不同的加密字符串

cWU8ZkF2pg==
tbS00LW1utC0s7nQtLm1pg==
vrWm

为了将所有的加密串解密出来,我们采用一种偷懒的方法进行解密,在ollydbg中解密函数encrypt_mory处下断点,同时修改带解密的代码 Image text 得到的对应结果如下 Image text 在c500处找到一些网络相关操作 Image text 对于670函数无法成功连接导致无法继续动态调试的情况,需要手动修改汇编语句je实现跳转 Image text Image text Ida查看380函数,发现其返回cpu主频信息 Image text 继续跟进4e0函数,发现摄像头相关操作 Image text 继续跟进5d0函数,发现病毒对进程进行扫描,并查找处杀毒软件,没有发现则返回”暂未发现” Image text Image text

继续跟进,发现病毒统计开机时间 Image text 跟进100函数,看到字符串拼接注册表服务项的 Image text Image text

继续调试,运行到这里,程序不断的打开某个事件句柄并等待操作,说明此时病毒初始化工作已经完毕,等待接收c2的命令 Image text Image text

通过一些字符串的搜索,在sub_100081B0发现了病毒远控相关的代码 Image text 同时根据string内容的回溯,也在sub_10008AE0找到了键盘记录相关的代码 Image text Image text 至此,病毒分析工作已全部完成,该病毒运行流程如下:

开票资料.exe
|
|
|
加载log.bin,并运行
|
	|
对log.db进行解密成pe文件并存储在内存中,并根据其偏移执行相关操作
	|
	|
通过创建服务实现持久化