Krane11/jit-page-decryptor
GitHub: Krane11/jit-page-decryptor
一个基于 x64 Windows 异常分发机制的按需页面解密代码保护 PoC,通过在运行时动态加解密 PE 节实现防篡改、防转储和防调试。
Stars: 0 | Forks: 0
# jit-page-decryptor
**x64 header‑only 防篡改、防转储和防调试库,它会在内存和磁盘上保持 PE 节和页面处于加密状态,直到该页面被执行,并在执行完成后自动重新加密该页面**
**显然这不是可以直接复制粘贴使用的,至少要替换掉 xor**
**它的功能**
构建完成后,包含受保护代码的指定节会被加密
页面为禁止访问状态,仅执行异常会解密该页面;除非发生异常的代码已经位于已解密的页面中,否则将拒绝读取请求
如果页面未在使用中或执行离开了该页面,它们会被自动重新加密
完整性检查的示例,它会比较当前的 CRC、磁盘上的状态以及它在安装时缓存的 CRC
**工作原理**
安装时,它会在 `KiUserExceptionDispatcher` 中找到 `Wow64PrepareForException` 指针(如果该指针有效,则总是会被调用,但这在 x64 上通常无效),将其替换为我们的处理程序,并将目标节中的每个页面设置为禁止访问
当受保护的代码被执行时,我们的处理程序会捕获该异常并检查是否为执行异常。如果是,则恢复保护属性并解密页面,然后继续执行
定时器和工作线程会自动重新加密未在使用中的页面,如果执行离开了页面,处理程序也会对其进行重新加密
**用法**
```
#include "jit-page-decryptor.h"
__declspec(code_seg(".prot")) void protected_func() //xor or encrypt the .prot section post build
{
printf("yo\n");
}
int main() {
if (!enc::install(".prot"))
{
return 1;
}
protected_func();
}
```
显然,有很多方法可以改进它,在实际使用前也有很多地方需要修改,这更多是一个概念验证 (poc)
标签:DNS 反向解析, DOM解析, x64汇编, 代码保护, 内存加密, 分布式计算, 反篡改, 反调试, 反转储, 异常处理