看流星社区

 找回密码
 注册账号
查看: 2313|回复: 2

通过调试寄存器不修改代码实现bt功能附上源码

[复制链接]

该用户从未签到

发表于 2015-4-12 17:50:02 | 显示全部楼层 |阅读模式
下面以封包截取的代码来说明实现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功能,修改寄存器的值,也通过这两个函数来实现。

游客,如果您要查看本帖隐藏内容请回复

该用户从未签到

发表于 2015-4-13 07:31:04 | 显示全部楼层
来看看,怎么样的
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-4-25 17:06

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表