傀儡进程学习

本文是作者对SWPUCTF中涉及傀儡进程技术的病毒分析的总结。通过分析题目GAME,探讨了傀儡进程的创建、注入过程,包括CreateProcess、GetThreadContext等函数的使用。同时,详细解析了病毒的运作机制,如文件操作、系统信息获取等,并介绍了反病毒软件的相关文件。文章最后给出了代码实现的参考链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0x00 前言

 最近做了一道18年swpuctf的题,分析了一个病毒,正巧都用到了傀儡进程,就想着把傀儡进程学习一下。本文权当个人的学习总结了一些网上的文章,如有错误,还请路过的大佬斧正。

0x01 SWPUCTF -- GAME

进入main函数

先获取当前目录,再拼上GAME.EXE

进入sub_4011D0

首先寻找资源,做准备工作,进入sub_4012C0

 

1)检测PE结构

2) CreateProcessA 创建进程

3)GetThreadContext 得到进程上下文信息,用于下文计算基地址

4)sub_4016F0

到ntdll.dll里找到NtUnmapViewOfSection函数

5)VirtualAllocEx 跨进程,在目标进程申请空间

6)写入文件

7)SetThreadContext 恢复现场

8) 运行傀儡进程

 

我们来找找注入的程序

把GAME.EXE载入到010editor里,搜索"MZ"

dump出来,就是刚刚注入到傀儡进程的程序了。

我们把它命名为 game2.exe

载到IDA里分析

发现是D3D绘制

之后的解题与本文关系不大,这里直接把官方的WP搬运来了https://www.anquanke.com/post/id/168338#h3-16

 

通过字符串[Enter]可以跟踪到获取输入以及返回上一层的地

 

这里用了’ – ’符来分割string,然后保存到vector中。并且判断vector中string的个数是否是4以及每一个string的长度是否是4 

 

接着传入前面两部分进行一次加密,可以根据常量识别出这是DES算法,这里把DES的subkeys进行了一次移位,并且修改了sbox3开头的5个字节,然后把结尾结果减去0x10,之后再进行一个简单的方程check。解方程可以得到另外两部分是个常量。

DES部分可以网上找个标准的DES把这几部分改一下就能解出FLAG:HOPE-UCAN-GOOD-GAME

 小结

本题的sub_4012C0,就是在进行傀儡进程的编写,有必要仔细的说说傀儡进程

 

 0x02 傀儡进程

文章: https://blog.youkuaiyun.com/darcy_123/article/details/102532411

 首先使用CreateProcess传入CREATE_SUSPENDED

创建一个挂起的进程,以下称为傀儡进程,然后使用GetThreadContext读取傀儡进程的上下文信息,通过DWORD

指针指向CONTEXT的EBX,DWORD + 8 字节可以读取到傀儡进程的基地址,然后计算傀儡进程的镜像大小

然后把自己的数据读入到傀儡进程内,设置CONTEXT上下文入口点信息EAX,并恢复进程主线程

 上文已经写得很详细了,个人觉得重要的点

1)在CreateProcess时,注意环境问题 lpCurrentDirectory

BOOL CreateProcessA(
  LPCSTR                lpApplicationName,
  LPSTR                 lpCommandLine,
  LPSECURITY_ATTRIBUTES lpProcessAttributes,
  LPSECURITY_ATTRIBUTES lpThreadAttributes,
  BOOL                  bInheritHandles,
  DWORD                 dwCreationFlags,
  LPVOID                lpEnvironment,
  LPCSTR                lpCurrentDirectory,
  LPSTARTUPINFOA        lpStartupInfo,
  LPPROCESS_INFORMATION lpProcessInformation
);

2) 计算基地址

context.Ebx + 8 = 基地址,因此从context.Ebx + 8的地址读取4字节的内容并转化为DWORD类型,即是进程加载的基地址。 

3) VirtualAllocEx时的权限问题

4)VirtualAllocEx重定位的问题

一般情况下,在写入傀儡进程对应的文件按照申请空间的首地址作为基地址进行“重定位”,这样才能保证傀儡进程的正常运行。为了避免这一步操作,可以以傀儡进程PE文件头部的建议加载基地址作为VirtualAllocEx的lpAddress参数,申请与之对应的内存空间,然后以此地址作为基地址将傀儡进程写入目标程序,就不会存在重定位问题。关于“重定位”的原理可以自行网络查找相关资料

 我们来看看实际上病毒用到的傀儡进程

 

0x03 病毒分析

 

 1.virusTotal

https://www.virustotal.com/gui/file/32db88982a0d0f92804c4c53ffd8555935871e23b35a9d362e037353cb6b44c5/details

MD5    ba46b18f05ab2b24df26e343dd32946b
SHA-1    34f07e131d4f147af96d262eee761582c6f0b1a4
SHA-256    32db88982a0d0f92804c4c53ffd8555935871e23b35a9d362e037353cb6b44c5
Vhash    bf09954b6ff12217cd0df0f93c7488e4
SSDEEP    24576:yij8jlUoiuFhypnWmUOJ4H0zMY/lspoBbRzRrT9MUF5jawb:yDhUoMFUcvo6FlrT2wb
File type    RAR
Magic    RAR archive data, v1d, os: Win32
File size    893.13 KB (914570 bytes)

 环境win7 x64

是一个.rar文件

在虚拟机里改后缀为.rar

解压:

 

 可以简单的发现一个伪装成文件夹的.exe

2.对18XXXXXXXXXXXX.exe分析

查壳

没有

 然后GUI,有界面的程序

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值