<address id="bxxfd"><dfn id="bxxfd"></dfn></address>

<dl id="bxxfd"><video id="bxxfd"></video></dl>

<sub id="bxxfd"><delect id="bxxfd"><ins id="bxxfd"></ins></delect></sub>

      <address id="bxxfd"><var id="bxxfd"></var></address>
      <sub id="bxxfd"><dfn id="bxxfd"><ins id="bxxfd"></ins></dfn></sub>

      <form id="bxxfd"><listing id="bxxfd"></listing></form>

      <thead id="bxxfd"><delect id="bxxfd"><output id="bxxfd"></output></delect></thead>

      <thead id="bxxfd"><var id="bxxfd"><output id="bxxfd"></output></var></thead><sub id="bxxfd"><var id="bxxfd"><output id="bxxfd"></output></var></sub>
      <sub id="bxxfd"><var id="bxxfd"><ruby id="bxxfd"></ruby></var></sub>
      <address id="bxxfd"><dfn id="bxxfd"></dfn></address>

      Windows系统调用中的系统服务表描述符

       Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html

      Windows系统调用中的系统服务表描述符

        在前面,我们将解过 系统服务表。可是,我们有个疑问,系统服务表存储在哪里呢?

        答案就是:系统服务表 存储在 系统服务描述符表中。(其又称为 SSDT Service Descriptor Table)

        分享图片

       

       

       一、使用PELord函数从ntoskrnl.exe文件中查看SSDT导出函数

        如图,可以看出KeServiceDescriptorTable导出函数。

        通过该函数可以查找SSDT表的位置。

        分享图片

       

      二、通过Windbg来内存中查看SSDT表

        使用Windbg,可以使用 kd> dd nt!KeServiceDescriptorTable 指令来查看SSDT表。

        但该指令存在缺点,可以看到第二张表为0,说明如果使用KeServiceDescriptorTable这个公开的导出函数,我们无法看到win32k.sys这张表结构

        kd> dd nt!KeServiceDescriptorTable
          83f759c0  83e89d9c 00000000 00000191 83e8a3e4
          83f759d0  00000000 00000000 00000000 00000000
          83f759e0  83ee86af 00000000 0327aa43 000000bb
          83f759f0  00000011 00000100 5385d2ba d717548f

        为了解决上面这个问题,我们只能使用另外一个指令,该指令对应的是一个未公开导出的函数。

        如下,可以看到其第二行,win32k.sys系统服务表已经可见。

        kd> dd KeServiceDescriptorTableShadow
          83f75a00  83e89d9c 00000000 00000191 83e8a3e4
          83f75a10  83b66000 00000000 00000339 83b6702c
          83f75a20  00000000 00000000 83f75a24 00000340
          83f75a30  00000340 855e8440 00000007 00000000

      三、验证ReadMemory真正的内核实现部分

        我们在这篇《Windows系统调用中API的三环部分(依据分析重写ReadProcessMemory函数)》中曾提到过直接使用快速调用来摒弃R3层层封装的API,其中给eax一个函数号,现在我们来实战刨析一下。

      mov eax, 0x115
      mov edx, 0X7FFE0300

        如下,系统描述符的数据结构,其依次分别为

        分享图片

        其依次分别为 ServiceTable 83e89d9c,Count 00000000,ServiceLimit  00000191,ServiceTable 83e8a3e4 

        使用Windbg来查看其115h序号的函数地址 115h*4 + 83e89d9c (ServiceTable)

        得到函数地址为 8406c82c

        kd> dd 115h*4 + 83e89d9c
          83e8a1f0  8406c82c 840feb46 83fb488c 83fb6128 

        再对此进行反汇编可得

        kd > u 8406c82c   
                      nt!NtReadVirtualMemory:
                      8406c82c 6a18            push    18h
                      8406c82e 68282ae683      push    offset nt!? ? ::FNODOBFM::`string‘+0x3ea8 (83e62a28)
                      8406c833 e870e3e1ff      call    nt!_SEH_prolog4(83e8aba8)
                      8406c838 648b3d24010000  mov     edi, dword ptr fs : [124h]
                      8406c83f 8a873a010000    mov     al, byte ptr[edi + 13Ah]
                      8406c845 8845e4          mov     byte ptr[ebp - 1Ch], al
                      8406c848 8b7514          mov     esi, dword ptr[ebp + 14h]
                      8406c84b 84c0            test    al, al

        之后,我们查看该nt!NtReadVirtualMemory函数的参数个数

        kd > db 83e8a3e4 + 115
                      83e8a4f9  14 08 04 04 14 04 10 08 - 0c 04 14 18 08 08 08 0c
                      83e8a509  0c 08 10 14 08 08 0c 08 - 0c 0c 04 08 08 08 08 08  
                      83e8a519  08 0c 0c 24 00 08 08 08 - 0c 04 08 04 08 10 08 04  

        

      四、通过修改SSDT表增添系统服务函数

        我们在 Windows系统调用中API的三环部分(依据分析重写ReadProcessMemory函数) 调用的是 115h 号函数。

        现在,我们将该函数地址放到 191 号函数处(之前一共有191个函数,占据0-190位)。

        修改思路:

        1)将 nt!NtReadVirtualMemory 函数地址 8406c82c 放到 191号处(83e89d9 + 191h*4)

          kd> ed 83e89d9 + 191h*4 8406c82c 

        2)  增大 服务表最大个数。 (因为我们上一节分析其反汇编代码的时候,发现其会进行最大个数的判断)

          kd> ed 83f75a00+8 192

        3)  修改参数个数表中对应的191号参数个数。(我们之前查阅过其为 14,以字节为单位)

          kd> eb 83e8a3e4+191 14

        4)  之后,我们运行下列代码。其与《Windows系统调用中API的三环部分(依据分析重写ReadProcessMemory函数)》唯一的不同调用函数号为192,最终效果完全一样。

       1 #include "pch.h"
       2 #include <iostream>
       3 #include <algorithm>
       4 #include <Windows.h>
       5 void  ReadMemory(HANDLE hProcess, PVOID pAddr, PVOID pBuffer, DWORD dwSize, DWORD  *dwSizeRet)
       6 {
       7 
       8     _asm
       9     {
      10         lea     eax, [ebp + 0x14]
      11         push    eax
      12         push[ebp + 0x14]
      13         push[ebp + 0x10]
      14         push[ebp + 0xc]
      15         push[ebp + 8]
      16         sub esp, 4
      17         mov eax, 0x192  // 注意:修改的是这里
      18         mov edx, 0X7FFE0300   //sysenter不能直接调用,我间接call的
      19         CALL DWORD PTR[EDX]
      20         add esp, 24
      21 
      22     }
      23 }
      24 int main()
      25 {
      26     HANDLE hProcess = 0;
      27     int t = 123;
      28     DWORD pBuffer;
      29     //hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0,a);
      30     ReadMemory((HANDLE)-1, (PVOID)&t, &pBuffer, sizeof(int), 0);
      31     printf("%X\n", pBuffer);
      32     ReadProcessMemory((HANDLE)-1, &t, &pBuffer, sizeof(int), 0);
      33     printf("%X\n", pBuffer);
      34 
      35     getchar();
      36     return 0;
      37 }
      相关文章
      相关标签/搜索
      三十码期期必中√资料2020年香港马会最快手机报码开奖结果现场直播历史查询记录二四六天天好彩免费资料大全网 赤壁市| 西畴县| 临泽县| 南充市| 天祝| 湘潭市| 达日县| 育儿| 中阳县| 广元市| 托克逊县| 卫辉市| 湘潭县| 双桥区| 南康市| 绩溪县| 扬州市| 舟曲县| 西贡区| 东乡县| 临沭县| 金塔县| 黄大仙区| 绍兴县| 九龙城区| 和顺县| 松潘县| 霞浦县| 安达市| 遂平县| 伊春市| 五指山市| 宣恩县| 横山县| 普兰店市| 叙永县| 理塘县| 定结县| 通海县| 潼南县| 南汇区| 清水河县| 南通市| 酒泉市| 绩溪县| 晋中市| 汝城县| 大渡口区| 卢湾区| 南昌市| 英超| 汤阴县| 揭阳市| 尉氏县| 太仆寺旗| 沈阳市| 蒙自县| 金坛市| 惠水县| 普兰县| 乳源| 神农架林区| 资兴市| 隆安县| 饶平县| 大冶市| 庆安县| 六枝特区| 拜城县| 吉安县| 吴桥县| 四平市| 舒城县| 喀什市| 静海县| 临朐县| 威信县| 大庆市| 永和县| 彭水| 勃利县| 安多县| 偏关县| 当阳市| 勃利县| 赤水市| 西盟| 固始县| 双牌县| 田东县| 威远县| 即墨市| 前郭尔| 乡城县| 三河市| 南召县| 革吉县| 肇源县| 万宁市| 绥德县| 鄂托克旗| 定结县| 精河县| 加查县| 鄢陵县| 铁力市| 嘉义市| 鹤山市| 乐清市| 临沧市| 莆田市| 遵义市| 昔阳县| 郧西县| 揭阳市| 专栏| 兴国县| 启东市| 孝义市| 昭苏县| 双峰县| 塘沽区| 长沙县| 肃南| 枝江市| 合作市| 宁蒗| 望谟县| 通州区| 邢台市| 安图县| 乐东| 上饶市| 金平| 如东县| 同仁县| 将乐县| 湘阴县| 若羌县| 平阴县| 林芝县| 囊谦县| 宕昌县| 射洪县| 柘城县| 察哈| 阿拉善盟| 自治县| 东海县| 格尔木市| 渭源县| 鞍山市| 梅州市| 美姑县| 尉犁县| 建湖县| 丹阳市| 石城县| 台安县| 务川| 历史| 林口县| 马边| 温泉县| 马山县| 许昌市| 离岛区| 铅山县| 西华县| 石门县| 平昌县| 桂阳县| 彭州市| 咸阳市| 临漳县| 育儿| 赤城县| 林芝县| 绥滨县| 清丰县| 防城港市| 紫金县| 澄江县| 黔西县| 泰兴市| 垦利县| 鄂尔多斯市| 大关县| 宁城县| 余干县| 晋中市| 宝兴县| 海南省| 玉林市| 仪征市| 黔西| 玉龙| 靖远县| 靖安县| 集贤县| 焦作市| 龙胜| 洪雅县| 奇台县| 万全县| 满洲里市| 天镇县| 灵石县| 礼泉县| 崇文区| 宝丰县| 基隆市| 泰和县| 旺苍县| 馆陶县| 株洲县| 黄大仙区| 辽宁省| 信宜市| 华亭县| 周至县| 林周县| 望谟县| 绵竹市| 固安县| 沁水县| 璧山县| 鹤岗市| 邛崃市| 青州市| 聂拉木县| 廊坊市| 莲花县| 陆川县| 揭东县| 旬阳县| 武威市| 大荔县| 新干县| 东丽区| 荥经县| 衡水市| 大化| 手机| 江山市| 广安市| 兰州市| 阜阳市| 南开区| 利辛县| 武陟县| 丹阳市| 浠水县| 桂阳县| 驻马店市| 泗洪县| 卢湾区| 张家川| 民和| 镇原县| 稻城县| 东光县| 沂源县| 田林县| 隆德县| 富锦市| 鹤岗市| 绥芬河市| 克东县| 广灵县| 云梦县| 菏泽市| 武陟县| 介休市| 正定县| 澄江县| 繁峙县| 边坝县| 阿城市| 合山市| 太保市| 磴口县| 庆安县| 新郑市| 青海省| 都兰县| 靖边县| 元谋县| 米泉市| 钟山县| 抚州市| 汶上县| 乌拉特前旗| 河西区| 宁南县| 准格尔旗| 湖口县| 宁南县| 高清| 阳原县| 突泉县| 长海县| 克什克腾旗| 肥乡县| 夏河县| 那曲县| 八宿县| 雷州市| 铁力市| 铜川市| 邳州市| 马关县| 上栗县| 自贡市| 云林县| 涞水县| 江源县| 湖州市| 昌黎县| 维西| 兰考县| 柳林县| 泉州市| 大同市| 南雄市| 朝阳区| 吴川市| 新乐市| 新乡县| 古蔺县| 普格县| 新沂市| 宝山区| 万州区| 五家渠市| 渭南市| 城固县| 合水县| 东明县| 买车| 浦北县| 云浮市| 玉树县| 老河口市| 始兴县| 新源县| 沧州市| 嘉定区| 饶阳县| 民乐县| 靖边县| 夏津县| 白城市| 津南区| 庆阳市| 潍坊市| 城市| 承德县| 丹棱县| 巴彦淖尔市| 宣威市| 土默特左旗| 新田县| 光山县| 若尔盖县| 盐津县| 昌江| 石阡县| 荣昌县| 巴中市| 安阳市| 木兰县| 尼勒克县| 浏阳市| 平顶山市| 镇原县| 佳木斯市| 凌云县| 石楼县| 五河县| 恩施市| 布尔津县| 读书| 普定县| 道孚县| 马山县| 炉霍县| 南城县| 洪泽县| 靖宇县| 华池县| 湖北省| 林甸县| 保山市| 武邑县| 金门县| 揭东县| 西昌市| 尼勒克县| 高台县| 普定县| 永寿县| 南华县| 曲阜市| 汾西县| 绿春县| 清丰县| 娱乐| 额尔古纳市| 洛浦县| 泰和县| 永年县| 万年县| 桂林市| 宁陕县| 丹凤县| 威信县| 蓝田县| 康马县| 镇康县| 洱源县| 江永县| 瑞金市| 赤峰市| 石阡县| 长治县| 怀宁县| 子洲县| 忻州市| 黑水县| 木里| 门源| 广宁县| 榆林市| 工布江达县| 连南| 皋兰县| 绥德县| 合川市| 肃宁县| 巧家县| 平度市| 临沧市| 临城县| 禹城市| 彭山县| 中卫市| 阿克苏市| 海淀区| 高阳县| 阳原县| 虎林市| 禄劝| 东方市| 屏南县| 东台市| 哈巴河县| 汝南县| 鹿泉市| 黄梅县| 台湾省| 芦溪县| 丹棱县| 山阳县| 育儿| 手机| 隆化县| 应用必备| 穆棱市| 乐清市| 盘锦市| 阜宁县| 乌兰察布市| 佳木斯市| 葵青区| 大渡口区| 丹阳市| 娄烦县| 兴义市| 呼和浩特市| 南木林县| 朝阳县| 黄梅县| 泾川县| 文安县| 微博| 壤塘县| 新兴县| 开封市| 漠河县| 德惠市| 周至县| 会东县| 浏阳市| 湟源县| 洛阳市| 英吉沙县| 翼城县| 霞浦县| 庄浪县| 民丰县| 全南县| 简阳市| 理塘县| 库尔勒市| 临泽县| 雅安市| 宣城市| 巴彦县| 沽源县| 新津县| 淮安市| 华亭县| 潮安县| 定襄县| 荣昌县| 景宁| 吉隆县| 娱乐| 承德县| 沁源县| 旌德县| 六安市| 扬中市| 长岭县| 广灵县| 达孜县| 长汀县| 武清区| 崇信县| 江永县| 沙河市| 仪陇县| 卓资县| 四川省| 清水县| 库尔勒市| 平定县| 时尚| 施甸县| 越西县| 洛宁县| 龙岩市| 枣强县| 达尔| 肥城市| 永济市| 宁明县| 苗栗县| 青岛市| 玛多县| 靖江市| 增城市| 大新县| 荣昌县| 马尔康县| 罗定市| 安化县| 新田县| 安丘市| 利津县| 宝清县| 黄龙县| 鹤壁市| 马鞍山市| 绵阳市| 栾城县| 东海县| 蓬莱市| 鄄城县| 普宁市| 福泉市| 德昌县| 衡阳县| 开原市| 花莲市| 丘北县| 邵阳县| 木兰县| 临潭县| 株洲县| 兰溪市| 尖扎县| 阜宁县| 和平县| 渭南市| 昭苏县| 扎鲁特旗| 长垣县| 闵行区| 海门市| 桦甸市| 绩溪县| 商河县| 宜春市| 社会| 临沧市| 弋阳县| 高雄市| 信阳市| 黄骅市| 遂宁市| 新竹县| 青浦区| 巴东县| 黄陵县| 唐海县| 三都| 榆中县| 牙克石市| 肥东县| 龙井市| 宁津县| 高唐县| 正镶白旗| http://m.jx1870estizatev.fun http://www.jx1870judgev.fun http://wap.jx1870interviewv.fun http://www.jx1870inventoryv.fun http://m.jx1870fieldv.fun http://www.jx1870interestv.fun http://wap.hz0j3r1vo.fun http://m.jx1870launchv.fun http://wap.jx1870givev.fun http://jx1870flagv.fun http://wap.hz0j3r1vo.fun http://m.jx1870labelv.fun http://www.hz0j4r5vo.fun http://wap.jx1870foxv.fun http://jx1870firzv.fun http://m.jx1870increasev.fun http://wap.jx1870estizatev.fun http://www.jx1870enterv.fun