外掛輔助技術分析任務對象基址及封裝任務更新函數
基礎要求:
1、會一點C語言
2、懂一點彙編
學習目標:
動態定位基址
編寫相關函數
編寫特徵碼定位函數ScanFeatureCode
//1把特徵碼轉換成全大寫
//2讀取遊戲字節數組數據
//3轉換成十六進制字串
//4十六進制 字串比較 找到則返回地址 未找到返回0
DWORD ScanFeatureCode(HANDLE hProcess,//進程句柄
IN OUT char* szpFeatureCode,
DWORD ndStartAddress,
DWORD ndEndAddress
);
作業:優化算法 提升函數速度;
//www.yjxsoft.com QQ150330575
//時間:2014.11月
//函數名:ScanFeatureCode 功能:特徵定位
//1把特徵碼轉換成全大寫
//2讀取遊戲字節數組數據
//3轉換成十六進制字串
//4十六進制 字串比較 找到則返回地址 未找到返回0
#define PAGESIZE 0x1024 //每次讀取的大小 1KB
DWORD ScanFeatureCode(HANDLE hProcess,//進程句柄
IN OUT char* szpFeatureCode,
DWORD ndStartAddress,
DWORD ndEndAddress
)
{
//如果存在小寫字母 則全轉大寫
HexStrToBigCase(szpFeatureCode);
DWORD ndLenHexCode=strlen(szpFeatureCode);//0xAF
BYTE *nbDataBuf=new BYTE[PAGESIZE+ndLenHexCode/2+2];//每次要讀取的緩衝區大小
DWORD ndByReadSize=0;//實際讀取緩衝區大小
for (DWORD ndCurAddr=ndStartAddress;ndCurAddr<ndEndAddress-ndLenHexCode/2;ndCurAddr=ndCurAddr+PAGESIZE)
{
ReadProcessMemory(hProcess,(LPVOID)ndCurAddr,(LPVOID)nbDataBuf,PAGESIZE+ndLenHexCode/2+2,&ndByReadSize);
//nbDataBuf 逐字節比較數據
for (DWORD i=0;i<PAGESIZE;i++)
{
char szpTempHex[256]="";
BytesToHexStr(&nbDataBuf,ndLenHexCode/2,szpTempHex);
if (HexStrCmp(szpFeatureCode,szpTempHex)!=FALSE)
{
return ndCurAddr+i;//
}
}
}
return NULL;
}
1、會一點C語言
2、懂一點彙編
學習目標:
動態定位基址
編寫相關函數
編寫特徵碼定位函數ScanFeatureCode
//1把特徵碼轉換成全大寫
//2讀取遊戲字節數組數據
//3轉換成十六進制字串
//4十六進制 字串比較 找到則返回地址 未找到返回0
DWORD ScanFeatureCode(HANDLE hProcess,//進程句柄
IN OUT char* szpFeatureCode,
DWORD ndStartAddress,
DWORD ndEndAddress
);
作業:優化算法 提升函數速度;
//www.yjxsoft.com QQ150330575
//時間:2014.11月
//函數名:ScanFeatureCode 功能:特徵定位
//1把特徵碼轉換成全大寫
//2讀取遊戲字節數組數據
//3轉換成十六進制字串
//4十六進制 字串比較 找到則返回地址 未找到返回0
#define PAGESIZE 0x1024 //每次讀取的大小 1KB
DWORD ScanFeatureCode(HANDLE hProcess,//進程句柄
IN OUT char* szpFeatureCode,
DWORD ndStartAddress,
DWORD ndEndAddress
)
{
//如果存在小寫字母 則全轉大寫
HexStrToBigCase(szpFeatureCode);
DWORD ndLenHexCode=strlen(szpFeatureCode);//0xAF
BYTE *nbDataBuf=new BYTE[PAGESIZE+ndLenHexCode/2+2];//每次要讀取的緩衝區大小
DWORD ndByReadSize=0;//實際讀取緩衝區大小
for (DWORD ndCurAddr=ndStartAddress;ndCurAddr<ndEndAddress-ndLenHexCode/2;ndCurAddr=ndCurAddr+PAGESIZE)
{
ReadProcessMemory(hProcess,(LPVOID)ndCurAddr,(LPVOID)nbDataBuf,PAGESIZE+ndLenHexCode/2+2,&ndByReadSize);
//nbDataBuf 逐字節比較數據
for (DWORD i=0;i<PAGESIZE;i++)
{
char szpTempHex[256]="";
BytesToHexStr(&nbDataBuf,ndLenHexCode/2,szpTempHex);
if (HexStrCmp(szpFeatureCode,szpTempHex)!=FALSE)
{
return ndCurAddr+i;//
}
}
}
return NULL;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.