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

  • 相关阅读:
    android 4种启动模式
    android定位
    android GestureDetector 手势基础
    Android 软键盘盖住输入框的问题
    Android Fragment应用实战,使用碎片向ActivityGroup说再见
    Android Fragment完全解析,关于碎片你所需知道的一切
    setImageResource和setBackgroundResource的區別
    【Android面试】Android面试题集锦 (陆续更新)(最新2012-6-18) eoe上看到的
    Android内存性能优化(内部资料总结)
    关于BFC
  • 原文地址:https://www.cnblogs.com/ceblog/p/2133192.html
Copyright © 2020-2023  润新知