- 注册时间
- 2011-3-6
- 最后登录
- 1970-1-1
该用户从未签到
|
下面以封包截取的代码来说明实现bt功能的原理。其中好些地方我用的也不熟练,复杂了,高手就不用看了。
主要是会影响些速度,尤其是我的本本,开时间长了就死机.
首先分析要中断的位置
.text:00588F78 mov ecx, [esp+30h+arg_0]
.text:00588F7C push esi ; size_t
.text:00588F7D push ecx ; void *
.text:00588F7E push eax ; void *
.text:00588F7F call ds:memmove
上面是发包函数里的部分代码,其中00588F7D位置ecx存储封包数据地址,00588F7C位置esi存储封包大小。
如果在此处将程序中断,并将所需数据读取出来,目的就达到了。
对于变态功能,以空中漫步为例:
.text:00461792 mov eax, [ecx+5E0h]
.text:00461798 fild [esp+10h+var_8]
.text:0046179C cmp eax, ebx
.text:0046179E fmul ds:flt_85EC2C
.text:004617A4 fstp [esp+10h+arg_0]
.text:004617A8 jz short loc_461828
修改004617A8处的跳转就可以空中漫步,如果在0046179C处中断,然后修改eax或者ebx的值,
也可以实现相应功能但不需要修改指令(注意跳转过后要记得恢复寄存器的值,隐藏建筑和跳跃飞天也可以这样实现)。
下面是封包截取的实现过程,修改一下即可实现bt功能。
1.CreateProcess或者FindWindow或者完美进程ID(dwW2iProcessId)
2.调试进程DebugActiveProcess(dwW2iProcessId)
3.进入调试循环体等待调试事件产生WaitForDebugEvent(&DebugEv, 10)
4.接收到CREATE_PROCESS_DEBUG_EVENT事件时,对全部线程设立断点。
(我可能复杂了,用CREATE_THRAD_DEBUG_EVENT事件可能简单些,刚会用就不错了呵呵,开始我只在主线程里设置了断点,
死活断不下来)
下面是设置断点的方法,使用GetThreadContext和SetThreadContext函数
对于bt功能,修改寄存器的值,也通过这两个函数来实现。
|
|