資源簡介
C++ 進(jìn)程內(nèi)存搜索,特征碼極速定位,方便找Call 找地址!!

代碼片段和文件信息
//?SearchMem.cpp?:?定義控制臺(tái)應(yīng)用程序的入口點(diǎn)。
//
#include?“stdafx.h“
#include?
#include?
#include?
using?namespace?std;
/***********************************************************************************************************************************************
findMatchingCode()?參數(shù)說明:
1)?hProcess 要打開的進(jìn)程句柄
2)?markCode 特征碼支持通配符(??),如:?55?8b?ec????56?83?ec?20???????08?d9?ee
3)?memBeginAddr 起始搜索地址
4)?memEndAddr 結(jié)束搜索地址
5)?retAddr[] 記錄找到的地址傳入這個(gè)參數(shù)前一定要清0,如?DWORD?retAddr[32]?=?{0};??或者?DWORD?*retAddr?=?new?DWORD[32]();
6)?deviation 特征碼地址離目標(biāo)地址的偏移距離,上負(fù)下正
7)?isCall 是否為找CALL的跳轉(zhuǎn)地址,true?則?retAddr[]?返回的是CALL跳轉(zhuǎn)的地址
8)?isAll 是否查找所有符合的地址,false找到第一個(gè)符合的地址后就結(jié)束搜索,true繼續(xù)搜索,直到搜索地址大于結(jié)束地址(memEndAddr)
return返回值 找到的地址總數(shù)
*************************************************************************************************************************************************/
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;
}
}
}
//特征碼長度不能為單數(shù)
if?(markCode.length()?%?2?!=?0)?return?0;
//特征碼長度
int?len?=?markCode.length()?/?2;
//Sunday算法模板數(shù)組的長度
int?nSundayLen?=?len;
//將特征碼轉(zhuǎn)換成byte型
BYTE?*pMarkCode?=?new?BYTE[len];
for?(int?i?=?0;?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算法模板數(shù)組賦值,+1防止特征碼出現(xiàn)FF時(shí)越界
int?aSunday[0xFF?+?1]?=?{?0?};
for?(int?i?=?0;?i? aSunday[pMarkCode[i]]?=?i?+?1;
}
//起始地址
const?DWORD?dwBeginAddr?=?memBeginAddr;
//結(jié)束地址
const?DWORD?dwEndAddr?=?memEndAddr;
//當(dāng)前讀取的內(nèi)存塊地址
DWORD?dwCurAddr?=?dwBeginAddr;
//存放內(nèi)存數(shù)據(jù)的緩沖區(qū)
BYTE?*pMemBuffer?=?NULL;
//計(jì)算參數(shù)retAddr[]數(shù)組的長度
//int?nArrayLength?=?sizeof(retAddr)?/?sizeof(*retAddr);
int?nArrayLength?=?0;
for?(int?i?=?0;?;?i++)?{
if?(*(retAddr?+?i)?!=?0)?{
nArrayLength?=?i;
break;
}
}
//偏移量
int?nOffset;
//數(shù)組下標(biāo):內(nèi)存、特征碼、返回地址
int?i?=?0?j?=?0?nCount?=?0;
//內(nèi)存信息
MEMORY_BASIC_INFORMATION?mbi;
//記錄起始搜索時(shí)間
clock_t?nBeginTime?=?clock();
//掃描內(nèi)存
while?(dwCurAddr? {
//查詢地址空間中內(nèi)存地址的信息
memset(&mbi?0?sizeof(MEMORY_BASIC_INFORMATION));
if?(::VirtualQueryEx(hProc
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
????..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個(gè)文件信息
評(píng)論
共有 條評(píng)論