博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
定位API的原理
阅读量:5910 次
发布时间:2019-06-19

本文共 788 字,大约阅读时间需要 2 分钟。

参考:0Day 安全

  所有的win_32程序都会加载ntdll.dll和kerner32.dll这两个最基础的动态链接库。如果想要在win_32平台下定位kernel32.dll中的API地址

  1,首先通过段选择字FS在内存中找到当前的线程环境快TEB。

  2,线程环境快偏移位置为0x30的地方存放着指向进程环境块PEB的指针。

  3,进程环境块中偏移位置为0x0C的地方存放着指向PEB_LDR_DATA结构体的指针,其中,存放着已经被进程装在的动态链接库的信息。

  4,PEB_LDR_DATA结构体偏移位置为0x1C的地方存放着指向模块初始化链表的头指针InInitizationOrderModuleList.

  5,模块初始化链表InInitizationOrderModuleList中按顺序存放着PE装入运行时初始化模块信息,第一个链表结点是ntdll.dll,第二个链表结点就是kernel32.dll。

  6,找到属于kernel32.dll的结点后,在其基础上再偏移0x08就是kernel32.dll在内存中的加载基地址。

  7,从kernel32.dll的加载基址算起,偏移0x3C的地方就是其PE头。

  8,PE头偏移0x78的地方存放着指向函数导出表的指针。

  9,导出表0x1C处的指针指向存储导出函数偏移地址(RVA)的列表->导出表偏移0x20处的指针指向存储导出函数函数名的列表->函数的RVA地址和名字按照顺序存放在上述两个列表中,我们可以在名称列表中定位到所需的函数是第几个,然后在地址列表中找到对应的RVA—>获得RVA后,再加上前面已经得到的动态链接库的加载基址,就获得了所需API此刻在内存中的虚拟地址。

转载于:https://www.cnblogs.com/shercy/p/6512068.html

你可能感兴趣的文章
github for windows
查看>>
MiniTable 16 网络版安装部署
查看>>
网络知识整理(2)
查看>>
ASP.NET Core DI 手动获取注入对象
查看>>
【JAVA】设计模式之懒汉式与恶汉式的单例模式实现的方法与详解
查看>>
独立游戏开发者如何利用媒体造势
查看>>
Shiro的记住我功能失效原因
查看>>
umask值与Linux中文件和目录权限的关系
查看>>
yum方式安装mysql报错找不到mysql.sock
查看>>
PrestaShop支付接口-网银在线支付,在线支付收款,外贸收款
查看>>
JAVA 实现 基于RSA算法的签名验签
查看>>
CA ARCserve Backup系列(2)—安装代理(windows篇)
查看>>
[Unity3d for android]屏幕触摸事件
查看>>
pfx证书与cer证书的区别
查看>>
阿里云 云监控 安装和启动
查看>>
thrift实例:python实现
查看>>
张清:当你把写博客当做一种习惯的时候
查看>>
基于 Java 2 运行时安全模型的线程协作
查看>>
一位90后的自述:如何从年薪3w到30w
查看>>
我的友情链接
查看>>