寻找kernel32.dll的地址
为了寻找kernel32.dll的地址,可以直接输出,也可以通过TEB,PEB等查找。
寻找TEB:
dt _TEB
nt!_TEB
+0x000 NtTib : _NT_TIB
+0x01c EnvironmentPointer : Ptr32 Void
+0x020 ClientId : _CLIENT_ID
+0x028 ActiveRpcHandle : Ptr32 Void
+0x02c ThreadLocalStoragePointer : Ptr32 Void
+0x030 ProcessEnvironmentBlock : Ptr32 _PEB
+0x034 LastErrorValue : Uint4B
0x30处就是PEB
dt _PEB
nt!_PEB
+0x000 InheritedAddressSpace : UChar
+0x001 ReadImageFileExecOptions : UChar
+0x002 BeingDebugged : UChar
+0x003 BitField : UChar
+0x003 ImageUsesLargePages : Pos 0, 1 Bit
+0x003 IsProtectedProcess : Pos 1, 1 Bit
+0x003 IsLegacyProcess : Pos 2, 1 Bit
+0x003 IsImageDynamicallyRelocated : Pos 3, 1 Bit
+0x003 SkipPatchingUser32Forwarders : Pos 4, 1 Bit
+0x003 SpareBits : Pos 5, 3 Bits
+0x004 Mutant : Ptr32 Void
+0x008 ImageBaseAddress : Ptr32 Void
+0x00c Ldr : Ptr32 _PEB_LDR_DATA
+0x010 ProcessParameters : Ptr32 _RTL_USER_PROCESS_PARAMETERS
0x0C处是 LDR
dt _PEB_LDR_DATA
nt!_PEB_LDR_DATA
+0x000 Length : Uint4B
+0x004 Initialized : UChar
+0x008 SsHandle : Ptr32 Void
+0x00c InLoadOrderModuleList : _LIST_ENTRY
+0x014 InMemoryOrderModuleList : _LIST_ENTRY
+0x01c InInitializationOrderModuleList : _LIST_ENTRY
+0x024 EntryInProgress : Ptr32 Void
+0x028 ShutdownInProgress : UChar
+0x02c ShutdownThreadId : Ptr32 Void
InMemoryOrderModuleList 是嵌套在一个更大的结构体 _LDR_DATA_TABLE_ENTRY 里面
dt _LDR_DATA_TABLE_ENTRY
nt!_LDR_DATA_TABLE_ENTRY
+0x000 InLoadOrderLinks : _LIST_ENTRY
+0x008 InMemoryOrderLinks : _LIST_ENTRY //就是InMemoryOrderModuleList
+0x010 InInitializationOrderLinks : _LIST_ENTRY
+0x018 DllBase : Ptr32 Void
第二参数就是我们要找的而_LIST_ENTRY表示结构体中的单个元素,InMemoryOrderLinks位于结构体首地址偏移8字节处
其Flink和Blink并不指向临近结构的第一个字节,相反它们引用了临近结构的地址。每个结构的地址
正好是第一个成员的地址Flink。
所以为了得到相邻结构的地址,需要从Flink中减去8字节的偏移。
下面是两种得到kernel32.dll地址的方法
VOID Sub_1(); int main() {Sub_1();HMODULE v1 = NULL; v1 = LoadLibrary(L"kernel32.dll"); //加载DLL printf("0x%08p\r\n", v1);return 0; }VOID Sub_1() { int address = 0; __asm { xor ebx, ebx; mov ebx, fs:[0x30]; mov ebx, [ebx + 0x0c]; mov ebx, [ebx + 0x14]; mov ebx, [ebx]; mov ebx, [ebx]; mov ebx, [ebx + 0x10]; mov address, ebx; } printf("0x%08p\r\n", address); }
我的测试结果是 0x76C00000
在用户模式下,TEB的创建方式总是相同的,与该地址对应的段选择器自动放置在FS段寄存器中,TEB的偏移地址总是0.
TEB的地址可以被表示为 FS:00000000H.
转载于:https://www.cnblogs.com/kekoukele987/p/7484952.html
寻找kernel32.dll的地址相关推荐
- c++ dll返回容器_Windows x86 Shellcode开发:寻找Kernel32.dll地址
前言 针对一个已经学习了Linux Shellcode开发,并开始在Windows上尝试的研究人员来说,这一过程可能要比想象的更加艰难.Windows内核与Linux完全不同.尽管如此,但Linux内 ...
- 重定位(搜索KERNEL32.DLL得到API地址)
1 ;-------------------------------- 2 ;动态加载功能实现 3 ;moriarty 4 ;2012/04/13 5 ;----------------------- ...
- 利用FS寄存器获取KERNEL32.DLL基址算法的证明
FS寄存器指向当前活动线程的TEB结构(线程结构) 偏移 说明 000 指向SEH链指针 004 线程堆栈顶部 008 线程堆栈底部 00C SubSystemTib 010 FiberD ...
- 利用FS寄存器获取KERNEL32.DLL基址算法的证明(ZZ)
转自:http://blog.csdn.net/int2e/archive/2008/01/09/2032732.aspx FS寄存器指向当前活动线程的TEB结构(线程结构) 偏移 说明 000 ...
- Kernel32加载地址查找的基本方法
搜索内存中的API有许多方法,主要的是要找到KERNEL32.DLL的加载地址,常用的基本方法也就几种. 1.暴力搜索KERNEL32.DLL,同时需要处理内存访问异常 2.通过线程初始化时压入堆栈的 ...
- 10.4.4 使用ctypes调用kernel32.dll中的函数
10.4.4 使用ctypes调用kernel32.dll中的函数 2007-10-17 14:41 孙广磊 人民邮电出版社 字号:T | T 综合评级: 想读(5) 在读(0) 已读(6) ...
- Windows x64平台 获取PEB表,并获取kernel32.dll的基址,并获取它的函数
参考了:https://www.cnblogs.com/aliflycoris/p/5185097.html 和另一位博主 话不多说,进入正题: 首先是获取PEB基址,先得懂怎么在64位平台嵌入汇编代 ...
- C#通过Kernel32.dll动态调用C++生成dll相关接口(结构体转换)相关问题整理
公司内部服务器端全部采用C++开发,自然而然暴露给客户的肯定是C++提供的API.这里不介绍为何通讯间不采用xml或和其他方式进行传输,因为这是个个别案例. 公司C++高手一大堆,我只是个C++新手, ...
- 关于错误 Unhandled exception in .exe (Kernel32.dll): 0xE06D7363
这两天遇到一个奇怪的问题:ado 编程 使用 _RecordsetPtr 类的 Update() 方法,更新一条记录非常不稳定, 有时候能成功更新有时候就不能 错误信息也无法捕获 直接给我来一个 Un ...
最新文章
- Anchor的泛化:统一物体检测、实例分割、姿态估计的Point-set Anchor
- 职场思想分享002 | 入职第一个月工资这样花,一年内工资至少再涨50%!
- 面向对象理论(6)-Interface Programming-[A]
- 测试nb信号的软件_NB-IOT的OTA测试(功率、灵敏度测试)
- 谁适合做Scrum Master?
- 在linux缓存里写数据,缓存策略
- 新手指南|欢迎来到CSDN
- stvd c语言编译器,STM8--STVD编译工具安装与程序下载
- 通过STC12C5A08S2实战项目来理解单片机是怎么工作的
- 盘点招招毙命的29种USB攻击方式
- 单键带定时雾化补水仪-DLT8P65SA
- 二元置信椭圆r语言_R语言 第4章 初级绘图(6)
- 计算机的随想作文600字,随想作文600字
- 招投标舞弊的22种方式及案例
- 全球仅10%的开发者从不加班;淘宝回应用户账号被禁用 980 年;苹果宣布首次以官方形式参与天猫618折扣活动...
- Visual Studio 2010 Service Pack 1 (SP1)正式版发布了
- 转载:小白如何成为初级WebGIS开发工程师
- Expo大作战(三十一)--expo sdk api之Payments(expo中的支付),翻译这篇文章傻逼了,完全不符合国内用户,我只负责翻译大家可以略过!...
- PMON分析(4)- 引导内核
- css响应式布局汇总(一)——居中布局
热门文章
- laravel 5.1 php版本号,发行版本说明 | 序言 | Laravel 5.1 中文文档
- java 字符串数组定义_「string数组」string 数组怎么定义 - seo实验室
- 学习笔记-------Seate解决分布式事务
- linus下centos7防火墙设置
- cwntos新建目录挂载磁盘_详解Linux磁盘挂载、分区、扩容操作的实现方法
- 数据库计算机报告,外文数据库计算机检索报告实例.pdf
- java 创建者设计模式_Java设计模式之创建者模式分享热爱编程,程序人生
- 进程的退出方式以及僵尸进程和孤儿进程
- oracle索引自增函数,oracle生成动态前缀且自增号码的函数分享
- 新乡台达服务器驱动器维修,台达DELTA伺服驱动器维修