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

转载于:https://www.cnblogs.com/ceblog/archive/2011/08/10/2133192.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值