yyffei
驱动牛犊
驱动牛犊
  • 注册日期2005-01-10
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分610分
  • 威望82点
  • 贡献值0点
  • 好评度59点
  • 原创分0分
  • 专家分0分
阅读:1841回复:2

请版主,老牛们,再帮我看看(部分代码). 关于skmon 或 regmon 的问题 (急~~~)

楼主#
更多 发布于:2007-06-22 11:25
先感谢znsoft 和 driverdance 的启发. 学习了一下WinDBG的使用.

部分代码如下:
void HookReg
{
PULONG  addr;
*addr = GETSYSCALL(ServiceTable, ZwSetValueKey);
RealRegSetValueKey = (REALREGSETVALUEKEY)*addr;
*addr = (ULONG)SkMon_HookRegSetValueKey;
}
设下断点后SkMon_HookRegSetValueKey的地址是0xF9BC5D10.

我在跟踪中发现,第一步得到系统服务表中ZwSetValueKey的位置,查看到 addr的内容是0X8061829a; *  0Xe8685c6a(这应该就是ZwSetValueKey的地址了吧).
第二步把*addr给到RealRegSetValueKey来保存旧地址.没什么说的.关键就是第三步,替换ZwSetValueKey.
执行*addr = (ULONG)SkMon_HookRegSetValueKey;之后,WinDBG显示 addr <Couldn't resolve error>

再就发生int 3中断了.
为什么这样,请指教.
yyffei
驱动牛犊
驱动牛犊
  • 注册日期2005-01-10
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分610分
  • 威望82点
  • 贡献值0点
  • 好评度59点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-06-22 15:44
仔细看一下这段代码,就知道错在那里了,呵 .
不明白为什么有的操作系统不出错,有的操作系统就会出错呢.
xuehaipiaoxiang
驱动牛犊
驱动牛犊
  • 注册日期2006-10-11
  • 最后登录2013-02-01
  • 粉丝0
  • 关注0
  • 积分250分
  • 威望273点
  • 贡献值0点
  • 好评度22点
  • 原创分4分
  • 专家分0分
板凳#
发布于:2010-01-04 16:43
Re:请版主,老牛们,再帮我看看(部分代码).&nbsp;&nbsp;关于skmon 或 regmon 的问题 (急~~~)
因为单核CPU用ntoskrnl.exe导出ServiceTable,而多核CPU用ntoskrnlpa.exe导出ServiceTable,所以有的可以,有的不可以。
游客

返回顶部