傀儡进程加密壳 滴水三期课后作业
考虑到国内git clone非常缓慢,我将代码传了一份在百度网盘上,如果通过github无法成功下载代码可以使用百度网盘下载,压缩包一共32kb大小。
链接:https://pan.baidu.com/s/1MWxS-vE1jL7VJ6o_SKPHew 提取码:1111
-
本项目是滴水三期视频的一个课后作业,是使用 傀儡进程 方法写的一个 玩具 壳
-
壳主体的工作步骤如下
- 读取主模块的数据
- 解密:得到原来的PE文件
- 以挂起的形式创建进程:
CreateProcess
,要创建的进程,就是壳子本身 - 获取外壳程序的Context,后面要用.
- 卸载外壳程序.
- 在指定的位置分配空间:位置就是src的ImageBase 大小就是Src的SizeOfImage
- 如果成功,将Src的PE文件拉伸 复制到该空间中
- 如果申请空间失败,但有重定位表:在任意位置申请空间,然后将PE文件拉伸、复制、修复重定位表。
- 如果第6步申请空间失败,并且还没有重定位表,直接返回:失败。
- 修改外壳程序的Context:
- 将Context的ImageBase 改成 Src的ImageBase
- 将Context的OEP 改成 Src的OEP
- 设置Context 并恢复主线程
- 终止外壳程序,解壳过程结束.
-
加壳机的工作步骤如下
- 获取Shell程序的路径
- 获取src程序的路径
- 将src程序读取到内存中,加密
- 在Shell程序中新增一个节,并将加密后的src程序追加到Shell程序的新增节中
- 加壳过程完毕
XP系统 + VC6
注意:不能用Visual Studio来编译。在VS中有些函数的参数会从
LPSTR
变为宽字符的LPWSTR
,而且在VS中TCHAR
是WCHAR
而在VC6中TCHAR
是CHAR
。所以在VS中一定编译不过。
注:只支持给32位程序加壳,不能给64位程序加壳!
- 将加壳机和壳本体编译出来(或者在 release 中下载已经编译好的EXE),其中 packer.exe 是加壳机, ycpack_shell.exe 是壳本体。双击加壳机输入壳本体和需要加壳的源程序的位置,并输入需要保存的位置即可生成加壳后的程序。
- 加壳后可正常运行。
- 在加壳的时候通过加密算法(如异或)给源程序加密
- 当
VirtualAllocEx
分配空间失败时判断是否有重定位表并重新申请空间 - 隐藏console,在打开加壳后的程序时不会弹出黑框框
- 本项目中使用了部分@adezz用户的Shell-Of-Water项目中的代码