恶意代码分析实战

恶意代码分析实战

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

图片

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

图片

入口点:00405000

图片

对于FSG的壳,有两个点:

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

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

图片

F9运行,运行到系统代码

图片

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

图片

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

图片

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

图片

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

图片

图片

图片

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

图片

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

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

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

图片

图片

图片

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

图片

附录:入口点特征

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

网络安全工程师(白帽子)企业级学习路线

第一阶段:安全基础(入门)

img

第二阶段:Web渗透(初级网安工程师)

img

第三阶段:进阶部分(中级网络安全工程师)

img

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

学习资源分享

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值