zoukankan      html  css  js  c++  java
  • 直接编辑DLL文件,去掉某个链接函数

      近日,在做一款产品时,因为对开机速度的要求很高,我们将系统剪裁到最小,只剩下kernel,filesys,device和需要的驱动等。但我们使用的一个DLL链接了PostMessage,这个函数应该在GWES存在时才会有。所以该DLL不能被加载。因为该DLL是第三方提供的,没有源码,我们无法去掉对PostMessage的调用。厂家也不愿意修改。所以尝试直接编辑DLL。

      首先,用IDA分析,找到使用PostMessage(编号865)的内存位置。但这段内存在IDA中不可读取,更别说编辑了。所以用uledit打开该DLL文件。找到对应的地址后,发现DLL用一段内存在存放import,整个import区形成一个表,每个项目占用一个32位单元,PostMessage在coredll中对应的编号为865(0x361),在这个import表中的值为:0x80000361,以字节表示即为:61 03 00 80,猜测所有的coredll的import值都是0x80XXXXXX。将这个值修改成其它函数的编号之后保存。

      系统启动后发现还是会加载编号为:865的函数。就是说刚才的改动没有起作用。但通过IDA找不到其它与此相关的东西。后来直接查找 61 03 00 80,发现文件中其它位置还有一个类似的表,如法炮制,将这个值也改掉。发现一切正常。

      

         这样一来,对于以后出现类似的问题就很好办法了,如果我们链接的函数在coredll中,将函数编号的十六进制值或上0x80000000之后,直接在文件中查找这个值,应该有两处,将其直接修改成其它函数编号。如果不至两处就再分析是不是我们需要改的地方。

  • 相关阅读:
    kubernetes集群部署
    centos7通过yum安装mysql,并授权远程连接
    查看mysql主从配置的状态及修正 slave不启动问题
    ios 企业发布
    centos 安装 pip
    前端优化:DNS预解析提升页面速度
    apache mesos 安装
    Oboe 提升web 用户体验以及性能
    webpack 多entry 配置
    webpack es6支持配置
  • 原文地址:https://www.cnblogs.com/ceblog/p/2133192.html
Copyright © 2011-2022 走看看