资源简介
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\li
文件 3020 2019-04-29 21:56 SearchMem\SearchMem\Debug\SearchMem.tlog\li
文件 646 2019-04-29 21:56 SearchMem\SearchMem\Debug\SearchMem.tlog\li
文件 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个文件信息
相关资源
- C++中头文件与源文件的作用详解
- C++多线程网络编程Socket
- VC++ 多线程文件读写操作
- 利用C++哈希表的方法实现电话号码查
- 移木块游戏,可以自编自玩,vc6.0编写
- C++纯文字DOS超小RPG游戏
- VC++MFC小游戏实例教程(实例)+MFC类库
- 连铸温度场计算程序(C++)
- 6自由度机器人运动学正反解C++程序
- Em算法(使用C++编写)
- libstdc++-4.4.7-4.el6.i686.rpm
- VC++实现CMD命令执行与获得返回信息
- 白话C++(全)
- C++标准库第1、2
- 大数类c++大数类
- C++语言编写串口调试助手
- c++素数筛选法
- C++ mqtt 用法
- 商品库存管理系统 C++ MFC
- c++ 多功能计算器
- C++17 In Detail
- 嵌入式QtC++编程课件
- 颜色识别形状识别STM103嵌入式代码
- CrySearch内存搜索器源码
- c++ 邮件多附件群发
- c++ 透明代理(hookproxy)
- mfc 调用redis
- FTP客户端源码(c++)
- c++ 画图(14Qt-XPS)
- c++多边形交并差运算
评论
共有 条评论