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
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,有界面的程序