外掛輔助技術分析任務對象基址及封裝任務更新函數

基礎要求:
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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章