支持下面三种方式的特征码搜索,显示地址:
// 搜索数据特征 所在位置
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)
支持如上脚本文件格式。
理论上可以找任何特征码。
界面如下:
支持上图信息存文件。 也支持地址多次搜索。
文件资源:
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秒,应该不算慢。