首页
社区
课程
招聘
[原创]Win PE系列之一个简单的加密壳的实现
发表于: 2021-10-15 11:43 27030

[原创]Win PE系列之一个简单的加密壳的实现

2021-10-15 11:43
27030

一共需要以下三个文件PE文件来实现本次实验。

demo.exe代表是被加壳的源程序。

Shell.exe代表的是壳子程序。

Packed.exe代表的是加壳程序。

Packed.exe的作用是把demo.exe的内容保存到Shell.exe中,而Shell.exe则是把保存的demo.exe取出运行起来。

也就是Packed.exe的运行流程,过程如下:

将demo.exe读取出来进行异或加密

将加密后的内容为一个新增节追加到Shell.exe中

对应的源码如下


也就是Shell.exe的运行流程,过程如下:

从最后一个节中将节中的内容,也就是加密后的源程序取出来,并进行解密

根据文件对齐与节区对齐的大小获取PE文件装载到内存中的状态

修复IAT表

得到Shell.exe的文件路径,并以挂起的形式创建Shell.exe的新进程

通过ZwUnmapViewOfSection函数将得到的新进程中的内容卸载,以得到干净的进程空间

从新进程中申请足够容纳要运行的源程序的SizeOfImage大小的内存空间,并将修复IAT表之后的源文件内容写入空间中

获得新创建进程中的主线程状态

设置线程的入口点是在新进程申请的内存的初始地址和源程序入口偏移

设置新进程的ImageBase为在新进程申请的内存的初始地址

恢复线程

对应的源代码如下


    运行Pack.exe以后会生成target.exe。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2021-12-27 17:13 被1900编辑 ,原因:
收藏
免费 10
支持
分享
打赏 + 5.00雪花
打赏次数 1 雪花 + 5.00
 
赞赏  sloanyyc   +5.00 2023/02/06 问一下,X64里, GetThreadContext 的 Rax 和 Rbx 都为0,为啥, Rcx,Rdx不为0,正好和 x86里相反
最新回复 (2)
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
谢谢,已经搞定. x64 加壳成功!  Eax, Ebx 和 Rcx, Rdx 有对应关系, 另外 +8 改成 +16
2023-2-6 23:56
0
雪    币: 412
活跃值: (890)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
这不是和滴水的加密壳思路一样吗?怎么就原创了
2023-11-4 00:43
0
游客
登录 | 注册 方可回帖
返回
//