C++实现仿CE工具-快速内存搜索-内存特征码定位快速实现-代码很精妙

本文介绍了一种通过精妙的内存操作实现特征码定位的C++代码,利用VirtualQueryEx和ReadProcessMemory,避开API,直接处理底层内存,以提高搜索速度。展示了对底层知识的深入理解和应用。
摘要由CSDN通过智能技术生成

快速实现特征码定位
void FindMemory(DWORD pid)
{
    MEMORY_BASIC_INFORMATION mbi;
    DWORD memoryAddress = 0x400000;
    BYTE *dataBuffer = NULL;
    BOOL readReturn = 0;
    HANDLE pHandle=OpenProcess(PROCESS_ALL_ACCESS, 0, pid);
    while (VirtualQueryEx(pHandle, (LPVOID)memoryAddress, &mbi, sizeof(mbi)))
    {
        if (mbi.Type == MEM_PRIVATE && mbi.Protect != PAGE_EXECUTE && mbi.Protect != PAGE_NOACCESS && mbi.Protect != 128)
        {
            dataBuffer = (BYTE*)malloc(mbi.RegionSize);
            readReturn=ReadProcessMemory(pHandle, (LPVOID)memoryAddress, dataBuffer, mbi.RegionSize, 0);
            if (readReturn != 0)
            {
                //在dataBuffer寻找字节集返回找到位置+memoryAddress=实际地址
                for (int i = 0; i < mbi.RegionSize; i++)
                {
                    //寻找自定义字节自己写把
                    if (dataBuffer[i] == 144 && dataBuffer[i+1] == 108)
                    {
                        cout <<"找到"<< hex << memoryAddress+i << endl;
                    }
                }
            }
        }
        memoryAddress = memoryAddress + mbi.RegionSize;
    }
    CloseHandle(pHandle);
}

从代码上看,就是 第一步 进行内存属性过滤,第二步 就是拷贝内存到自身进程进行for循环遍历,这样速度不快才怪!搜索内存底层没用API函数,直接是纯汇编了。 

代码整体很精妙,也是对底层知识的理解和运用!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

侠客软件开发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值