为了寻找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的地址相关推荐

  1. c++ dll返回容器_Windows x86 Shellcode开发:寻找Kernel32.dll地址

    前言 针对一个已经学习了Linux Shellcode开发,并开始在Windows上尝试的研究人员来说,这一过程可能要比想象的更加艰难.Windows内核与Linux完全不同.尽管如此,但Linux内 ...

  2. 重定位(搜索KERNEL32.DLL得到API地址)

    1 ;-------------------------------- 2 ;动态加载功能实现 3 ;moriarty 4 ;2012/04/13 5 ;----------------------- ...

  3. 利用FS寄存器获取KERNEL32.DLL基址算法的证明

    FS寄存器指向当前活动线程的TEB结构(线程结构) 偏移  说明 000  指向SEH链指针 004  线程堆栈顶部 008  线程堆栈底部 00C  SubSystemTib 010  FiberD ...

  4. 利用FS寄存器获取KERNEL32.DLL基址算法的证明(ZZ)

    转自:http://blog.csdn.net/int2e/archive/2008/01/09/2032732.aspx FS寄存器指向当前活动线程的TEB结构(线程结构) 偏移  说明 000  ...

  5. Kernel32加载地址查找的基本方法

    搜索内存中的API有许多方法,主要的是要找到KERNEL32.DLL的加载地址,常用的基本方法也就几种. 1.暴力搜索KERNEL32.DLL,同时需要处理内存访问异常 2.通过线程初始化时压入堆栈的 ...

  6. 10.4.4 使用ctypes调用kernel32.dll中的函数

    10.4.4 使用ctypes调用kernel32.dll中的函数 2007-10-17 14:41 孙广磊 人民邮电出版社 字号:T | T 综合评级: 想读(5)  在读(0)  已读(6)   ...

  7. Windows x64平台 获取PEB表,并获取kernel32.dll的基址,并获取它的函数

    参考了:https://www.cnblogs.com/aliflycoris/p/5185097.html 和另一位博主 话不多说,进入正题: 首先是获取PEB基址,先得懂怎么在64位平台嵌入汇编代 ...

  8. C#通过Kernel32.dll动态调用C++生成dll相关接口(结构体转换)相关问题整理

    公司内部服务器端全部采用C++开发,自然而然暴露给客户的肯定是C++提供的API.这里不介绍为何通讯间不采用xml或和其他方式进行传输,因为这是个个别案例. 公司C++高手一大堆,我只是个C++新手, ...

  9. 关于错误 Unhandled exception in .exe (Kernel32.dll): 0xE06D7363

    这两天遇到一个奇怪的问题:ado 编程 使用 _RecordsetPtr 类的 Update() 方法,更新一条记录非常不稳定, 有时候能成功更新有时候就不能 错误信息也无法捕获 直接给我来一个 Un ...

最新文章

  1. Anchor的泛化:统一物体检测、实例分割、姿态估计的Point-set Anchor
  2. 职场思想分享002 | 入职第一个月工资这样花,一年内工资至少再涨50%!
  3. 面向对象理论(6)-Interface Programming-[A]
  4. 测试nb信号的软件_NB-IOT的OTA测试(功率、灵敏度测试)
  5. 谁适合做Scrum Master?
  6. 在linux缓存里写数据,缓存策略
  7. 新手指南|欢迎来到CSDN
  8. stvd c语言编译器,STM8--STVD编译工具安装与程序下载
  9. 通过STC12C5A08S2实战项目来理解单片机是怎么工作的
  10. 盘点招招毙命的29种USB攻击方式
  11. 单键带定时雾化补水仪-DLT8P65SA
  12. 二元置信椭圆r语言_R语言 第4章 初级绘图(6)
  13. 计算机的随想作文600字,随想作文600字
  14. 招投标舞弊的22种方式及案例
  15. 全球仅10%的开发者从不加班;淘宝回应用户账号被禁用 980 年;苹果宣布首次以官方形式参与天猫618折扣活动...
  16. Visual Studio 2010 Service Pack 1 (SP1)正式版发布了
  17. 转载:小白如何成为初级WebGIS开发工程师
  18. Expo大作战(三十一)--expo sdk api之Payments(expo中的支付),翻译这篇文章傻逼了,完全不符合国内用户,我只负责翻译大家可以略过!...
  19. PMON分析(4)- 引导内核
  20. css响应式布局汇总(一)——居中布局

热门文章

  1. laravel 5.1 php版本号,发行版本说明 | 序言 | Laravel 5.1 中文文档
  2. java 字符串数组定义_「string数组」string 数组怎么定义 - seo实验室
  3. 学习笔记-------Seate解决分布式事务
  4. linus下centos7防火墙设置
  5. cwntos新建目录挂载磁盘_详解Linux磁盘挂载、分区、扩容操作的实现方法
  6. 数据库计算机报告,外文数据库计算机检索报告实例.pdf
  7. java 创建者设计模式_Java设计模式之创建者模式分享热爱编程,程序人生
  8. 进程的退出方式以及僵尸进程和孤儿进程
  9. oracle索引自增函数,oracle生成动态前缀且自增号码的函数分享
  10. 新乡台达服务器驱动器维修,台达DELTA伺服驱动器维修