kxsystem
驱动牛犊
驱动牛犊
  • 注册日期2006-11-25
  • 最后登录2011-08-29
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望56点
  • 贡献值0点
  • 好评度48点
  • 原创分0分
  • 专家分0分
阅读:1609回复:3

关于《天书夜读》的一个疑问。

楼主#
更多 发布于:2007-08-14 17:18
首先声明,我是一个菜鸟,在看天书以前没有学过汇编。所以有错误希望大家谅解。

在看到天书夜读中的Inline Hook实现方法后,自己也想试一试,就做了一个简单的HOOK。发现了一个疑问。
size_t length,total_length = 0;
struct xde_instr code_instr={0};
byte_t *start_address = (byte_t *)MmGetSystemRoutineAddress(…);
while(total_length <5) //注意:由于我的跳转指令只有5字节,所以这里把7改成了5
{
length = xde_disasm(start_address ,&code_instr); // 反汇编一条指令 <<<<<<<<<<<<<<<,,
if(length == 0) // 如果有指令解析失败,就直接返回失败
return false;
total_length += length; // 计算已经反汇编的指令的总长度
}
这些代码得到了应该拷贝出的代码长度,在以<<<<<<<<<<<<<,标出的那行中,每次反汇编的开始地址都不变,得到的长度也一直一样!做出HOOK来很可能出问题。

我HOOK 了NtLoadDriver函数(XPSP2)。这个函数开头是这样的。

lkd> u NtLoadDriver
nt!NtLoadDriver:
805a207a 6a54            push    54h
805a207c 68b0775080      push    offset nt!GUID_DOCK_INTERFACE+0x52c (805077b0)
805a2081 e8b5e3f3ff      call    nt!_SEH_prolog (804e043b)
805a2086 33f6            xor     esi,esi
805a2088 33db            xor     ebx,ebx
805a208a 895de4          mov     dword ptr [ebp-1Ch],ebx
805a208d 64a124010000    mov     eax,dword ptr fs:[00000124h]
805a2093 8945dc          mov     dword ptr [ebp-24h],eax

可见第一个指令长为2,而第二条指令长为5,应该COPY出7字节的代码。但是我的跳转指令(E9)是5个字节,按照天书上的代码,计算出的total_length=2+2+2=6!少了一个字节,结果JMP函数全部出错,直接蓝屏。晕倒~~

我觉得上面那行代码应该这样写:
            length=xde_disasm((unsigned char*)(start_address+total_length),&code_instr);

改后HOOK正常。无蓝屏现象。
kxsystem
驱动牛犊
驱动牛犊
  • 注册日期2006-11-25
  • 最后登录2011-08-29
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望56点
  • 贡献值0点
  • 好评度48点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-08-14 17:20
也许啰嗦了一些,直接贴代码更好点。。
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
板凳#
发布于:2007-08-14 23:42
当然要加上TOTALLENGTH,不然永远在原地跑,书里问题比较多,所以只有自己捉摸才有进步。。。。。。
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
kxsystem
驱动牛犊
驱动牛犊
  • 注册日期2006-11-25
  • 最后登录2011-08-29
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望56点
  • 贡献值0点
  • 好评度48点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-08-15 12:05
游客

返回顶部