资源简介
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++基础和进阶课堂讲义完整版
- Installshield for VC++ 6.0 安装包制作工具
- C++17 stl cook book 中文版
- visual C++ 7.0完整安装程序
- VC++深入详解part1
- C++ 后台服务程序DeamonATE 可开机启动
- 用C++实现简易的文本编辑器
- 地震数据SEGY格式的读写 C++
- 用C++ 实现 防火墙 源代码
- CEC2017测试函数C++源码、和文献介绍
- vc++编写的SipPhone
- 网际风股票实时行情全推数据接口A
- OpenCV C++完整的车牌识别系统.rar
- 文件覆盖确认工具MFC/VC++源代码
- MFC垃圾清理器V2.0
- vc++ 图像编码 视频编码
- C++绘制曲线图 温度计图
- C++语言程序设计学生用书
- 数字签名算法,c++实现,RSA的算法
- Visual C++ 2008 x86 Runtime Setup
- c++实现局域网文件传送基于socket
- C++ Google地图API源码
- c++ssk皮肤文件使用方法
- 《Qt中的C++技术》
- 完整的C++贪吃鱼游戏
- C++培训课程资料1
- C++编写的邮局选址问题
- C++全英文授课课件
- c++音乐播放器
- C++程序设计谭浩强PDF完整版
评论
共有 条评论