linux 查看动态库基址,[原创]查找系统动态链接库(Dll)基地址和指定函数地址的一种方法...

在我的上一篇帖子查找进程API内存地址的小程序中写了一个小工具,枚举进程的输入表函数地址,有朋友要我公布源代码,很惭愧,那个程序代码有待优化,就不公布了,这个帖子公布源代码,那个工具中用到的代码和这篇类似,可以作为相互参考。

看到老罗写的一篇“暴力搜索内存获取API地址”的帖子,很受启发,现在有些程序有保护,用我那个查找进程API内存地址的小程序可能读不了其进程,从而也就无法获取他们的API地址了。老罗的方法可以直接获取用户系统中的API地址,因为它不需要读取其他程序内存地址。按老罗的方法,查找API地址必须首先找到系统Dll的基址,老罗用的方法就是现在网上流行的3种之一,这里我用一种和网上流行的不一样的方法获取系统Dll基址,并将老罗未完成的搜索内存获取API地址未写的代码写出来。

思路:

1、学习过PE文件格式的童鞋应该知道,PE的头文件中就包含了PE文件的基址,那么我们直接读取Dll的PE中的基址不就可以轻松的得到Dll的基址了么,OK,go on

2、要得到Dll文件,首先要知道其地址,一般都放在C:\WINDOWS\system32文件夹中,有的童鞋马上会扔鞋子过来,我丫系统没装C盘呢,我丫系统不是XP呢

3、威武的Windos API来了,GetWindowsDirectory就可以得到系统目录,再在系统目录后加个\system32\xxx.dll就完美解决了

4、OK,找到系统Dll了,载入,读取其基址,读取其输出表RVA

5、然后根据输出表RVA和基址取输出表的FAT,FNT

6、再然后就是暴力男人狂搜FNT说指向的API名称,并和我们想要的API名称进行对比,找到后返回FAT找其地址

是不是很简单呢,同时聪明的童鞋们还可以发现,我们载入了系统Dll,那么直接在Dll中就可以找到我们想要的API地址,具体方法和内存中暴搜一样的,只是把基址换成我们读取的Dll文件在内存中的地址就行了

说了这么多废话,我们以查找开始“OpenFileMapping”这个函数地址为例,上代码:

invokeFAA_FindKernel32Path, addr szKernel32Pa

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值