社区应用 最新帖子 精华区 社区服务 会员列表 统计排行
  • 4372阅读
  • 2回复

[分享]PracticalMalwareAnalysis lab18-01

楼层直达
z3960 
级别: 茶馆馆主
发帖
770593
飞翔币
207694
威望
215657
飞扬币
2511651
信誉值
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 0xc711 A www.practicalmalwareanalysis.com

IDA 分析

  • 进入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,下载相应的文件,并执行。
关键词: bot 下载 格式
我不喜欢说话却每天说最多的话,我不喜欢笑却总笑个不停,身边的每个人都说我的生活好快乐,于是我也就认为自己真的快乐。可是为什么我会在一大群朋友中突然地就沉默,为什么在人群中看到个相似的背影就难过,看见秋天树木疯狂地掉叶子我就忘记了说话,看见天色渐晚路上暖黄色的灯火就忘记了自己原来的方向。
级别: 超级版主
发帖
836137
飞翔币
228732
威望
224673
飞扬币
2459957
信誉值
0

只看该作者 1 发表于: 2022-05-08
来看一下
级别: 超级版主
发帖
836137
飞翔币
228732
威望
224673
飞扬币
2459957
信誉值
0

只看该作者 2 发表于: 2022-05-08
不错,了解了