SHELL手动加壳
SHELL 壳的运行原理: 加壳过的EXE文件是可执行文件,它可以同正常的EXE文件一样执行。 用户执行的实际上是外壳程序,这个外壳程序负责把用户原来的程序在内存中解压缩,并把控制权交还给解开后的真正程序 ,这一切工作都是在内存中运行的,整个过程对用户是透明的。 • 编译 :将单个的 .c 或 .cpp 编译成中间文件 (.obj),在 VS 下,这个过程由 cl.exe 程序完成。 • 链接 :将编译出的 .obj 中间文件、系统的启动文件和用到的库文件链接成一个可执行文件 (.exe)。VS 下由 link.exe 程序完成 • 装载 :将一个可执行文件映射到虚拟地址空间并执行,由操作系统完成。在装载的过程中,完了让程序正常被执行,会有下列几个步骤: 1.判断是否开启重定位,如果开启了,将 PE 文件加载到指定位置,并且修复目标PE 文件的重定位。 2.遍历导入表,加载使用到的所有模块到内存,修复模块相关的信息,并根据导入表中的函数名称,填充所有的 IAT 地址项。 3.查看当前是否存在 TLS 回调函数,如果存在,则传入进程创建事件,依次调用 所有的 TLS 回调函数。 4.以 PE 文件中的 AddressOfEntryPoint 为起始位置,创建线程并运行。 MZ 头: (0x00) WORD e_magic: 标识当前是一个有效的 DOS 文件,必须为 0x5A4D。