• 大小: 8.45MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-10-05
  • 语言: C/C++
  • 标签: C++  内存搜索  

资源简介

C++ 进程内存搜索,特征码极速定位,方便找Call 找地址!!

资源截图

代码片段和文件信息

// SearchMem.cpp : 定义控制台应用程序的入口点。
//

#include “stdafx.h“
#include 
#include 
#include 
using namespace std;

/***********************************************************************************************************************************************
findMatchingCode() 参数说明:
1) hProcess 要打开的进程句柄
2) markCode 特征码支持通配符(??),如: 55 8b ec ?? 56 83 ec 20 ?? ?? 08 d9 ee
3) memBeginAddr 起始搜索地址
4) memEndAddr 结束搜索地址
5) retAddr[] 记录找到的地址传入这个参数前一定要清0,如 DWORD retAddr[32] = {0};  或者 DWORD *retAddr = new DWORD[32]();
6) deviation 特征码地址离目标地址的偏移距离,上负下正
7) isCall 是否为找CALL的跳转地址,true 则 retAddr[] 返回的是CALL跳转的地址
8) isAll 是否查找所有符合的地址,false找到第一个符合的地址后就结束搜索,true继续搜索,直到搜索地址大于结束地址(memEndAddr)
return返回值 找到的地址总数
*************************************************************************************************************************************************/
DWORD findMatchingCode(HANDLE hProcess string markCode DWORD memBeginAddr DWORD memEndAddr DWORD retAddr[] int deviation bool isCall bool isAll = false);


DWORD findMatchingCode(HANDLE hProcess string markCode DWORD memBeginAddr DWORD memEndAddr DWORD retAddr[] int deviation bool isCall bool isAll)
{
//----------------------处理特征码----------------------//
//去除所有空格
if (!markCode.empty())
{
int index = 0;
while ((index = markCode.find(‘ ‘ index)) >= 0)
{
markCode.erase(index 1);
}
index = 0;
while (true)
{
//删掉头部通配符
index = markCode.find(“??“ index);
if (index == 0) {
markCode.erase(index 2);
}
else {
break;
}
}
}

//特征码长度不能为单数
if (markCode.length() % 2 != 0) return 0;

//特征码长度
int len = markCode.length() / 2;

//Sunday算法模板数组的长度
int nSundayLen = len;

//将特征码转换成byte型
BYTE *pMarkCode = new BYTE[len];
for (int i = 0; i < len; i++)
{
string tempStr = markCode.substr(i * 2 2);
if (tempStr == “??“) {
pMarkCode[i] = 0x3F;
if (nSundayLen == len) nSundayLen = i;
}
else {
pMarkCode[i] = strtoul(tempStr.c_str() 0 16);
}
}
//--------------------------end-------------------------//

//Sunday算法模板数组赋值,+1防止特征码出现FF时越界
int aSunday[0xFF + 1] = { 0 };
for (int i = 0; i < nSundayLen; i++) {
aSunday[pMarkCode[i]] = i + 1;
}

//起始地址
const DWORD dwBeginAddr = memBeginAddr;
//结束地址
const DWORD dwEndAddr = memEndAddr;
//当前读取的内存块地址
DWORD dwCurAddr = dwBeginAddr;
//存放内存数据的缓冲区
BYTE *pMemBuffer = NULL;
//计算参数retAddr[]数组的长度
//int nArrayLength = sizeof(retAddr) / sizeof(*retAddr);
int nArrayLength = 0;
for (int i = 0; ; i++) {
if (*(retAddr + i) != 0) {
nArrayLength = i;
break;
}
}
//偏移量
int nOffset;
//数组下标:内存、特征码、返回地址
int i = 0 j = 0 nCount = 0;

//内存信息
MEMORY_BASIC_INFORMATION mbi;

//记录起始搜索时间
clock_t nBeginTime = clock();

//扫描内存
while (dwCurAddr < dwEndAddr)
{
//查询地址空间中内存地址的信息
memset(&mbi 0 sizeof(MEMORY_BASIC_INFORMATION));
if (::VirtualQueryEx(hProc

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

    ..A..H.     25088  2019-04-29 21:56  SearchMem\.vs\SearchMem\v14\.suo

     文件      70144  2019-04-29 21:56  SearchMem\Debug\SearchMem.exe

     文件     556592  2019-04-29 21:56  SearchMem\Debug\SearchMem.ilk

     文件    1298432  2019-04-29 21:56  SearchMem\Debug\SearchMem.pdb

     文件    3538944  2019-04-29 21:40  SearchMem\ipch\SEARCHMEM-12521770\SEARCHMEM-75debe01.ipch

     文件        604  2019-04-29 21:56  SearchMem\SearchMem\Debug\SearchMem.log

     文件     184973  2019-04-29 21:56  SearchMem\SearchMem\Debug\SearchMem.obj

     文件    3407872  2019-04-29 21:44  SearchMem\SearchMem\Debug\SearchMem.pch

     文件       1538  2019-04-29 21:56  SearchMem\SearchMem\Debug\SearchMem.tlog\CL.command.1.tlog

     文件      31018  2019-04-29 21:56  SearchMem\SearchMem\Debug\SearchMem.tlog\CL.read.1.tlog

     文件       1216  2019-04-29 21:56  SearchMem\SearchMem\Debug\SearchMem.tlog\CL.write.1.tlog

     文件       1380  2019-04-29 21:56  SearchMem\SearchMem\Debug\SearchMem.tlog\link.command.1.tlog

     文件       3020  2019-04-29 21:56  SearchMem\SearchMem\Debug\SearchMem.tlog\link.read.1.tlog

     文件        646  2019-04-29 21:56  SearchMem\SearchMem\Debug\SearchMem.tlog\link.write.1.tlog

     文件        206  2019-04-29 21:56  SearchMem\SearchMem\Debug\SearchMem.tlog\SearchMem.lastbuildstate

     文件      11910  2019-04-29 21:44  SearchMem\SearchMem\Debug\stdafx.obj

     文件     789504  2019-04-29 21:56  SearchMem\SearchMem\Debug\vc140.idb

     文件     495616  2019-04-29 21:56  SearchMem\SearchMem\Debug\vc140.pdb

     文件       1524  2019-04-29 21:40  SearchMem\SearchMem\ReadMe.txt

     文件       6192  2019-04-29 21:56  SearchMem\SearchMem\SearchMem.cpp

     文件       8040  2019-04-29 21:40  SearchMem\SearchMem\SearchMem.vcxproj

     文件       1316  2019-04-29 21:40  SearchMem\SearchMem\SearchMem.vcxproj.filters

     文件        213  2019-04-29 21:40  SearchMem\SearchMem\stdafx.cpp

     文件        234  2019-04-29 21:40  SearchMem\SearchMem\stdafx.h

     文件        240  2019-04-29 21:40  SearchMem\SearchMem\targetver.h

     文件       1309  2019-04-29 21:40  SearchMem\SearchMem.sln

     文件   30142464  2019-04-29 21:56  SearchMem\SearchMem.VC.db

     目录          0  2019-04-29 21:40  SearchMem\.vs\SearchMem\v14

     目录          0  2019-04-29 21:56  SearchMem\SearchMem\Debug\SearchMem.tlog

     目录          0  2019-04-29 21:40  SearchMem\.vs\SearchMem

............此处省略10个文件信息

评论

共有 条评论