壳的iat表加密代码
时间: 2023-07-10 07:17:05 浏览: 55
IAT表加密是一种常见的壳技术,可以有效防止程序被静态调试或动态调试。下面是一个简单的IAT表加密示例:
```c
// 定义一个函数指针类型
typedef int (*PFunc)(int, int);
int main()
{
// 获取指向MessageBox函数的指针
PFunc pMessageBox = (PFunc)GetProcAddress(GetModuleHandle(L"user32.dll"), "MessageBoxW");
// 执行IAT表加密
DWORD oldProtect;
VirtualProtect(&pMessageBox, sizeof(PFunc), PAGE_READWRITE, &oldProtect);
DWORD_PTR dwMessageBox = (DWORD_PTR)pMessageBox;
DWORD_PTR dwImageBase = (DWORD_PTR)GetModuleHandle(NULL);
DWORD_PTR dwOffset = dwMessageBox - dwImageBase;
DWORD_PTR dwNewOffset = dwOffset ^ 0x12345678; // 加密密钥
DWORD_PTR dwNewMessageBox = dwImageBase + dwNewOffset;
memcpy(&pMessageBox, &dwNewMessageBox, sizeof(PFunc));
VirtualProtect(&pMessageBox, sizeof(PFunc), oldProtect, &oldProtect);
// 调用加密后的MessageBox函数
pMessageBox(NULL, L"Hello, world!", L"Title", MB_OK);
return 0;
}
```
以上代码中,我们首先使用 GetProcAddress 函数获取指向 MessageBox 函数的指针,然后执行 IAT 表加密。具体来说,我们首先将指针所指向的内存区域修改为可读写的,然后计算 MessageBox 函数在内存中的偏移量,再对该偏移量进行异或运算(使用密钥 0x12345678),得到加密后的偏移量。最后,我们将加密后的偏移量加上模块的基地址,得到加密后的 MessageBox 函数地址,并将其写回原先的指针中。最后,我们调用加密后的 MessageBox 函数,程序就可以正常运行了。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)