[原创]C++写壳之高级篇
C++写壳之高级篇
之前在写了写壳基础篇,现在就来完成写壳高级篇。没有基础篇的知识,那理解高级篇就比较困难。有了写壳基础后,才能在其基础上逐步实现高级功能,加壳的目的主要是防止别人破解,而想要别人很难破解,我认为要在花指令、混淆和指令虚拟化上大量的时间及脑力才能做到,这个比较费脑力费时间。我在此就说说一些能快速入门的反调试技术,下面说的难度将逐渐提升。
主要工具: VS2017、x64dbg、OD
实验平台:win10 64位
实现功能:反调试、IAT加密、Hash加密、动态解密。
一、反调试
顾名思义,就是阻止别人调试程序,在PEB结构中有一个BegingDebugged标志位专门用于检测是否处于调试状态,为1则处于调试状态,用VS2017测试下列程序:
#include "pch.h"
#include <iostream>
#include <windows.h>
//反调试1
bool PEB_BegingDebugged()
{
bool BegingDebugged = false;
__asm
{
mov eax, fs:[0x30]; //获取PEB
mov al, byte ptr ds : [eax + 0x2];//获取Peb.BegingDebugged
mov BegingDebugged, al;
}
return BegingDebugged; //如果为1则说明正在被调试
}
int main()
{
if (PEB_BegingDebugged())
{
MessageBoxA(0, "正在被调试", 0, 0);
return 0;
}
std::cout << "Hello World!\n";
getchar();
}
敲完代码后按Ctrl+F5直接运行可以输出Hello World!,按F5以调试方式运行程序则会弹出反调试窗口,说明这种方法检测是否正在被调试成功!

注意:上传附件及图片大小不得大于30M。
⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。
复制成功
