某安全软件面试_病毒分析

h0XZZC5C.dll

dllmain函数分析

1.找到dllmain函数真正地址:

1.由于dll文件无法直接运行可以使用rundll32.exe来附加运行.

2.使用xdbg工具加载dll发现断在入口处(0x18000179c),此入口不是真正的dllmain函数的入口,而是进行一系列初始化操作之后才能跳转到真正我们正常写代码的入口.

3.写过dll文件的就清楚dllmain需要3个参数对应的就是(rcx,rdx,r8)一路F8下来发现有3处其中有两个跳转地址是一样的,那两个一样的就是dllmain函数真正的地址而第一个是dllmain的派遣函数(通过判断dllmain第二个参数).

img

2.分析dllmain函数中做了哪些操作

1.经过分析dllmain做了6件事.

(1)用一个全局变量存储dll基址

(2)判断dll是否重复执行了如果执行了就推出程序

(3)和(4)是一样的工作:

{

1.第一步通过通过api获取资源表里"LXGUM"里面存放了两个数据.

资源ID(0x904)是shellcode,资源ID(0xF9E)是PE文件(E.dll)不过加了密下方是解密公式
char Str[]="ad5zS&E7DS(ke9?+qbAC5tqx<Y<h0!QB4H3bk" 解密字符串

for ( i = 0; (unsigned __int64)i < *(_QWORD *)Size; ++i )
*((_BYTE *)BaseAddress + i) = Str[i % 38] ^ *((_BYTE *)Resource + i);

2.解密完成数据通过参数2传递出去.

配图

}

(5)清空了全局变量数据

(6)通过APC插入NtQueueApcThread函数中第二个参数填写位shellcode地址来执行shellcode,并利用NtTestAlert()函数立马执行APC.

分析shellcode

1.解密后在ida工具里面样子由于有点长我就截个图

2.shellcode第一步初始字符串,他把字符串初始化在栈中.

3.通过PEB哈希遍历到指定的函数( 0xBDBF9C13)->LdrLoadDll函数和(0x5ED941B5)->LdrGetProcedure,

LdrLoadDll函数是用来加载dll的

LdrGetProcedure函数是用来获取到处函数的

利用获取到的第一个函数加载所需模块kernel32.dll.

之后利用第二个函数通过kernel32.dll的导出表获取其他函数如下("Sleep","LoadLibraryA","VirtualAlloc","VirtualProtect","FlushInstructionCache","GetNativeSystemInfo","RtlAddFunctionTable")

4.大概流程GetNativeSystemInfo()获取系统信息其中获取了页的大小(0x1000).

然后用VirtualAlloc指定位置申请可读可写内存,被占用了就让系统随机分配位置,让后把(E.dll)内存数据拷贝到分配的地址上不过他是从PE标识符开始拷贝的没从MZ.

5.再利用VirtualProtect函数把PE区段里的属性重新更改为对应内存页属性.

6.在利用FlushInstructionCache函数把当前进程TLB刷新一下.

7.再利用RtlAddFunctionTable函数修复一下异常表

8.执行一下修复完成的PE文件(E.dll)入口(OEP).至此shellcode部分全部完成了.

(2)PE文件(E.dll)

1.此函数导出了一个关键函数DllRegisterServer,此函数是由 h0XZZC5C.dll中导出的DllRegisterServer函数调用的. 这个函数被混淆了.

2.大概分析了一下第一步初始导入表

加载dll有9个dll,ntdll.dll,kernel32.dll,KernelBase.dll,msvcrt.dll,combase.dll,ucrtbase.dll,rpcrt4.dll,SHCore.dll,imagehlp.dll导入了dll中所需的函数太多不一一举例.

3.利用沙箱得知此程序利用regsvr32.exe访问了6个host建立了10tcp链接.

h0XZZC5C.dll

DllRegisterServer函数有3个call,第一个call是寻找其中内存中拉伸的E.dll DllRegisterServer函数所在位置,第二个call就是调用E.dll中DllRegisterServer函数,最后一个call是创建了一个窗口,然后不停的派发消息.

结论

此木马伪装成正常的绘制模块,向(91.121.146.47:8080)IP:端口进行通讯.