-
UID:17777
-
- 注册时间2007-05-02
- 最后登录2025-05-02
- 在线时间18636小时
-
- 发帖786303
- 搜Ta的帖子
- 精华0
- 飞翔币211574
- 威望215717
- 飞扬币2615136
- 信誉值8
-
访问TA的空间加好友用道具
- 发帖
- 786303
- 飞翔币
- 211574
- 威望
- 215717
- 飞扬币
- 2615136
- 信誉值
- 8
|
静态数据- MD5 复制代码 隐藏代码sha1,5C1F90ABD22AA3ED55638228862B7A24D4A38CDBsha256,2AC6635A26049D354C0C46243F6451E6594B130745A08C5A99E96A64FBBBEC0F
- 有壳UPX - signature,UPX -> www.upx.sourceforge.net.
- 导入表 - 发现有GetProcAddress函数,可以作为脱壳线索 复制代码 隐藏代码GetUserNameA,0x00,0xA0F8,reckoning,implicit,-,-,advapi32.dllURLDownloadToCacheFileA,0x00,0xA106,network,implicit,-,x,urlmon.dllVirtualProtect,0x00,0xA0BE,memory,implicit,-,x,kernel32.dllVirtualAlloc,0x00,0xA0CE,memory,implicit,-,-,kernel32.dllVirtualFree,0x00,0xA0DC,memory,implicit,-,-,kernel32.dllExitProcess,0x00,0xA0EA,execution,implicit,-,-,kernel32.dllLoadLibraryA,0x00,0xA0A0,dynamic-library,implicit,-,-,kernel32.dllGetProcAddress,0x00,0xA0AE,dynamic-library,implicit,-,-,kernel32.dll
脱壳寻找OEP- 使用OllyDbg打开,搜索GetProcAddress函数并下断点,运行程序,如下: 复制代码 隐藏代码76855F20 > 8BFF mov edi, edi ; Lab18-01.0040800F76855F22 55 push ebp76855F23 8BEC mov ebp, esp76855F25 FF75 04 push dword ptr [ebp+4]76855F28 FF75 0C push dword ptr [ebp+C]76855F2B FF75 08 push dword ptr [ebp+8]76855F2E FF15 200C8C76 call dword ptr [<&KERNELBASE.GetProcAddressForCaller>] ; KERNELBA.GetProcAddressForCaller76855F34 5D pop ebp76855F35 C2 0800 retn 8
- 发现该函数只是对GetProcAddress的封装,跳出该函数如下,发现该段loop函数应该是建立导入表: 复制代码 隐藏代码00409EE1 > > /8A07 mov al, byte ptr [edi] ; build import table00409EE3 . |47 inc edi00409EE4 . |08C0 or al, al00409EE6 .^|74 DC je short 00409EC400409EE8 . |89F9 mov ecx, edi00409EEA . |57 push edi00409EEB . |48 dec eax00409EEC . |F2:AE repne scas byte ptr es:[edi]00409EEE . |55 push ebp00409EEF . |FF96 54900000 call dword ptr [esi+9054] ; call GetProcAddress00409EF5 . |09C0 or eax, eax ; KERNEL32.Sleep00409EF7 . |74 07 je short 00409F0000409EF9 . |8903 mov dword ptr [ebx], eax00409EFB . |83C3 04 add ebx, 400409EFE .^\EB E1 jmp short <build import table>
- 往下拉,发现有个疑似tail jump,后面全是0x00,跳转后第一条指令也是 push ebp,初步判断0x0040154F即为OEP: 复制代码 隐藏代码00409F3C . 39C4 cmp esp, eax00409F3E .^ 75 FA jnz short 00409F3A00409F40 . 83EC 80 sub esp, -8000409F43 .- E9 0776FFFF jmp 0040154F ; 目标 jump00409F48 00 db 0000409F49 00 db 0000409F4A 00 db 0000409F4B 00 db 0000409F4C 00 db 00
建立输入表
- dump上面找到OEP的process,记录OEP;
- 使用imprec工具修复import table,并转存。
脱壳后静态数据:- 导入表 - 存在网络下载,文件写入,内存操作等功能函数。 复制代码 隐藏代码URLDownloadToCacheFileA,0xE3,0xB4EA,network,implicit,-,x,urlmon.dllHeapCreate,0x34D,0xB3A8,memory,implicit,-,-,kernel32.dllVirtualAlloc,0x5CC,0xB438,memory,implicit,-,-,kernel32.dllGetFileType,0x254,0xB37A,file,implicit,-,-,kernel32.dllWriteFile,0x618,0xB3DC,file,implicit,-,-,kernel32.dllCreateProcessA,0xE6,0xB21C,execution,implicit,-,-,kernel32.dll
- 字符串检查 - 存在一个URL。 复制代码 隐藏代码ascii,49,0x00006062,-,format-string,-,http://www.practicalmalwareanalysis.com/%s/%c.png
动态数据:执行程序后,发现有DNS query发往 www.practicalmalwareanalysis.com。 复制代码 隐藏代码 17 11. 641527456 192.168.190.129 192.168.190.1 DNS 92 Standard query 0xc 711 A www.practicalmalwareanalysis.comIDA 分析- 进入main,首先是使用GetCurrentHWProfileA获取hardware的GUID.
- 然后将GUID的最后12个数字以mac地址的格式写入字符串: 复制代码 隐藏代码movsx edx, [ebp+HwProfileInfo.szHwProfileGuid+24h]push edxmovsx eax, [ebp+HwProfileInfo.szHwProfileGuid+23h]push eaxmovsx ecx, [ebp+HwProfileInfo.szHwProfileGuid+22h]push ecxmovsx edx, [ebp+HwProfileInfo.szHwProfileGuid+21h]push edxmovsx eax, [ebp+HwProfileInfo.szHwProfileGuid+20h]push eaxmovsx ecx, [ebp+HwProfileInfo.szHwProfileGuid+1Fh]push ecxmovsx edx, [ebp+HwProfileInfo.szHwProfileGuid+1Eh]push edxmovsx eax, [ebp+HwProfileInfo.szHwProfileGuid+1Dh]push eaxmovsx ecx, [ebp+HwProfileInfo.szHwProfileGuid+1Ch]push ecxmovsx edx, [ebp+HwProfileInfo.szHwProfileGuid+1Bh]push edxmovsx eax, [ebp+HwProfileInfo.szHwProfileGuid+1Ah]push eaxmovsx ecx, [ebp+HwProfileInfo.szHwProfileGuid+19h]push ecxpush offset aCCCCCCCCCCCC ; "%c%c:%c%c:%c%c:%c%c:%c%c:%c%c"lea edx, [ebp+guid_last12bytes]push edx ; char *call _sprintf
- 再GetUserName获得当前用户的用户名,并与之前的GUID字符串结合成'guid_last12bytes-username'的格式。
- 接着,程序会将该字符串用Base64的方式进行加密,注意该程序将a作为了默认padding字符。
- 并将密文以
的格式使用URLDownloadToCacheFileA函数进行下载文件。 - 最后使用CreateProcess进行执行。
总结该程序使用了UPX壳,使用在GetProcAddress下bp的方式找到OEP,再重建输入表进行脱壳。脱壳后分析程序,首先获取了主机的硬件信息和用户名信息,使用Base64方式进行加密,并将加密字符串发往 www.practicalmalwareanalysis.com,下载相应的文件,并执行。
|