首页
社区
课程
招聘
聊聊游戏辅助那些事上部第二篇——跟踪是个苦力活,自己来做个跟踪调试器。
发表于: 2017-2-23 09:58 12262

聊聊游戏辅助那些事上部第二篇——跟踪是个苦力活,自己来做个跟踪调试器。

2017-2-23 09:58
12262

跟踪,跟踪,总是跟踪!程序中肯定有比跟踪更好玩的事情!我写了个跟踪调试器。。。
这句话可有似曾相识的感觉,如果是说明你还小,或者已老了。

言归正传,逆向大多的时候是确实很枯燥。上一篇说到过掉游戏保护,在调试驱动时,其实有个简单而且带源码的调试器还是很有必要的。

R3应用层的调试其实没多少深度,操作系统内核会将异常发给调试器,调试会用一个线程来处理异常,这里简单的说一下一个调试器的核心流程,具体的大家自己找资料了:

先定义一个扩展的调试事件,在分发异常时传递给异常处理程序。

struct DEBUG_EVENT_EX : public DEBUG_EVENT
{
 CBreakPointMap  _BreakPointMap;    // 软件断点
 CDebugRegistersMap _DebugRegistersMap;   // 硬件断点
 
 //
 // 更多自定义数据
 //
 ......
};

用一个线程将程序异常分发给处理程序。这个是线程的核心部分伪代码,并不是入口函数,CreateProcess,DebugActiveProcess有不同的入口函数,但最后都会调用这个核心函数。这个线程用 WaitForDebugEvent 侦听异常,然后调用OnDebugEvent,根据返回值再调用 ContinueDebugEvent 函数。


DWORD WINAPI DebugEventThread( CDbgDocument* pDocument, PROCESS_INFORMATION pi )
{
 DEBUG_EVENT_EX   dbgex;
 while (WaitForDebugEvent(&dbgex, INFINITE) && (dbgex.dwDebugEventCode != EXIT_PROCESS_DEBUG_EVENT))
 {
  DWORD dwContinueStatus = pDocument->OnDebugEvent();
  ontinueDebugEvent(dbgex.dwProcessId, dbgex.dwThreadId, dwContinueStatus );
 }

 CloseHandle(pi.hProcess);
 CloseHandle(pi.hThread);

 return 0;
};

创建调试进程并起动线程的相关代码:

附加调试到进程并起动线程的相关代码:

这儿贴出我的调试器的调试核心线程以作参考,跟踪的核心部也在这里面。

好了,这儿就不展开如何做一个调试器,进入正题,谈谈如何跟踪,跟踪并不神秘,OD的RunTrace就是一个跟踪,简单而言就是自动单步,然后把寄存器记录下来,但是如何把结果组织起来就有讲究了。
我的调试器跟踪用以下几种方法实现:


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 3
支持
分享
最新回复 (35)
雪    币: 1140
活跃值: (102)
能力值: ( LV4,RANK:48 )
在线值:
发帖
回帖
粉丝
2
6翻了,回帖收藏之
2017-2-23 10:07
0
雪    币: 97
活跃值: (86)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
真的6啊....
2017-2-23 10:08
0
雪    币: 7016
活跃值: (4227)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
厉害了我的哥
2017-2-23 10:09
0
雪    币: 223
活跃值: (32)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
厉害,学习到了很多东西,期待下篇
2017-2-23 10:41
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
把劫持木马也聊聊呗。这木马真难过
2017-2-23 11:48
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
厉害,收藏了
2017-2-23 12:27
0
雪    币: 768
活跃值: (530)
能力值: ( LV13,RANK:460 )
在线值:
发帖
回帖
粉丝
8
楼主,你这神器,能放出来让大家happy一下不,口水啊
2017-2-23 12:56
0
雪    币: 36
活跃值: (102)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
谢谢楼主
2017-2-24 14:29
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
DLL过木马并不难,难是难在楼主所说的检测
2017-2-25 01:32
0
雪    币: 465
活跃值: (667)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
11
FishSeeWater 楼主,你这神器,能放出来让大家happy一下不,口水啊
2017-2-25 15:21
0
雪    币: 3738
活跃值: (3872)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
12
厉害! 回帖收藏!
2017-2-25 17:17
0
雪    币: 238
活跃值: (197)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
13
厉害
2017-2-25 17:35
0
雪    币: 12076
活跃值: (4156)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14

学习了,如果能分享下神器就更好了!

2017-2-25 19:09
0
雪    币: 6340
活跃值: (53)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
回帖收藏!
2017-2-25 19:22
0
雪    币: 16468
活跃值: (2493)
能力值: ( LV9,RANK:147 )
在线值:
发帖
回帖
粉丝
16
老哥稳。
2017-2-25 19:26
0
雪    币: 216
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
17
赞一个
2017-2-28 13:56
0
雪    币: 118
活跃值: (72)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
18
//其实我是来测试一下新版代码功能的。话说看雪新版为何不支持markdown呢
int a=b=c;
Maee("");++c++;


2017-2-28 14:26
0
雪    币: 5484
活跃值: (3297)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
19
mark
2017-3-2 11:42
0
雪    币: 71
活跃值: (920)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
厉害
2017-3-2 15:05
0
雪    币: 8
活跃值: (107)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
mark收藏
2017-3-2 15:15
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
收藏
2017-3-2 16:49
0
雪    币: 558
活跃值: (46)
能力值: ( LV2,RANK:16 )
在线值:
发帖
回帖
粉丝
23
mark收藏
2017-3-2 17:28
0
雪    币: 171
活跃值: (519)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
24
现在只能mark收藏么
2017-3-3 13:44
0
雪    币: 10
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
看不懂
2017-3-3 14:38
0
游客
登录 | 注册 方可回帖
返回
//