欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]C++写壳之高级篇

[原创]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。

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

0 0 0 举报
复制成功