吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5927|回复: 18
收起左侧

[PC样本分析] 新手学习 PracticalMalwareAnalysis lab18-2

  [复制链接]
MaximeLionel 发表于 2022-5-9 17:32
使用论坛附件上传样本压缩包时必须使用压缩密码保护,压缩密码:52pojie,否则会导致论坛被杀毒软件等误报,论坛有权随时删除相关附件和帖子!
病毒分析分区附件样本、网址谨慎下载点击,可能对计算机产生破坏,仅供安全人员在法律允许范围内研究,禁止非法用途!
禁止求非法渗透测试、非法网络攻击、获取隐私等违法内容,即使对方是非法内容,也应向警方求助!

静态数据

  • md5
    md5,9C5C27494C28ED0B14853B346B113145
    sha1,290AB6F431F46547DB2628C494CE615D6061CEB8
    sha256,7983A582939924C70E3DA2DA80FD3352EBC90DE7B8C4C427D484FF4F050F0AEC
  • 有壳
    signature,FSG 1.00 (Eng) -> dulek/xt

    脱壳

    寻找OEP

  • 发现导入表里面有GetProcAddress,下断点,运行后发现这段代码:
    004050C4    47              inc     edi
    004050C5    8B37            mov     esi, dword ptr [edi]
    004050C7    AF              scas    dword ptr es:[edi]
    004050C8    57              push    edi
    004050C9    FF13            call    dword ptr [ebx]
    004050CB    95              xchg    eax, ebp
    004050CC    33C0            xor     eax, eax
    004050CE    AE              scas    byte ptr es:[edi]
    004050CF  ^ 75 FD           jnz     short 004050CE
    004050D1    FE0F            dec     byte ptr [edi]
    004050D3  ^ 74 EF           je      short 004050C4
    004050D5    FE0F            dec     byte ptr [edi]
    004050D7    75 06           jnz     short 004050DF
    004050D9    47              inc     edi
    004050DA    FF37            push    dword ptr [edi]
    004050DC    AF              scas    dword ptr es:[edi]
    004050DD    EB 09           jmp     short 004050E8
    004050DF    FE0F            dec     byte ptr [edi]
    004050E1 >- 0F84 A9BFFFFF   je      00401090
    004050E7    57              push    edi
    004050E8    55              push    ebp
    004050E9    FF53 04         call    dword ptr [ebx+4]                ; GetProcAddress
    004050EC    0906            or      dword ptr [esi], eax             ; ole32.OleInitialize
    004050EE    AD              lods    dword ptr [esi]
    004050EF  ^ 75 DB           jnz     short 004050CC
  • 发现这是一个循环,猜测是建立导入表,接着观察几个jmp jz jnz je跳转指令,发现下面的je最像tail jump
    004050E1 >- 0F84 A9BFFFFF   je      00401090
  • 执行到疑似OEP(00401090),发现OD还没分析,选择analyze->analyze code,发现如下代码,应该就是OEP了:
    00401090  /.  55            push    ebp                              ;  msvcrt.77650000
    00401091  |.  8BEC          mov     ebp, esp
    00401093  |.  6A FF         push    -1
    00401095  |.  68 78204000   push    00402078
    0040109A  |.  68 D0114000   push    004011D0                         ;  jmp to msvcrt._except_handler3; SE handler installation
    0040109F  |.  64:A1 0000000>mov     eax, dword ptr fs:[0]
    004010A5  |.  50            push    eax
    004010A6  |.  64:8925 00000>mov     dword ptr fs:[0], esp
    004010AD  |.  83EC 20       sub     esp, 20
  • dump进程。

    重建输入表

  • 试了一下工具imprec,不行,只能手工重建了。
  • 用OD打开原程序,在GetProcAddress上下断点,再用IDA打开脱壳后的程序,找到函数地址表。
  • 运行OD,在IDA的每个函数地址上对应写入OD里面的函数名,完成后差不多这样:
    seg000:004011DC 00 00 00 00 00 00 00 00+                align 1000h
    seg000:00402000                         ; int _getmainargs
    seg000:00402000 50 5C 68 77             __getmainargs   dd 77685C50h            ; DATA XREF: start+B5↑r
    seg000:00402004                         ; unsigned int controlfp
    seg000:00402004 C0 9F 6E 77             _controlfp      dd 776E9FC0h            ; DATA XREF: j__controlfp↑r
    seg000:00402008 E4 81 6A 77             _except_handler3 dd 776A81E4h           ; DATA XREF: j__except_handler3↑r
    seg000:0040200C 00 76 6A 77             __set_app_type  dd 776A7600h            ; DATA XREF: start+2C↑r
    seg000:00402010 B0 5D 68 77             __p__fmode      dd 77685DB0h            ; DATA XREF: start+41↑r
    seg000:00402014 60 5D 68 77             __p__commode    dd 77685D60h            ; DATA XREF: start+4F↑r
    seg000:00402018                         ; void __cdecl __noreturn exit(int)
    seg000:00402018 10 61 6B 77             _exit           dd 776B6110h            ; DATA XREF: start+10A↑r
    seg000:0040201C 40 4C 6A 77             _XcptFilter     dd 776A4C40h            ; DATA XREF: j__XcptFilter↑r
    seg000:00402020 F0 66 6B 77             exit            dd 776B66F0h            ; DATA XREF: start+EA↑r
    seg000:00402024 D0 5C 68 77             __p__initenv    dd 77685CD0h            ; DATA XREF: start+CA↑r
    seg000:00402028 C0 64 6B 77             _initterm       dd 776B64C0h            ; DATA XREF: j__initterm↑r
    seg000:0040202C 40 85 6E 77             __setusermatherr dd 776E8540h           ; DATA XREF: start+7C↑r
    seg000:00402030 E4 6B 70 77             _adjust_fdiv    dd 77706BE4h            ; DATA XREF: start+5D↑r
    seg000:00402034 00 00 00 00                             align 8
    seg000:00402038 70 41 D4 76             dword_402038    dd 76D44170h            ; DATA XREF: _main+36↑r
    seg000:0040203C                         ; BSTR __stdcall SysAllocString(const OLECHAR *)
    seg000:0040203C 10 E2 D4 76             SysAllocString  dd 76D4E210h            ; DATA XREF: _main+50↑r
    seg000:00402040                         ; void __stdcall SysFreeString(BSTR)
    seg000:00402040 80 E8 D4 76             SysFreeString   dd 76D4E880h            ; DATA XREF: _main+78↑r
    seg000:00402044 00 00 00 00                             align 8
    seg000:00402048                         ; HRESULT __stdcall OleInitialize(LPVOID pvReserved)
    seg000:00402048 40 2E FA 74             OleInitialize   dd 74FA2E40h            ; DATA XREF: _main+5↑r
    seg000:0040204C                         ; HRESULT __stdcall CoCreateInstance(const CLSID *const rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, const IID *const riid, LPVOID *ppv)
    seg000:0040204C 70 30 A1 74             CoCreateInstance dd 74A13070h           ; DATA XREF: _main+22↑r
    seg000:00402050                         ; void __stdcall OleUninitialize()
    seg000:00402050 60 33 FA 74             OleUninitialize dd 74FA3360h            ; DATA XREF: _main:loc_40107F↑r
    seg000:00402054 00 00 00 00                             align 8
  • 这个过程很慢且麻烦,但我没想到其他更好的办法。。。

    IDA 分析

  • 脱壳后很简单了,从main进去,发现用的COM:
    lea     eax, [esp+24h+ppv]
    push    eax
    push    offset riid_IWebBrowser2
    push    4               ; CLSCTX_LOCAL_SERVER = 0x4
    push    0
    push    offset clsid_ie ; 2DF01h
    call    CoCreateInstance
  • 逐条分析发现其会使用Navigate函数通过IE打开指定链接:
    lea     ecx, [esp+24h+var_20]
    push    esi
    push    ecx
    call    dword_402038
    push    offset aHttpWwwMalware ; "http://www.malwareanalysisbook.com/ad.h"...
    mov     [esp+2Ch+var_10], 3
    mov     [esp+2Ch+var_8], 1
    call    SysAllocString
    lea     ecx, [esp+28h+var_20]
    mov     esi, eax        ; esi = newString
    mov     eax, [esp+28h+ppv]
    push    ecx
    lea     ecx, [esp+2Ch+var_20]
    mov     edx, [eax]
    push    ecx
    lea     ecx, [esp+30h+var_20]
    push    ecx
    lea     ecx, [esp+34h+var_10]
    push    ecx
    push    esi
    push    eax
    call    dword ptr [edx+2Ch] ; Navigate
    push    esi
    call    SysFreeString
    pop     esi

    总 结

    这个lab的整个过程中,重建输入表比较麻烦,不知道有没有更好的方法。
    该程序行为很简单,就是打开了指定的网页。

免费评分

参与人数 3吾爱币 +8 热心值 +3 收起 理由
Hmily + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
XXFFKK + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
hucger + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

这一次好好来 发表于 2022-5-9 23:59
谢谢分享
Noren 发表于 2022-5-10 03:25
aiyikegu 发表于 2022-5-10 08:34
zhandi518 发表于 2022-5-10 08:42
感谢分享
chenlg2008 发表于 2022-5-10 11:14
感谢大佬分享,佩服
Kow丶安慕希 发表于 2022-5-10 11:25

感谢分享
taxuewuhen 发表于 2022-5-10 13:20
感谢分分享~
zhouxue1028 发表于 2022-5-10 13:20
学习了。多来点素材
qazdr 发表于 2022-5-11 06:33
感谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 11:06

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表