本帖最后由 Hyabcd 于 2016-5-15 21:12 编辑
一、样本信息
文件名称:装备.com
MD5:946a38e6327193c3cce9763189057ee4
SHA-1:030cab5a2cd14e796c7e93e79094eccdc0b4515c
大小:270KB
文件名称:Release.dll
MD5:84280f53d4c40f5f02709b39bef5f56f
SHA-1:fca3b7b16afc8cdc23cc58caaa6c99174abd16b9
大小:227KB
二、样本简介及实现原理
该样本最早出现在2015年末,样本沿袭hook007家族的一贯作风,对自身的隐藏下了十足的功夫。相比较前几个版本的隐藏方式,该版本的木马结合了前几个版本隐藏方式中比较出彩的几个部分,包括利用伪装的图片引诱用户点击,实际上该图片是个快捷方式,用于触发木马程序;将主要功能存放在dll中,dll使用动态加载的方式,直接写入内存执行,而非调用LoadLibrary函数进行加载,而且dll文件进行了代码混淆,分块加载进内存,因此无法直接对dll文件进行逆向分析。木马主体功能丰富,不仅有一般的windows功能执行,还调用com组件进行快捷方式的操作。总而言之,该hook007变种是hook007家族极具代表性的一个木马变种。下图表示木马的隐藏方式,其中灰色图标标识被设置为隐藏属性和系统文件属性的文件图标,用于隐藏关键部分。
三、样本具体分析
(1)主程序“装备.com”通过CreateFileA函数,设置参数Mode为OPEN_EXIST,打开已存在的文件“release.dll”,从而执行木马主要功能。如下图所示。
(2)主程序使用动态加载的方式将dll中的部分代码加载进内存执行,这样做可以防止杀软发现完整的含有恶意功能的dll文件,通过分块加载执行的方式躲避杀软检测,代码如下。
[Asm] 纯文本查看 复制代码 0040C343 F3:A5 rep movs dword ptr es:[edi],dword ptr ds>
0040C345 FF2495 58C44000 jmp dword ptr ds:[edx*4+0x40C458] ; 装备.0040C468
(3)进入dll中发现,dll加了upx壳,跑完壳程序后程序进行一些地址分配工作,又返回主程序中,然后从主程序中再度进入dll中,这样分次执行的目的也是为了躲避杀软检测。进入dll中,程序先对附带的附件类型进行辨认,本样本中所附带的是jpg类型的图片文件。辨认附件类型代码如下所示。
[Asm] 纯文本查看 复制代码 1001391A 833D BCA20A10 0>cmp dword ptr ds:[0x100AA2BC],0x2
10013921 75 15 jnz short 10013938
10013923 68 34940910 push 0x10099434 ; ASCII ".jpg";进行附件类型辨别,在此处为jpg格式
10013928 8D85 ECFAFFFF lea eax,dword ptr ss:[ebp-0x514]
1001392E 50 push eax
1001392F FF15 6C740810 call dword ptr ds:[0x1008746C] ; user32.wsprintfA
(4)获取系统特殊路径,在系统路径中创建文件夹,用于将本体拷贝到相应路径中。
[Asm] 纯文本查看 复制代码 100139F3 51 push ecx
100139F4 6A 00 push 0x0
100139F6 FF15 28740810 call dword ptr ds:[0x10087428] ; shell32.SHGetSpecialFolderPathA;获取路径C:\Documents andSettings\Administrator\Application Data
100139FC 68 84A10A10 push 0x100AA184 ; ASCII "72f7b50a76aa89826d9a2d5d3e9bbb56"
10013A01 8D95 F8FDFFFF lea edx,dword ptr ss:[ebp-0x208]
10013A07 52 push edx
10013A08 68 64940910 push 0x10099464 ; ASCII "%s\%s"
10013A0D 8D85 F4FCFFFF lea eax,dword ptr ss:[ebp-0x30C]
10013A13 50 push eax
10013A14 FF15 6C740810 call dword ptr ds:[0x1008746C] ; user32.wsprintfA
10013A1A 83C4 10 add esp,0x10
10013A1D 6A 00 push 0x0
10013A1F 8D8D F4FCFFFF lea ecx,dword ptr ss:[ebp-0x30C]
10013A25 51 push ecx
10013A26 FF15 A8710810 call dword ptr ds:[0x100871A8] ; kernel32.CreateDirectoryA;在改路径下创建目录 C:\Documents and Settings\Administrator\Application Data\72f7b50a76aa89826d9a2d5d3e9bbb56
(5)检测杀软相关进程是否存在,如果不存在则跳过快捷方式操作的模块,不过程序没有执行对杀软进程的结束操作,这也是hook007家族木马的一个特点。代码如下所示。
[Asm] 纯文本查看 复制代码 1001242B 55 push ebp
1001242C 8BEC mov ebp,esp
1001242E 68 74910910 push 0x10099174 ; ASCII "360Tray.exe"
10012433 E8 54FFFFFF call 1001238C
10012438 83C4 04 add esp,0x4
1001243B 83F8 01 cmp eax,0x1
1001243E 75 07 jnz short 10012447
10012440 B8 01000000 mov eax,0x1
10012445 EB 66 jmp short 100124AD
10012447 68 80910910 push 0x10099180 ; ASCII "360tray.exe"
1001244C E8 3BFFFFFF call 1001238C
10012451 83C4 04 add esp,0x4
10012454 83F8 01 cmp eax,0x1
10012457 75 07 jnz short 10012460
10012459 B8 01000000 mov eax,0x1
1001245E EB 4D jmp short 100124AD
10012460 68 8C910910 push 0x1009918C ; ASCII "ZhuDongFangYu.exe"
10012465 E8 22FFFFFF call 1001238C
(6)开启多个线程,线程函数地址相同,但是参数不同,作用用于检测桌面上是否存在相关的快捷方式。
[Asm] 纯文本查看 复制代码 10013BD2 FF15 0C710810 call dword ptr ds:[0x1008710C] ; kernel32.CreateThread
10013BD8 6A 00 push 0x0
10013BDA 6A 00 push 0x0
10013BDC 8D85 D0F4FFFF lea eax,dword ptr ss:[ebp-0xB30]
10013BE2 50 push eax;启动线程参数各不相同
10013BE3 68 972A0110 push 0x10012A97
10013BE8 6A 00 push 0x0
10013BEA 6A 00 push 0x0
10013BEC FF15 0C710810 call dword ptr ds:[0x1008710C] ; kernel32.CreateThread; 线程函数地址均为10012A97
10013BF2 6A 00 push 0x0
10013BF4 6A 00 push 0x0
10013BF6 8D8D B8EEFFFF lea ecx,dword ptr ss:[ebp-0x1148]
10013BFC 51 push ecx ;
10013BFD 68 972A0110 push 0x10012A97
10013C02 6A 00 push 0x0
10013C04 6A 00 push 0x0
10013C06 FF15 0C710810 call dword ptr ds:[0x1008710C] ; kernel32.CreateThread
在线程中检测桌面路径下是否有相应快捷方式存在,如果存在,则将快捷方式属性设为系统文件和隐藏文件。代码如下。
[Asm] 纯文本查看 复制代码 10012A97 55 push ebp
10012A98 8BEC mov ebp,esp
10012A9A 8B45 08 mov eax,dword ptr ss:[ebp+0x8]
10012A9D 50 push eax
10012A9E FF15 30740810 call dword ptr ds:[0x10087430] ; shlwapi.PathFileExistsA;判断相应快捷方式是否存在
10012AA4 85C0 test eax,eax
10012AA6 74 22 je short 10012ACA
10012AA8 B9 01000000 mov ecx,0x1
10012AAD 85C9 test ecx,ecx
10012AAF 74 19 je short 10012ACA
10012AB1 6A 06 push 0x6
10012AB3 8B55 08 mov edx,dword ptr ss:[ebp+0x8]
10012AB6 52 push edx ; ntdll.KiFastSystemCallRet
10012AB7 FF15 0C720810 call dword ptr ds:[0x1008720C] ; kernel32.SetFileAttributesA;若存在则把属性设为HIDDEN|SYSTEM
紧接着程序创建一个com实例用于进行快捷方式操作。
[Asm] 纯文本查看 复制代码 100126D0 6A 00 push 0x0
100126D2 FF15 E8750810 call dword ptr ds:[0x100875E8] ; ole32.CoInitialize;初始化com组件
100126D8 F7D8 neg eax
100126DA 1BC0 sbb eax,eax
100126DC 40 inc eax
100126DD 8845 F8 mov byte ptr ss:[ebp-0x8],al
100126E0 8B4D F8 mov ecx,dword ptr ss:[ebp-0x8]
100126E3 81E1 FF000000 and ecx,0xFF
100126E9 85C9 test ecx,ecx ; ole32.76AB67F0
100126EB 0F84 BE000000 je 100127AF
100126F1 8D55 FC lea edx,dword ptr ss:[ebp-0x4]
100126F4 52 push edx ; ole32.76AB67F0
100126F5 68 683E0910 push 0x10093E68
100126FA 6A 01 push 0x1
100126FC 6A 00 push 0x0
100126FE 68 783E0910 push 0x10093E78
10012703 FF15 E4750810 call dword ptr ds:[0x100875E4] ; ole32.CoCreateInstance;创建com实例
程序先将原腾讯qq快捷方式设为隐藏特性,然后通过com组件创建一个伪造的qq快捷方式。快捷方式操作流程如下图所示。
此举将桌面上qq的快捷方式隐藏,伪造一个快捷方式指向木马衍生体,当用户误以为该快捷方式为qq快捷方式并双击时,就会运行木马衍生体,通过对衍生体的分析发现,衍生体的功能和主体基本一致,当用户点击qq快捷方式时也会遭到远控。修改后快捷方式效果如下所示。
同理,程序如果发现YY语音等软件也会执行相同操作。
(7)查找工作空间窗口"Progman","SHELLDLL_DefView","SysListView32",该窗口为“我的电脑”主操作界面对应窗口,并对该窗口发送键盘点击消息,点击的为“f5",也就是刷新,此举是为了通过刷新清除相关文件移动痕迹。代码如下所示。
[Asm] 纯文本查看 复制代码 10013F77 C705 988C0910 0>mov dword ptr ds:[0x10098C98],0x1
10013F81 FF15 AC740810 call dword ptr ds:[0x100874AC] ; user32.GetDesktopWindow
10013F87 8985 E4F9FFFF mov dword ptr ss:[ebp-0x61C],eax
10013F8D 6A 00 push 0x0
10013F8F 68 F8950910 push 0x100995F8 ; ASCII "Progman"
10013F94 6A 00 push 0x0
10013F96 8B8D E4F9FFFF mov ecx,dword ptr ss:[ebp-0x61C]
10013F9C 51 push ecx
10013F9D FF15 9C740810 call dword ptr ds:[0x1008749C] ; user32.FindWindowExA
10013FA3 8985 E4F9FFFF mov dword ptr ss:[ebp-0x61C],eax
10013FA9 6A 00 push 0x0
10013FAB 68 00960910 push 0x10099600 ; ASCII "SHELLDLL_DefView"
10013FB0 6A 00 push 0x0
10013FB2 8B95 E4F9FFFF mov edx,dword ptr ss:[ebp-0x61C]
10013FB8 52 push edx ; ntdll.KiFastSystemCallRet
10013FB9 FF15 9C740810 call dword ptr ds:[0x1008749C] ; user32.FindWindowExA
(8)打开图片,以满足点击伪造jpg文件打开图片的合理性。
(9)通过字符串解密操作解密出上线地址。代码如下所示。
[Asm] 纯文本查看 复制代码 10010F7E 55 push ebp
10010F7F 8BEC mov ebp,esp
10010F81 83EC 0C sub esp,0xC
10010F84 C745 FC 0000000>mov dword ptr ss:[ebp-0x4],0x0
10010F8B 8D45 FC lea eax,dword ptr ss:[ebp-0x4]
10010F8E 50 push eax
10010F8F 8B4D 08 mov ecx,dword ptr ss:[ebp+0x8]
10010F92 51 push ecx
10010F93 E8 C8FDFFFF call 10010D60
10010F98 83C4 08 add esp,0x8
10010F9B 8945 F4 mov dword ptr ss:[ebp-0xC],eax
10010F9E C745 F8 0000000>mov dword ptr ss:[ebp-0x8],0x0
10010FA5 EB 09 jmp short 10010FB0
10010FA7 8B55 F8 mov edx,dword ptr ss:[ebp-0x8]
10010FAA 83C2 01 add edx,0x1
10010FAD 8955 F8 mov dword ptr ss:[ebp-0x8],edx ; mfc42.73E0E578
10010FB0 8B45 F8 mov eax,dword ptr ss:[ebp-0x8]
10010FB3 3B45 F4 cmp eax,dword ptr ss:[ebp-0xC]
10010FB6 7D 28 jge short 10010FE0
10010FB8 8B4D FC mov ecx,dword ptr ss:[ebp-0x4]
10010FBB 034D F8 add ecx,dword ptr ss:[ebp-0x8]
10010FBE 8A11 mov dl,byte ptr ds:[ecx]
10010FC0 80EA 7B sub dl,0x7B
10010FC3 8B45 FC mov eax,dword ptr ss:[ebp-0x4]
10010FC6 0345 F8 add eax,dword ptr ss:[ebp-0x8]
10010FC9 8810 mov byte ptr ds:[eax],dl
10010FCB 8B4D FC mov ecx,dword ptr ss:[ebp-0x4]
10010FCE 034D F8 add ecx,dword ptr ss:[ebp-0x8]
10010FD1 8A11 mov dl,byte ptr ds:[ecx]
10010FD3 80F2 C8 xor dl,0xC8
10010FD6 8B45 FC mov eax,dword ptr ss:[ebp-0x4]
10010FD9 0345 F8 add eax,dword ptr ss:[ebp-0x8]
10010FDC 8810 mov byte ptr ds:[eax],dl
10010FDE ^ EB C7 jmp short 10010FA7
10010FE0 8B45 FC mov eax,dword ptr ss:[ebp-0x4]
10010FE3 8BE5 mov esp,ebp
10010FE5 5D pop ebp ; 001197DC
10010FE6 C3 retn
上线地址如下所示。
(10)创建互斥体判断是否只存在一个进程。
[Asm] 纯文本查看 复制代码 100130EC 68 3CA20A10 push 0x100AA23C ; ASCII "KysrYXR4eHZ3dnZ6eHlhJiIgbXd4dkM="
100130F1 6A 00 push 0x0
100130F3 6A 00 push 0x0
100130F5 FF15 5C720810 call dword ptr ds:[0x1008725C] ; kernel32.CreateMutexA
100130FB A3 38A20A10 mov dword ptr ds:[0x100AA238],eax
10013100 833D 38A20A10 0>cmp dword ptr ds:[0x100AA238],0x0
10013107 74 15 je short 1001311E
10013109 FF15 A4710810 call dword ptr ds:[0x100871A4] ; ntdll.RtlGetLastWin32Error
获取错误值并判断是否为B7,B7十进制为183,对应如下。
(11)设置窗口站,将进程窗口站设为当前窗口站,保证正常的屏幕监控,并通过SetErrorMode设置为不显示错误信息对话框。
[Asm] 纯文本查看 复制代码 1001311E FF15 90740810 call dword ptr ds:[0x10087490] ; user32.GetProcessWindowStation
10013124 8945 B0 mov dword ptr ss:[ebp-0x50],eax
10013127 68 00000002 push 0x2000000
1001312C 6A 00 push 0x0
1001312E 68 F4930910 push 0x100993F4 ; ASCII "winsta0"
10013133 FF15 94740810 call dword ptr ds:[0x10087494] ; user32.OpenWindowStationA
10013139 8945 B4 mov dword ptr ss:[ebp-0x4C],eax
1001313C 837D B4 00 cmp dword ptr ss:[ebp-0x4C],0x0
10013140 74 0A je short 1001314C
10013142 8B4D B4 mov ecx,dword ptr ss:[ebp-0x4C]
10013145 51 push ecx
10013146 FF15 98740810 call dword ptr ds:[0x10087498] ; user32.SetProcessWindowStation
1001314C 6A 01 push 0x1
1001314E FF15 58720810 call dword ptr ds:[0x10087258] ; kernel32.SetErrorMode
10013154 C785 18FFFFFF 0>mov dword ptr ss:[ebp-0xE8],0x0
1001315E C785 1CFFFFFF 5>mov dword ptr ss:[ebp-0xE4],0x50
10013168 6A 01 push 0x1
1001316A FF15 58720810 call dword ptr ds:[0x10087258] ; kernel32.SetErrorMode
(11)木马通过socket上线
[Asm] 纯文本查看 复制代码 10003C0A 51 push ecx
10003C0B 68 02020000 push 0x202
10003C10 FF15 6C750810 call dword ptr ds:[0x1008756C] ; ws2_32.WSAStartup
三、木马后期溯源
根据木马上线地址进行whois反查,可以得到注册人邮箱和注册时间,可以看出,注册时间是在15年底,可以看出该木马还相当新颖。
通过百度该qq号,可以发现作者曾经在13年通过多个qq号在百度贴吧进行诈骗。
通过深入调查分析可以发现作者在13年使用过多个qq号进行诈骗,分别有75xxxx315,74xxxx061,120xxxx323,453xxxx57
通过对这些qq号对应的微信号进行查询,发现74xxxx061对应的微信号可能来自于聚星直播平台某女主播。以一个粉丝的身份添加74xxxx061并加入粉丝群,想找主播套点话不过失败了,而且还打草惊蛇。于是换了个方式,发现该qq号邮箱绑定的支付宝和作者13年诈骗用的某手机号绑定的支付宝一致。
而和该手机号出现在同一帖子中的qq号为453xxxx57,因此怀疑该女主播为知情人。(虽然在和她聊天时她一直一副不知情的样子)。
通过访问该女主播qq空间,发现453xxxx57这个qq号在最近曾经访问过该空间,由于女主播空间仅好友可以访问,可以肯定两者必有联系。
经过深入调查,发现453xxxx57,75xxxx315两号的qq签名几乎一样。如下所示。
而在13年的诈骗活动中,453xxxx57是主要的交易号,而通过对群关系的调查可以发现,75xxxx315可能为木马持有者的大号。通过调查该号对应的微信,可以发现头像疑似作者照片。而对女主播微博进行调查可以发现女主播已经结婚生子,而她的丈夫长相和该微信头像中的人极为相似,而在某张图片中,发现他们带着相同的手表,因此可以断定他们为同一人。(上图为女主播微博中图片,下图为75xxxx315对应微信号)。
通过对女主播微博中照片进行调查可以发现该作者姓名缩写wyz(kwl为女主播姓名缩写)。
调查120xxxx323对应微信号,可发现他的微信账号为wyc加一串数字,而该微信头像和木马持有者微信头像上的人长相相似,不过较为年轻。通过姓名缩写和长相推断两人为兄弟关系。
对75xxxx315进行群关系调查发现该人加入过一个名称为家人的群。
对该群进行调查可以得出作者所在地。
虽然木马持有者不姓林,不过可以断定他为该家族中的一员,是广东省湛江市廉江市人,而调查发现该女主播也是廉江市人。由此得到关系网如下。
(PS:感谢@Nian 的帮忙才找到那个女主播的信息从而找到整个关系的核心,没有她的帮助就没办法完成溯源)
四、总结
hook007木马已活跃多年,直至现在无法根除,唯有提高警惕性才能防止木马入侵。当陌生人或者游戏好友发送类似装备图等文件给你时,建议先用杀毒软件进行查杀,或者将文件夹选项中的相关选项进行勾选或舍弃,勾选方法如图所示(按照我的做法就是了),然后再判断是否有隐藏的木马等文件。
|