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之后,直接在文件中查找这个值,应该有两处,将其直接修改成其它函数编号。如果不至两处就再分析是不是我们需要改的地方。

  • 相关阅读:
    uva 1416 (SPFA) **月赛第E题的原题**
    uva 10917 (Dijsktra+记忆化搜索) **月赛第D题的原题**
    uva 11478(二分+差分约束系统)
    uva 11374(Dijkstra) HappyNewYear!!!
    Codeforces GoodBye2013 解题报告
    Codeforces Round #222 (Div. 2) 解题报告
    uva 515(差分约束)
    uva 10273(模拟)
    uva 10985(floyd+dfs)
    uva 10594(最小费用最大流)
  • 原文地址:https://www.cnblogs.com/ceblog/p/2133192.html
Copyright © 2011-2022 走看看