用symbol来获得ShadowSSDT的原始地址和函数名

2023-05-16

在网上看了下,获得ShadowSSDT的函数名和原始地址的方法和文章不是很多。比较简单的应该算是设计张函数名表和用symbol的方法。

个人觉得用symbol来获得ShadowSSDT还是比较方便的,而且自己也不用去创建一张表,何乐而不为。^_^

这办法简单的原因是我只需要一个win32.sys,win32.pdb,以及调用不到10个的API就能完成工作。

好,来看看怎么调用这些函数。

1.调用SymInitialize初始化Dbghelp这系列的函数。
2.调用ImageLoad读取文件win32.sys。
3.调用SymLoadModule来读取pdb文件。
4.调用SymEnumSymbols枚举符号,其中一个参数是回调函数SymEnumSymbolsProc,that's the key。
SymEnumSymbolsProc中有一个系统会帮忙填充一个为PSYMBOL_INFO结构的参数。在这个结构中我主要用到的是Name和Address。
5.调用ImageUnload和SymCleanup做一些清理工作。

OK,看一下我的思路。

首先是获得W32pServiceTable的地址。熟悉ShadowSSDT都知道,W32pServiceTable是在内核初始化用来填充ShadowSSDT的表。
然后,知道了W32pServiceTable的地址,后面的事情也很容易。用SymEnumSymbolsProc把ShadowSSDT每个函数的地址和函数名保存下来。

说起来有点复杂,但代码很简单的。

#include <windows.h> #include <stdio.h> #include <Dbghelp.h>  #pragma comment(lib, "Dbghelp.lib") #pragma comment(lib, "Imagehlp.lib")  extern "C" {    PLOADED_IMAGE     IMAGEAPI     ImageLoad(     PCSTR DllName,     PCSTR DllPath     );    BOOL      IMAGEAPI      ImageUnload(     PLOADED_IMAGE LoadedImage       );  }  // //用于存放得到的ShadowSSDT的函数和函数名 // typedef struct _SHADOWFUNC {   CHAR FuncName[100];   DWORD FuncAddr;  }SHADOWFUNC, *PSHADOWFUNC;  DWORD    g_W32pServiceTable = 0; SHADOWFUNC  g_ShadowFunc[667] = {0};  // //回调函数,用于获得ShadowSSDT的函数和函数名 // BOOL CALLBACK SymEnumSymbolsProc(                  PSYMBOL_INFO  pSymInfo,                  ULONG  SymbolSize,                  PVOID  UserContext                  ) {   PDWORD  pW32pServiceTable = NULL;   INT    i = 0;   if (!UserContext)   {     if (strstr(pSymInfo->Name, "W32pServiceTable"))     {       printf("%s, %#x\n", pSymInfo->Name, pSymInfo->Address);       g_W32pServiceTable = (DWORD)pSymInfo->Address;     }   }   else   {     pW32pServiceTable = (PDWORD)UserContext;     for (i = 0; i < 667; i++)     {       if (*(pW32pServiceTable + i) == (DWORD)pSymInfo->Address)       {         g_ShadowFunc[i].FuncAddr = (DWORD)pSymInfo->Address;         lstrcpyn(g_ShadowFunc[i].FuncName, pSymInfo->Name, 100);               }     }   }    return TRUE; }     void main() {   INT        i = 0;   PDWORD      pW32pServiceTable = 0;   HANDLE      hHandle = 0;   PLOADED_IMAGE  ploadImage = {0};   DWORD      dwload = 0;    hHandle = GetCurrentProcess();   SymInitialize(hHandle, NULL, TRUE);    ploadImage = ImageLoad("win32k.sys", NULL);    dwload = SymLoadModule (hHandle, ploadImage->hFile,      "win32k.sys", "win32k.pdb",      0, ploadImage->SizeOfImage);     SymEnumSymbols(hHandle, dwload, NULL, SymEnumSymbolsProc, NULL);   if (g_W32pServiceTable)   {     pW32pServiceTable = (PDWORD)(g_W32pServiceTable - dwload        + (DWORD)ploadImage->MappedAddress);     SymEnumSymbols(hHandle, dwload, NULL, SymEnumSymbolsProc, pW32pServiceTable);   }    for (i = 0; i < 667; i++)   {     printf("%03d, 0x%08X, %s\n", i, g_ShadowFunc[i].FuncAddr, g_ShadowFunc[i].FuncName);   }    ImageUnload(ploadImage);   SymCleanup(hHandle); }
效果如下:


转载于:https://blog.51cto.com/whatday/1382326

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用symbol来获得ShadowSSDT的原始地址和函数名 的相关文章

  • coursera 计算概论与程序设计基础(李戈)-第二题

    判断闰年 正常情况下一年有365天 xff0c 但是闰年的时候 xff0c 一年有366天 现在给定一个年份 xff0c 请你判断它是不是闰年 凡是能被4整除的年是闰年 xff1b 但逢百之年 xff0c 能被4整除的并不是闰年 xff0c
  • Debian 7 安装使用 Virtualbox及增强功能

    一 安装virtualbox 可以从源里安装 sudo apt get install virtualbox 也可以下载最新版安装 https www virtualbox org wiki Downloads 二 安装增强功能 安装增强功
  • 《你必须知道的.NET》第二次印刷,未来与梦想

    你必须知道的 NET 网站 Anytao技术博客 你必须知道的 NET 第二次印刷 xff0c 未来与梦想 发布日期 xff1a 2008 11 20 作者 xff1a Anytao 2008 Anytao com xff0c Anytao
  • 51学习计划最后

    hhhhhhhhhhh 来了11111111111111111111111111111111111111111111111111111111111111111111111 555 4444 66 77 88 99 00 61 61 61 6
  • sql 跨数据库读取数据库中的数据

    跨数据库读取数据库中的数据 创建链接服务器 右键单击 连接服务器 xff0c 弹出 xff1a 点击 安全性 xff0c 弹出 xff1a 输入连接到的数据库的登陆名和密码 这样链接服务器就创建完成了 这样就可以通过链接服务器的方式查询到链
  • Android系统定制之SystemUI修改:下拉通知栏尺寸【转】

    本文转载自 xff1a https blog csdn net huil0925 article details 67632358 最近项目需要修改下拉通知栏面板的宽度 xff0c 完成后 xff0c 写个Blog做个总结 xff0c 也提
  • git只拉取github部分代码的方法

    需求 xff1a github某个项目所有代码太大 xff0c 有600 43 M xff0c 甚至更大 xff1b 只需要拉取部分代码 xff0c 一是可以降低网络消耗 xff0c 二是可以降低磁盘占用 分析了下空间占用情况 xff1a
  • MatLab计算图像圆度

    本文所述方法可以检测同一图像中的多个圆形 xff08 准确的说 xff0c 应该是闭合图像 xff09 在Matlab2010a中可以实现 附录效果图 xff1a 颗粒圆度 clear close all 读取源图像 I 61 imread
  • RSA签名的PSS模式

    本文由云 43 社区发表 作者 xff1a mariolu 一 什么是PSS模式 xff1f 1 1 两种签名方式之一RSA PSS PSS Probabilistic Signature Scheme 私钥签名流程的一种填充模式 目前主流
  • 爬虫mm131明星照片

    1 39 39 39 2 1 爬取以下站点中各个明星图片 xff0c 分别单独建文件夹存放 3 起始URL地址 xff1a http www mm131 com mingxing 4 39 39 39 5 import os 6 impor
  • 使用IDEA工具配置和运行vue项目(详细其中的坑)

    刚来公司实习发现公司的前端使用的是vue xff0c 之前根本就没有听说过 然后一上来就需要看代码 xff0c but but 就是没有文档什么的东西 xff0c 就需要自己去研读 xff0c 我就想去运行其中的前端和后端联调起来方便理解
  • pycharm永久激活方式

    网上找了好多 xff0c 还是这个最方便快捷 1 下载 链接 https pan baidu com s 1axPsIaedtZDRG7lTup9b5g 密码 7vxp xff0c 并将 JetbrainsCrack 2 10 releas
  • Majority Element出现次数超过一半的数字

    Given an array of size n find the majority element The majority element is the element that appears more than n 2 times
  • C#实现WEB服务器

    一 HTTP协议的作用原理 WWW是以Internet作为传输媒介的一个应用系统 xff0c WWW网上最基本的传输单位是Web网页 WWW的工作基于客户机 服务器计算模型 xff0c 由Web 浏览器 客户机 和Web服务器 服务器 构成
  • 51学习计划

    hhhhhhhhhhh 来了11111111111111111111111111111111111111111111111111111111111111111111111 555 4444 66 77 88 99 00 61 61 61 6
  • Linux 配置静态IP

    在新安装的Linux系统命令行下 xff0c 敲入 xff1a ifconfig 显示如下界面 上面这张图显示网卡没有启动 xff0c 那么我们敲入代码 xff1a ifup eth0启动网卡 网卡启动后 xff0c 我们可以看出 xff0
  • 关于硬件渲染了解一下

    浏览器的渲染方式 xff0c 主要分为两种 xff0c 第一种是软件渲染 xff0c 第二种是硬件渲染 如果绘制工作只是由 CPU 完成 xff0c 那么称之为软件渲染 xff0c 如果绘制工作由 GPU 完成 xff0c 则称之为硬件渲染
  • 七牛云PHP 20m文件上传不了,tp上传到七牛 文件大了就无法上传 但是没有限制

    config php没有限制 如下 39 UPLOAD SITEIMG QINIU 39 61 gt array 39 rootPath 39 61 gt 39 39 39 saveName 39 61 gt array 39 uniqid
  • Debian6.0.7的archive mirror列表真接地气

    为什么80 的码农都做不了架构师 xff1f gt gt gt 转载于 https my oschina net cers blog 111135
  • 05-03-通过组策略(域)配置加域客户端补丁自动更新

    系统工程师实战培训 05 部署补丁管理服务器 03 通过组策略 域 配置加域客户端补丁 自动更新 作者 xff1a 学 无 止 境 QQ交流群 xff1a 454544014 在100 Admin01上安装 组策略 管理工具 创建完成后 x

随机推荐

  • sql server 2016 json 解析方法

    前几天发现了sql server 2016支持了json 项目需要所以安装了 用了一下 方便了很多 xff0c 写一下小笔记方便日后查看 xff0c 也希望各位大神指正共同学习 sql server 2016 安装图解网上很多 xff0c
  • Windows Server 系列服务器之轻松修改远程端口

    Windows系列的服务器 xff0c 远程端口号默认的是3389 xff0c 当然 xff0c 一些服务器服务商可能会是其他的端口 在生产环境中 xff0c 对于服务器安全来讲 修改远程端口和屏蔽一些不用的端口是非常有必要的 在安装好服务
  • 使用组策略进行软件升级

    使用组策略进行软件升级 升级包括强制升级和可选升级 xff0c 强制升级就是强制用户卸载已经安装的旧版本软件 xff0c 安装新版软件 可选升级就是保留旧版本的情况下安装新版本 本示例演示强制升级部署给用户的画图软件 任务 xff1a u
  • Linux查看系统上的时间和日期

    大家好 xff0c 本篇博客介绍了两个关于Linux里的时间和日期的命令 xff0c 有些内容是我自己翻译的 xff0c 如果有不足 xff0c 还望读者多多指教 本篇博客的符号说明 xff1a 里的值都不是固定的 xff0c 而不是可选的
  • pytest文档27-pytest分布式执行(pytest-xdist)

    前言 平常我们手工测试用例非常多时 xff0c 比如有1千条用例 xff0c 假设每个用例执行需要1分钟 如果一个测试人员执行需要1000分钟才能执行完 xff0c 当项目非常紧急的时候 xff0c 我们会用测试人力成本换取时间成本 xff
  • 五一学习计划

    hhhhhhhhhhh 来了11111111111111111111111111111111111111111111111111111111111111111111111 555 4444 66 77 88 99 00 标题1 标题2 标题
  • linux脚本执行进度条,shell脚本实现进度条

    使用shell脚本编写进度条 可已加入到shell脚本当中 主要作用 xff1a 好看 美观 没毛用 一 普通进度条 xff1a bin bash b 61 39 39 for i 61 0 i lt 61 20 i 43 43 do le
  • mysql单表调整大小_MySQL单表大小问题

    在老版本的MySQL 3 22中 xff0c MySQL的单表限大小为4GB xff0c 当时的MySQL的存储引擎还是ISAM存储引擎 但是 xff0c 当出现MyISAM存储引擎之后 xff0c 也就是从MySQL 3 23开始 xff
  • AC日记——简单密码 openjudge 1.7 10

    10 简单密码 总时间限制 1000ms 内存限制 65536kB 描述 Julius Caesar曾经使用过一种很简单的密码 对于明文中的每个字符 xff0c 将它用它字母表中后5位对应的字符来代替 xff0c 这样就得到了密文 比如字符
  • 触摸事件 - UIControlEvents

    首先 xff0c UIControlEvents有这个几种 xff1a UIControlEventTouchDown 61 1 lt lt 0 on all touch downs UIControlEventTouchDownRepea
  • PyCharm+cmd中使用Anaconda 与 新建Python环境(Windows)

    PyCharm配置Anaconda Anaconda的安装在网上已经有了 xff0c 这里主要讲之前已经安装了已经配置好Python环境变量以及PyCharm的情况下 使用Anaconda 即在PyCharm中出现了 ModuleNotFo
  • 00018计算机应用基础知识点归纳,自考00018计算机应用基础汇总资料

    A 这些文件目前均处于打开状态 B 这些文件正在排队等待打印 C 这些文件最近用Word处理过 D 这些文件是当前目录中扩展名为DOT和文件 62 在Word中 xff0c 移动光标到文件尾的快捷键组合是 A Ctrl 43 PgDn B
  • 给Debian安装Xfce桌面

    1 sudo apt get install xorg xdm xfce4 2 vi xinitrc xff0c 然后输入 xff1a exec xfce4 xff0c 在终端输入startx命令后就能进入xfce4 xff0c 或直接在终
  • python七段数码管的详解,Python入门基础:七段数码管绘制

    1 在学习Python的过程中 xff0c 运用所学的一些基础知识 xff0c 进行一些简单的编程 xff0c 可以收获很多乐趣 在生活中 xff0c LED灯无处不在 xff0c 荧幕显示的广告词 xff0c 给我们呈现出动态的视觉效果
  • 锐捷和华为重分布实验

    锐捷 华为路由重分布实验 实训目的 xff08 1 xff09 熟悉路由器的基本配置 xff1b xff08 2 xff09 掌握路由重分布配置 实训技术原理 为了实现全网互通 xff0c 我们需要路由器能在不同协议之间交换路由信息或者全网
  • md编辑器活动

    312313 4142131323131313 545465645
  • app.jsNodejs启动测试服务

    39 use strict 39 var express 61 require 39 express 39 var app 61 express 39 39 var fs 61 require 39 fs 39 app get 39 dat
  • python之zip打包

    import zipfile 压缩 z 61 zipfile ZipFile 39 z zip 39 39 w 39 z write 39 xo xml 39 z write 39 xxxoo xml 39 z close 解压 z 61
  • CentOS 7之btrfs文件系统

    核心特性 xff1a 支持多物理卷 xff1a btrfs 可由多个底层物理卷组成 xff0c 支持 RAID xff0c 以联机 添加 移除 xff0c 修改 物理卷 写时复制更新机制 xff08 CoW xff09 xff1a 复制 更
  • 用symbol来获得ShadowSSDT的原始地址和函数名

    在网上看了下 xff0c 获得ShadowSSDT的函数名和原始地址的方法和文章不是很多 比较简单的应该算是设计张函数名表和用symbol的方法 个人觉得用symbol来获得ShadowSSDT还是比较方便的 xff0c 而且自己也不用去创