使用环境监测实现反调试与反反调试

博客 动态
0 229
优雅殿下
优雅殿下 2022-04-08 11:57:42
悬赏:0 积分 收藏

使用环境监测实现反调试与反反调试

使用环境监测的反调试方法在这里提供两种简单地方式:
  1.FindWindows 寻找调试器窗口或者窗口类。
  2.枚举进程信息,寻找调试器进程名称。

反反调试方法:
  1.窗口名/窗口类随机化

更可靠的使用环境监测反调试方法(之后会更新):
  代码段抽取一个哈希值,或者提取一个特征码进行检测,缺陷:耗能太大

// 使用环境检测反调试:// 1.寻找调试器窗口// 2.寻找调试器进程// 3.代码段抽取一个哈希值,或者提取一个特征码进行检测    // 缺陷:耗能太大// 反反调试方法(针对前两种):窗口名/进程名随机化#include <stdio.h>#include <Windows.h>#include <tchar.h>#include <TlHelp32.h>BOOL FindProcess(TCHAR *pName);// 寻找调试器窗口/窗口类// 有可能会调试器会将窗口名随机化,较低可能会将窗口类也随机化DWORD WINAPI ThreadCallBack(LPVOID lp){    // 工具 - spy++ - ctrl+f - 拖动瞄准按钮放到调试器窗口上 - 点击ok查看窗口信息    // 获取到调试器窗口类为Qt5QWindowIcon    HWND hWindow = NULL;    while (TRUE)    {        // 查找调试器窗口        hWindow = FindWindow(NULL, _T("x32dbg"));        if (hWindow != NULL)        {            MessageBox(0, _T("Debug"), _T("rkvir"), MB_OK);            break;        }        // 查找调试器窗口类        else        {            hWindow = FindWindow(_T("Qt5QWindowIcon"), NULL);            if (hWindow != NULL)            {                MessageBox(0, _T("Debug"), _T("rkvir"), MB_OK);                break;            }        }    }    return 0;}// 寻找调试器进程DWORD WINAPI ThreadCallBack2(LPVOID lp){    while (TRUE)    {        TCHAR NeedFindPName[20]    = _T("x32dbg.exe");        if (FindProcess(NeedFindPName))        {            MessageBox(0, _T("Debug"), _T("rkvir"), MB_OK);            break;        }    }    return 0;}BOOL FindProcess(TCHAR *pName){        HANDLE SnapshotHandle;                //定义一个快照        PROCESSENTRY32 ProcessEntry32;        //照片结构体        SnapshotHandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);    //照第一张相        if (SnapshotHandle != INVALID_HANDLE_VALUE)        {            ProcessEntry32.dwSize = sizeof(PROCESSENTRY32);            if (Process32First(SnapshotHandle, &ProcessEntry32))            //照的第一张放到ProcessEntry32里面            {                do                {                    if(!_tcscmp(ProcessEntry32.szExeFile, pName))                    {                        return TRUE;                    }                } while (Process32Next(SnapshotHandle, &ProcessEntry32));                return FALSE;            }        }}int main(){    //CreateThread(NULL, NULL, ThreadCallBack, NULL, NULL, NULL);    // 寻找调试器窗口/窗口类    CreateThread(NULL, NULL, ThreadCallBack2, NULL, NULL, NULL);    // 寻找调试器进程    while (true)    {        printf("程序正在运行");    }    return 0;}

 

posted @ 2022-04-08 11:44 人类观察者 阅读(0) 评论(0) 编辑 收藏 举报
回帖
    优雅殿下

    优雅殿下 (王者 段位)

    2018 积分 (2)粉丝 (47)源码

    小小码农,大大世界

     

    温馨提示

    亦奇源码

    最新会员