参考了:https://www.cnblogs.com/aliflycoris/p/5185097.html

和另一位博主

话不多说,进入正题:

首先是获取PEB基址,先得懂怎么在64位平台嵌入汇编代码:参考这位博主https://blog.csdn.net/Giser_D/article/details/90670974

汇编代码:

.CODEGetPeb PROCmov rax,gs:[60h]retGetPeb ENDPEND

外部头文件引用:

extern "C" PVOID64 _cdecl GetPeb();

然后获取Kernel32基址:

HMODULE getKernel32Address()
{PVOID64 Peb = GetPeb();PVOID64 LDR_DATA_Addr = *(PVOID64**)((BYTE*)Peb+0x018);  //0x018是LDR相对于PEB偏移   存放着LDR的基地址UNICODE_STRING* FullName; HMODULE hKernel32 = NULL;LIST_ENTRY* pNode = NULL;pNode =(LIST_ENTRY*)(*(PVOID64**)((BYTE*)LDR_DATA_Addr+0x30));  //偏移到InInitializationOrderModuleListwhile(true){FullName = (UNICODE_STRING*)((BYTE*)pNode+0x38);//BaseDllName基于InInitialzationOrderModuList的偏移if(*(FullName->Buffer+12)=='\0'){hKernel32 = (HMODULE)(*((ULONG64*)((BYTE*)pNode+0x10)));//DllBasebreak;}pNode = pNode->Flink;}return hKernel32;
}

然后就是根据上面方法得到的地址 ,函数名,获取对应函数的地址:

PVOID GetAddressFromExportTable(PVOID pBaseAddress, PCHAR pszFunctionName)
{PVOID get_address;ULONG ulFunctionIndex = 0;// Dos HeaderPIMAGE_DOS_HEADER pDosHeader = (PIMAGE_DOS_HEADER)pBaseAddress;// NT HeaderPIMAGE_NT_HEADERS pNtHeaders = (PIMAGE_NT_HEADERS)((PUCHAR)pDosHeader + pDosHeader->e_lfanew);// Export TablePIMAGE_EXPORT_DIRECTORY pExportTable = (PIMAGE_EXPORT_DIRECTORY)((PUCHAR)pDosHeader + pNtHeaders->OptionalHeader.DataDirectory[0].VirtualAddress);// 有名称的导出函数个数ULONG ulNumberOfNames = pExportTable->NumberOfNames;// 导出函数名称地址表PULONG lpNameArray = (PULONG)((PUCHAR)pDosHeader + pExportTable->AddressOfNames);PCHAR lpName = NULL;// 开始遍历导出表for (ULONG i = 0; i < ulNumberOfNames; i++){lpName = (PCHAR)((PUCHAR)pDosHeader + lpNameArray[i]);// 判断是否查找的函数if (0 == _strnicmp(pszFunctionName, lpName, strlen(pszFunctionName))){// 获取导出函数地址USHORT uHint = *(USHORT *)((PUCHAR)pDosHeader + pExportTable->AddressOfNameOrdinals + 2 * i);ULONG ulFuncAddr = *(PULONG)((PUCHAR)pDosHeader + pExportTable->AddressOfFunctions + 4 * uHint);get_address = (PVOID)((PUCHAR)pDosHeader + ulFuncAddr);break;}}return get_address;
}

ok,希望对大家有帮助,讲的不仔细,但是可以直接用。适用于64位平台,切记!

GetAddressFromExportTable获得的Kernel32.dll的ExitThread函数地址是跟实际有误差的,具体原因尚未知,不建议使用!

Windows x64平台 获取PEB表,并获取kernel32.dll的基址,并获取它的函数相关推荐

  1. Windows10 x64 获取PEB表,并获取ntdll基址

    1.Windows通过TEB封装信息,TEB中包含PEB表,如图: (站在看雪大佬巨人的肩膀上才能看得更远) 具体过程是从teb->peb->ldr->InInitializatio ...

  2. php获取post表单数据_PHP get和post方法获取form表单数据

    在 PHP 中使用 get 和 post 两种方法接收来自 form 表单的值,在 form 表单中可以定义 PHP 的接收方式和接收地址. get 和 post 方法主要有以下几点区别. get 是 ...

  3. vb 获取mysql表第一行数据_vb如何将远程获取的数据插入本机数据表中

    双击按钮添加如下代码 Private Sub Command1_Click() Dim objRemoteConn       As New ADODB.Connection Dim objLocal ...

  4. 获取kernel32.dll基址

    获取kernel32.dll基址 一 原理和概述 找kernel32基地址的方法一般有三种:暴力搜索法.异常处理链表搜索法.PEB法. 暴力搜索法是最早的动态查找kernel32基地址的方法.它的原理 ...

  5. 浅谈Kernel32.dll(Windows平台下必有的动态库文件)

    今天听了前辈的黑客攻击的知识分享,里面比较基础的元素就是Kernel32.dll,我对它感兴趣好久了,今天搜集一些资料,有关Kernel32的. 目录 ​编辑 一.Kernel32介绍 二.Kerne ...

  6. [Python黑帽] 一.获取Windows主机信息、注册表、U盘历史痕迹和回收站文件

    最近开始学习网络安全和系统安全,接触到了很多新术语.新方法和新工具,作为一名初学者,感觉安全领域涉及的知识好广.好杂,但同时也非常有意思.这系列文章是作者学习安全过程中的总结和探索,我们一起去躺过那些 ...

  7. 纯 Win32 SDK程序为什么每次要获取设备描述表句柄

    做过Win32 API程序的就会发现,要对窗口输出时,每次都要获取设备描述表句柄:都是对同一个窗口输出,设备描述表是一个:为什么每次都要获取设备描述表句柄呢?获取一次行吗? 做一个Win32 API程 ...

  8. 简单方便的获取所有表的条数

    目录 文档用途 详细信息 文档用途 我们知道oracle里有一个系统表存的rownum.本文旨在介绍在HG数据库中简单方便的获取所有表的条数的方法. 详细信息 通过如下sql: select reln ...

  9. Windows下x86和x64平台的Inline Hook介绍

    原文链接:https://blog.csdn.net/PeaZomboss/article/details/129095200?spm=1001.2014.3001.5501 前言 我在之前研究文明6 ...

最新文章

  1. 随手记一次用C#正则表达式获取下拉菜单html标签select以及相关属性值
  2. Python - 关于方法参数和字典更新(dict.update())方法
  3. 微型计算机温度控制系统课程设计,微机原理及其应用 微型计算机温度控制系统设计课程设计报告.doc...
  4. SQL2000中因为选定的用户拥有对象,所以无法除去该用户.
  5. 《一》php多进程编程:第一次fork
  6. 如何安装nginx_lua_module模块
  7. 100多千克的柠檬电池车可以开吗?
  8. 解决ff下JQuery无法监听input的keyup事件
  9. 股市像脱缰的“野牛”,谁是最好的“牛崽”?
  10. 【分享】自身经历谈一谈自然语言处理领域如何学习?
  11. 使用虚拟机搭建ClouderaManager平台,并自动部署一个hadoop集群(CDH)
  12. linux上chrome、vlc等程序root不能运行的解决办法
  13. 计算机重置指令,如何利用指令重置Win7网络设置
  14. python神奇的小海龟_Python绘图——认识turtle小海龟
  15. 个人邮箱地址格式,如何能够正确的书写?
  16. 学习Java的第六天:for循环,while循环,do-while循环
  17. 深度 DeepinXP-Lite V5.9
  18. 方程组变换+初等变换+矩阵等价+克莱姆法则
  19. win10专业版与家庭版区别分析
  20. Unity 灯光系统(一)

热门文章

  1. 数据库常用的锁有哪些?
  2. python字典(dict)合并的操作
  3. Oracle数据字典全解 (1)
  4. Java: Number转换为BigDecimal:最好方法
  5. 《学习之道》第六章习惯的部分-反应程序
  6. 织梦个人空间中调用ip,会员类型,邮箱,金币,会员积分
  7. MIUI V5的私密短信功能
  8. wp实例开发精品文章源码推荐(8.20)
  9. 【转】实用技巧:简单而有用的nohup命令介绍
  10. java 自定义事件_在Java中创建自定义事件