现代操作系统具有内存保护,例如数据执行保护、数据无执行位、文本/代码部分的只读位等。我不明白当这些内存保护到位时加壳器是如何工作的。当代码页被标记为只读并且数据页被标记为不执行时,打包程序在哪里解压压缩/加密的二进制文件?
尽管有数据执行保护等机制,打包程序如何工作?
逆向工程
包装工
2021-06-15 21:06:35
1个回答
解包器将从 OS 请求一个标记为 write 的内存页面,并将代码解包到那里。解包完成后,它将在 windows上使用VirtualProtect或在 posix 兼容系统上使用mprotect将保护位更改为只读并执行(或首先将页面分配为读写+执行并跳过使其读取+执行-只要)。
换句话说,应用程序获得了对保护位的足够控制以进行运行时代码生成。
其它你可能感兴趣的问题