牛骨文教育服务平台(让学习变的简单)
博文笔记

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

创建时间:2008-04-13 投稿人: 浏览次数:213

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

 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);
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。