恶意代码分析实战 Lab-1-3

admin 2023年10月19日16:39:26评论16 views字数 2461阅读8分12秒阅读模式

恶意代码分析实验 Lab - 1-3    

         

实验素材来自 https://github.com/Hadreysl/-

         

程序利用FSG1.0进行加壳操作

         恶意代码分析实战 Lab-1-3

fsg为压缩壳,原理就在于在程序原OEP之前或在程序之后加上一段数据,使得程序调用是通过压缩段数据进行转发的,不影响程序的正常运行。首先将压缩后的程序进行载入:

恶意代码分析实战 Lab-1-3

入口点:00405000

恶意代码分析实战 Lab-1-3

对于FSG的壳,有两个点:

1、OEP最终是由一个大跳call je 等汇编函数,跳过去的          
2、FSG有多个循环跳转确认是否前往OEP

         

使用Alt+M,在Text段下断点.Text段是存储程序的执行代码的地方。当我们在.Text段下断点时,方便观察关键函数的调用,拦截解密/解压操作,以及防止自解压行为,从而更好地分析和理解程序的行为。(这里3个text我都断过,都可以

         

恶意代码分析实战 Lab-1-3

F9运行,运行到系统代码

恶意代码分析实战 Lab-1-3

运行停下来之后Alt+F9返回到用户代码:

恶意代码分析实战 Lab-1-3

此时按一直F7,发现存在大量小跳,存在数据复制操作(数据释放,fsg是压缩壳,在运行过程中壳解压将导出表还原)

         

恶意代码分析实战 Lab-1-3

在跳转之后发现CALL 用于 调用/跳转至 一个子程序或函数

恶意代码分析实战 Lab-1-3

         

         

接着F4执行到指定位置 运行到大跳转处,然后回车执行当前选定的指令ctrl+a自动整理代码即可找到入口点,根据入口点来看这个应该是一个vc++程序

恶意代码分析实战 Lab-1-3

恶意代码分析实战 Lab-1-3

         

恶意代码分析实战 Lab-1-3

Dump下来修复导入表即可(内存要运行到这个地址)

恶意代码分析实战 Lab-1-3

后续发现用工具修复IAT之后失败是因为,这个壳在执行的过程中,把部分IAT表里边的结构中的无用数据进行了修改,无法识别手动修复的方法是,直接到IAT的地址,去将数据异常的IAT表项手动修改为0,再次修复转储就行了

此时我已经不想再脱了,直接上工具完事Orz...

以后这种壳尽量还是自动,实在不行就摇人。

恶意代码分析实战 Lab-1-3

恶意代码分析实战 Lab-1-3

恶意代码分析实战 Lab-1-3

Ida的程序流程图直接看到了链接,已经汗流浃背了,可恶

恶意代码分析实战 Lab-1-3

附录:入口点特征  

Microsoft Visual C++ 6.0

         

00496EB8 >/$   55          PUSH EBP                               ;   (初始 cpu 选择)

00496EB9   |.   8BEC       MOV EBP,ESP

00496EBB   |.   6A FF       PUSH -1

00496EBD   |.   68 40375600 PUSH Screensh.00563740

00496EC2   |.   68 8CC74900 PUSH Screensh.0049C78C                ;   SE 处理程序安装

00496EC7   |.   64:A1 0000000>MOV EAX,DWORD PTR FS:[0]

00496ECD   |.   50          PUSH EAX

00496ECE   |.   64:8925 00000>MOV DWORD PTR FS:[0],ESP

00496ED5   |.   83EC 58    SUB ESP,58

---------------------------------------------------------------------------------------

Microsoft Visual Basic 5.0 / 6.0

         

00401166   - FF25 6C104000 JMP DWORD PTR DS:[<&MSVBVM60.#100>]    ; MSVBVM60.ThunRTMain

0040116C >   68 147C4000     PUSH PACKME.00407C14

00401171 E8 F0FFFFFF     CALL

00401176 0000          ADD BYTE PTR DS:[EAX],AL

00401178 0000          ADD BYTE PTR DS:[EAX],AL

0040117A 0000          ADD BYTE PTR DS:[EAX],AL

0040117C 3000          XOR BYTE PTR DS:[EAX],AL

         

或省略第一行的JMP

         

00401FBC >   68 D0D44000        push dumped_.0040D4D0

00401FC1 E8 EEFFFFFF        call

00401FC6 0000             add byte ptr ds:[eax],al

00401FC8 0000             add byte ptr ds:[eax],al

00401FCA 0000             add byte ptr ds:[eax],al

00401FCC 3000             xor byte ptr ds:[eax],al

00401FCE 0000             add byte ptr ds:[eax],al

----------------------------------------------------------------------

BC++

         

0040163C > $ /EB 10       JMP SHORT BCLOCK.0040164E

0040163E     |66          DB 66                                  ;   CHAR 'f'

0040163F     |62          DB 62                                  ;   CHAR 'b'

00401640     |3A          DB 3A                                  ;   CHAR ':'

00401641     |43          DB 43                                  ;   CHAR 'C'

00401642     |2B          DB 2B                                  ;   CHAR '+'

00401643     |2B          DB 2B                                  ;   CHAR '+'

00401644     |48         

原文始发于微信公众号(硅步security):恶意代码分析实战 Lab-1-3

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年10月19日16:39:26
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   恶意代码分析实战 Lab-1-3https://cn-sec.com/archives/2126364.html

发表评论

匿名网友 填写信息