完成特征码查找工具,支持文件和进程两种方式

 支持下面三种方式的特征码搜索,显示地址:

 BOOL scanffileself( const   char   * pfilename,TAddressList & datalst);
  
// 搜索数据特征 所在位置
  int  ScanfSpec(CString sspec,INT istartaddr,INT iendaddr);
 
// 根据常量附近的特征码搜索常量数据,如 
 
// A1 B4 A9 91 00; mov eax,dword ptr [91A9B4] 要得到0091A9B4
  /*
0452b3C:   A1 B4A99100   ; mov eax,dword ptr [91A9B4]   ioffset=-8
0452b41:   6A 00         ; PUSH 0
0452b43:   6A 00         ; PUSH 0
0452b45:   8B50 1C       ; mov edx,dword ptr [eax+1C]   --sspec开始-- 
0452b48:   8B42 28       ; mov eax,dword ptr [edx+28]
0452b4B:   8B82 6C030000 ; mov eax,dword ptr [edx+036C] --sspec结束-- 
上述地址应该在istartaddr,iendaddr之间
 
*/

int  ScanfConstData(CString sspec,INT istartaddr,INT iendaddr,INT ioffset);
 
// 根据函数调用附近的特征码搜索调用函数,如 
 
// E8 F3 3E 10 00; call 0057BDD0 要得到0057BDD0
  /* 捡物地址
0477EC4:   8B97 10010000 ; mov edx,dword ptr [edi+110]   --sspec开始-- 
0477ECA:   8B46 20       ; mov eax,dword ptr [esi+20]
0477ECD:   52            ; push edx
0477ECE:   8B49 20       ; mov ecx,dword ptr [ecx+20]   --sspec结束--
0477ED1:   50            ; push eax
0477ED2:   81c1 D4000000 ; add ecx 0D4                  --sspec也可以在此结束-- 
0477ED8:   E8 F3 3E 10 00; call 0057BDD0 要得到0057BDD0=0477ED8+00013EF3+05  ioffset=21=d8+01-c4
上述地址应该在istartaddr,iendaddr之间
 
*/

int  ScanfCall_Func(CString sspec,INT istartaddr,INT iendaddr,INT ioffset);
 
// 根据函数内的地址搜索函数起始地址,如 
 
// 答题地址
  /*
0581550:   6A FF         ; push -1          --函数起始地址--  
0581552:   68 98308400   ; push  00843098
 ...
0581585:   8B4C24 30     ; mov ecx,dword ptr [esp+30] --sspec开始-- 
0581589:   8B5424 34     ; mov edx,dword ptr [esp+34] 
058158D:   8B86 3001 0000; mov eax,dword ptr [esi+130] --sspec结束--
0581593:   894c24 10     ; mov dword ptr[esp+10],ecx   --sspec也可以在此结束-- 
上述地址应该在istartaddr,iendaddr之间
 
*/

int  ScanfFuncStart(CString sspec,INT istartaddr,INT iendaddr,INT ioffset);

#宝宝
一级基址A1:abase=ScanfConstData("8B 50 1c 8b 42 28 8b 80 6c 03 00 00", 0x450000, 0x500000, -8)
小星星基址A3:abase=ScanfConstData("8D04D5 00000000 2BC2 F7D8 8D0C81", 0x450000, 0x500000, 28)
小星星基址_2A3:abase=ScanfConstData("8D04D5 00000000 2BC2 F7D8 8D0C81 A1 ???? ???? 2BC2", 0x450000, 0x500000, 28)
等级经验基址C5:gradbase=ScanfConstData("8B4424 04 DD04C5", 0x450000, 0x500000, 7)
等级经验基址00:gradbase2=ScanfFuncStart("00007940 00000000 00C08240 00000000 00B08D40 00000000 00889340",0x950000, 0x980000,-36)
发包地址1:sendcall=ScanfFuncStart("894424 18 895C24 1C 895C24 20",0x550000, 0x600000,-43)
发包地址2:dati2call=ScanfCall_Func("8B4424 08 8B4C24 0C 66C706 5600 8946 02 894E 06",0x540000, 0x600000,32)
支持如上脚本文件格式。

理论上可以找任何特征码。

界面如下:

完成特征码查找工具,支持文件和进程两种方式_第1张图片

支持上图信息存文件。 也支持地址多次搜索。

文件资源:

http://download.csdn.net/source/412122

完善名关于进程名的大小写处理。 后者对进程名忽略大小写进行比较。

http://download.csdn.net/source/415342

加了进度条

http://download.csdn.net/source/417341

增强版(用windows的sol.exe纸牌做例子,偷看牌),结合了游戏属性工具的功能。

http://download.csdn.net/source/2228703

工具应该对没有加壳的游戏是通用适用的。
进程内存不是一次读入的,是分块读入的。如图内存分布表。
大家搜索的时候,如果代码就找带X属性的。如果数据就找带W属性的。
如果只读数据就找带R属性的。这样会快一些。

特征码搜索,如game2spec.txt文件中,搜索只需要1-2秒,应该不算慢。
完成特征码查找工具,支持文件和进程两种方式_第2张图片
完成特征码查找工具,支持文件和进程两种方式_第3张图片

你可能感兴趣的:(完成特征码查找工具,支持文件和进程两种方式)