|  | 
 
 发表于 2012-8-21 16:33:17
|
显示全部楼层 
| 本帖最后由 biackese 于 2012-8-21 16:34 编辑 
 = =不是LS说的那些
 因为 HOOK就是 把他要调用函数的时候  先跳到自己的
 然后 过程就简单了
 
 比如 执行API
 push 参数 了
 然后call ffffffff= =函数
 = =就是这么个意思 然后
 我们要做的  是先要把这个跳到  我们的函数  处理过里面的参数  在去调用原来的API
 
 所以 我们要把call 函数  改成   jmp 我们自己的函数    参数压到堆栈就先调自己的函数 去处理参数 或实现其他一些
 所以 地址计算 是 自己的函数-真正的函数-5
 call 地址  一共占5个字节
 比如 call的地址 4E0000
 我们的  4F0000
 然后 写的话 JMP实际跳转的是偏移
 就是 4E0000  到 4F0000的偏移
 就是这条指令  到我们的假的   中间的差在减5  为什吗减5呢 因为真的  那个callXXX占了5个字节
 其实  是从callXX后一条指令到我们假的  值就是偏移
 然后就是   fffb
 然后写进去的内存就是  call  xxx被写成我们的例子   jmp 0000fffb
 当然  OD里看到了 就是jmp 4F0000= =因为OD都是把偏移的  计算到实际位置的   方便人的观看
 
 | 
 评分
查看全部评分
 |