一个简单的反调试方案——动态内存监测

记录一下

#include<stdlib.h>
#include<Windows.h>
#include<assert.h>
#include<stdio.h>
#include<string.h>
DWORD WINAPI CheckMemory(LPVOID Argv) {
	char* ProcessBase = (char*)GetModuleHandle(nullptr);
	char* CodeBuffer = 0;
	char* CodeBase=0;
	LONG  CodeLen;
	IMAGE_DOS_HEADER* Dos_Header = (IMAGE_DOS_HEADER*)ProcessBase;
	IMAGE_SECTION_HEADER* SECTION_HEADER = (IMAGE_SECTION_HEADER*)(Dos_Header->e_lfanew + ProcessBase+sizeof(IMAGE_NT_HEADERS));
	while (SECTION_HEADER->Characteristics)//任何一个字段为0都可以
	{
		if (!strcmp((char*)SECTION_HEADER->Name, ".text")) {
			CodeBuffer = new char[SECTION_HEADER->Misc.VirtualSize];
			CodeBase = SECTION_HEADER->VirtualAddress + ProcessBase;
			CodeLen = SECTION_HEADER->Misc.VirtualSize;
			memcpy(CodeBuffer, CodeBase, SECTION_HEADER->Misc.VirtualSize);
			
		}
		SECTION_HEADER++;
	}
	if (!CodeBase)
		return 0;
	
	unsigned long Number = 0;
	while (true)
	{
		if (memcmp(CodeBuffer, CodeBase, CodeLen)) {
			printf("I'm Anti-Debugger , Num:%ul!\n",Number++);
		}
	}
}
int main() {
	CreateThread(NULL, NULL, CheckMemory, NULL, NULL, NULL);
	while (true)
	{
		int a = 1;
	}
	int a = 5;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值