OD里下断点实际上是将代码改成int 3,又叫“CC中断”。基于这个原理,我们可以在程序中创建一个线程,实时检测代码区是否被修改,从而实现反OD下断点。
下面是代码演示:
// 校验和反调试.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
// 为了方便测试,请在链接器选项中关闭随机基址ASLR
#include <windows.h>
#include <stdio.h>
DWORD g_dwCheckSum = 0; // 校验和
DWORD WINAPI CheckThread(LPVOID lpvoid)
{
printf("校验线程开始\n");
while (1)
{
// 计算校验和
DWORD dwBaseOfCode = 0x00411000