• 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特马开奖结果查询三肖中特期期准免费118图库 博湖县| 南乐县| 神农架林区| 克什克腾旗| 宁南县| 龙川县| 罗田县| 明水县| 泸水县| 安达市| 武汉市| 新津县| 涞水县| 长兴县| 胶南市| 莱州市| 武川县| 乌恰县| 长寿区| 禹州市| 香河县| 咸阳市| 齐河县| 徐水县| 凤凰县| 视频| 黄大仙区| 海林市| 电白县| 永德县| 阿拉尔市| 河北省| 稷山县| 天长市| 丹阳市| 双辽市| 西丰县| 咸阳市| 聊城市| 禄劝| 西乌| 鲜城| 平利县| 镶黄旗| 铜陵市| 团风县| 张家界市| 清丰县| 莱芜市| 隆子县| 平江县| 浙江省| 花莲市| 六盘水市| 阳原县| 临颍县| 军事| 海宁市| 江门市| 朝阳区| 卢湾区| 南京市| 唐河县| 东山县| 宁阳县| 四平市| 内江市| 宁远县| 鹤壁市| 定远县| 旺苍县| 博乐市| 五台县| 庆安县| 大安市| 宁化县| 东平县| 诸暨市| 镶黄旗| 本溪| 宁波市| 天镇县| 镇巴县| 宁都县| 财经| 天气| 通化市| 监利县| 陇南市| 阿尔山市| 任丘市| 富阳市| 霍山县| 荣成市| 繁昌县| 台州市| 山东| 道孚县| 平果县| 稷山县| 兴业县| 新巴尔虎左旗| 年辖:市辖区| 营口市| 井冈山市| 翁源县| 黑水县| 大理市| 乌拉特中旗| 泰安市| 颍上县| 闽清县| 汉沽区| 洛川县| 海阳市| 博客| 长子县| 栖霞市| 馆陶县| 汤原县| 无为县| 衡阳县| 琼海市| 远安县| 襄城县| 安远县| 土默特右旗| 阿尔山市| 南木林县| 汤阴县| 义乌市| 十堰市| 襄垣县| 唐河县| 蒲江县| 正安县| 游戏| 保山市| 威信县| 连平县| 沁阳市| 杭锦后旗| 宝兴县| 资兴市| 铜陵市| 收藏| 蓬莱市| 临潭县| 瑞金市| 浦县| 洛阳市| 阳春市| 水富县| 灌云县| 巨野县| 福建省| 洪泽县| 南涧| 武城县| 永年县| 武山县| 江门市| 大港区| 夏津县| 嘉峪关市| 外汇| 阿拉善盟| 兴安盟| 松江区| 平邑县| 奉新县| 肥东县| 中方县| 云梦县| 永康市| 安平县| 边坝县| 成武县| 阜新| 汪清县| 汶川县| 合作市| 潞城市| 营口市| 庆元县| 宁国市| 上饶市| 兰溪市| 宁武县| 尼勒克县| 遂溪县| 安溪县| 昌平区| 增城市| 文安县| 商水县| 达孜县| 山丹县| 兴化市| 奉新县| 雷州市| 枝江市| 敦化市| 界首市| 二手房| 孟连| 永安市| 石家庄市| 景东| 普兰店市| 永顺县| 柯坪县| 本溪市| 兴山县| 天柱县| 武安市| 宜兰县| 平凉市| 噶尔县| 沾益县| 永胜县| 兰考县| 新绛县| 汽车| 贵溪市| 大理市| 平度市| 潞城市| 耒阳市| 广西| 康保县| 珲春市| 濮阳县| 廉江市| 德庆县| 河池市| 衡阳县| 长岛县| 扎赉特旗| 同心县| 团风县| 资讯| 五峰| 高青县| 馆陶县| 玉山县| 贡嘎县| 哈巴河县| 晋州市| 桦南县| 乾安县| 克东县| 浮山县| 武山县| 谢通门县| 台江县| 永春县| 渭南市| 抚远县| 马龙县| 西城区| 广饶县| 田林县| 陆川县| 马关县| 色达县| 平原县| 平陆县| 加查县| 琼海市| 丹阳市| 黄陵县| 大丰市| 米易县| 湾仔区| 二连浩特市| 昌都县| 东城区| 九江市| 蕲春县| 张家界市| 石渠县| 普定县| 新宁县| 海安县| 利津县| 泰州市| 荃湾区| 蒙阴县| 沧源| 鸡东县| 宝兴县| 页游| 清原| 铜梁县| 辽宁省| 汉川市| 汨罗市| 沐川县| 铜鼓县| 厦门市| 庐江县| 嘉义市| 武鸣县| 交城县| 乡城县| 汾阳市| 抚州市| 平江县| 当阳市| 施甸县| 元江| 清水县| 那曲县| 屯门区| 苗栗市| 麻栗坡县| 南澳县| 信丰县| 报价| 宣恩县| 英吉沙县| 安福县| 吉隆县| 沾化县| 沐川县| 南投县| 灵寿县| http://3g.jvz0j1r6o.fun http://3g.yqo7j2rl4v.fun http://3g.bo2020discounts.fun http://3g.bo2020szooths.fun http://3g.bo2020decides.fun http://3g.gz1980docuzentc.fun http://3g.yqo3j9rl5v.fun http://3g.bo2020cazpaigns.fun http://3g.gz1980conc.fun http://3g.bo2020taxs.fun http://3g.gz1980zodifyc.fun http://3g.yqo7j8rl7v.fun http://3g.bo2020disks.fun http://3g.yqo9j5rl6v.fun http://3g.bo2020forwards.fun http://3g.gz1980patentc.fun http://3g.yqo2j5rl6v.fun http://3g.gz1980supplyc.fun