zoukankan      html  css  js  c++  java
  • hotpatch热修补

    查看系统函数的反汇编代码时会发现开头有个"mov edi,edi"(2字节),再往前则是5个nop指令(当然这不会引人注意),可是"mov edi,edi"有什么用了.

    上网搜索"mov edi,edi",结果让人惊奇,据说系统函数都添加了这段"无用"的代码,为的是Hot Patching,详细内容请自行搜索.

    通 过改写代码来挂接API时,一般是移动前几个字节加入jump指令,对于"mov edi,edi"开头的函数也习惯性的这样处理.可现在情况不同了,这7个字节提供了方便,文中提到了更好的办法,在mov指令处(即函数开始处)使用一 个短跳转指令(2字节)到上面的nop位置,这5个字节可以插入长跳转或call到远处.

    想做个什么,现在这类型的函数修改都可以这样千 篇一律,那我要做一个可以hook所有这些函数的接口,之后在自己的dll内根据函数地址分流. 以后想要hook某api只要修改这7个字节,就可以在我们自己的dll函数内收到信息(包括原函数地址,参数列表),还可以选择是否执行原函数.

    实现包含几部分
    1. 修改待hook api地址处的7个字节(5个nop和mov edi,edi),呼叫接口函数,call偏移为(接口函数地址-原函数地址)
    2. 接口函数的编写,需要取得原函数地址,参数列表后呼叫分流函数
    3. 分流函数,根据函数地址区分函数,做后续处理

    一般的hook需要5字节,lock 什么的,也最多同时操作4字节,如果要修改5字节,严格说来是要使用同步的,以防止其他CPU访问正被修改的指令。

    hotpatch的技法则是首先在函数上方,一般会因为对齐,或者编译时使用/hotpatch选项而预留出几字节的空间,首先在这些空间里写入一 个5字节的远程跳转,然后再将函数的俩字节mov edi,edi指令换成一个近跳转,跳到上方的长跳转中,2字节的修改。此种技法完全不用考虑同步...

  • 相关阅读:
    my first aws native 19c rac ​​​​
    Geeks3D FurMark
    Best Graphics Card Benchmarking Softwares in 2020
    通过机器学习发现文本中的见解和关系
    pip intsall 遇到的各种问题
    python中利用redis构建任务队列(queue)
    fake-useragent,python爬虫伪装请求头
    如何将python3.6软件的py文件打包成exe程序
    python 时间和时间戳的转换
    Python
  • 原文地址:https://www.cnblogs.com/bitxj/p/2722538.html
Copyright © 2011-2022 走看看