首页
社区
课程
招聘
3
[原创]恶意代码分析实战Lab03-03(PE映像切换技术)
发表于: 2021-9-29 20:12 13785

[原创]恶意代码分析实战Lab03-03(PE映像切换技术)

2021-9-29 20:12
13785

恶意代码分析实战Lab03-03(PE映像切换技术)

这个样本比较有意思,利用了pe映像切换技术,《逆向工程核心原理》有类似例子,最近也是上课看书,偶然看到这部分,写个文章巩固下知识点。

pe映像

我们首先来康康什么是pe映像。

 

我们都知道创建一个进程时,操作系统会为该进程分配一个 4GB 大小的虚拟 进程地址空间。pe映像就是pe文件在进程内存中的映射形态。

并且pe文件和pe映像在形态上也不会是完全相同的,会有一些差别,如下。

pe映像切换

那么什么是pe映像切换呢,简单来说,假设现在有A,B,setup三个exe文件,我们会使用setup.exe来创建A进程,按道理本该执行A进程,但是却使用pe映像切换技术来达到运行B进程的目的。

 

下面来大概总结其步骤,是setup.exe的代码步骤。

  • 将B.exe这个文件存放到开辟的某个内存空间,利用createfile,VirtualAlloc函数,或者其他类似作用的函数。
  1. 以挂起模式创建A进程。
  2. 利用GetThreadContext函数获得A进程的主线程的上下文结构,得到CONTEXT.Eax,ReadProcessMemory函数读取PEB.image,也就是A进程的image base和EP。
  3. 调用NtUnmapViewOfSection函数卸载A进程的pe映像,防止将B.exe文件映射到该地址时发生冲突(实际上,若image base不相同,可以不卸载)。
  4. 利用VirtualAllocEx函数在A进程中以B进程的image base地址申请其size of image大小的空间。
  5. 映射pe文件头
  6. for循环映射pe节区
  7. 调用WriteProcessMemory将A进程的PEB.imagebase修改为B进程的image base。
  8. 将EP(CONTEXT.Eax)修改为B.exe的EP。
  9. 调用ResumeThread,恢复运行A进程,但是实际上运行的是B进程。

在看完本lab和《逆向工程核心原理》中的例子后,产生了两个问题

  • 上面的步骤中,修改image base这一操作的先后顺序是否有影响呢?我认为是没有影响的,因为无论哪种方式,都可以达到在A进程中为B进程的PE映像分配了内存空间,并且将A进程的PEB.imagebase修改为B进程的image base的目的。
  • 为什么对于映射pe文件头,映射pe节区需要分开来?其实也很简单,答案就在上面的图片中,pe文件和pe映像在形态上不会是完全相同的。

    到这里,pe映像切换的原理差不多就讲完了,感兴趣可以去看看书中的详细讲解,下面来分析恶意样本,与书中例子有小差别,但大体原理一致。

Lab03-03样本分析

先看看行为吧,可以看到创建了一个进程,并且退出了。


[注意]看雪招聘,专注安全领域的专业人才平台!

上传的附件:
收藏
免费 3
支持
分享
赞赏记录
参与人
雪币
留言
时间
一路南寻
感谢你的贡献,论坛因你而更加精彩!
2024-11-8 02:24
東陽不列山
为你点赞!
2024-11-7 06:32
PLEBFE
为你点赞~
2022-7-28 00:13
最新回复 (2)
雪    币: 4939
活跃值: (4842)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
这个技术就是傀儡进程吧
2021-11-18 10:22
0
雪    币: 3517
活跃值: (3648)
能力值: ( LV10,RANK:160 )
在线值:
发帖
回帖
粉丝
3
木志本柯 这个技术就是傀儡进程吧
是的,只是书中的名称是pe映像切换
2021-11-19 12:49
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册