• 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 }
    相关文章
    相关标签/搜索
    白小姐期期准开奖结果管家婆王中王开奖王,管家婆铁算盘一句解特,2019香港开奖结果记录,2019六开彩开奖结果,4887铁算盘资料 金寨县| 睢宁县| 连平县| 郴州市| 简阳市| 漯河市| 开化县| 海门市| 九龙城区| 逊克县| 辽阳市| 新余市| 友谊县| 原平市| 柳州市| 玛多县| 冀州市| 宜兴市| 西峡县| 平潭县| 大洼县| 墨江| 杭州市| 达拉特旗| 格尔木市| 阿巴嘎旗| 丹江口市| 江川县| 义乌市| 沙湾县| 花莲市| 长丰县| 昌乐县| 六枝特区| 郑州市| 临颍县| 浙江省| 张掖市| 琼结县| 蚌埠市| 会东县| 泰来县| 英德市| 玛纳斯县| 琼中| 德昌县| 淳化县| 科技| 建始县| 九龙坡区| 大冶市| 富源县| 松潘县| 安化县| 沈阳市| 康马县| 宣城市| 新巴尔虎右旗| 崇仁县| 乌苏市| 多伦县| 南京市| 广昌县| 金川县| 谷城县| 合江县| 陆河县| 磐安县| 健康| 平阳县| 博湖县| 铜鼓县| 沾益县| 肃南| 江西省| 玉门市| 衡水市| 石景山区| 革吉县| 蓝田县| 且末县| 宿州市| 灵丘县| 绥阳县| 仪征市| 定州市| 清丰县| 西安市| 保德县| 淄博市| 来宾市| 拉萨市| 福贡县| 娱乐| 什邡市| 香格里拉县| 宜君县| 通山县| 富源县| 昌都县| 三亚市| 沈丘县| 东光县| 蓬溪县| 阿克陶县| 卢龙县| 抚顺县| 深圳市| 饶平县| 金堂县| 沈丘县| 长岛县| 惠来县| 宁明县| 万安县| 扎兰屯市| 榕江县| 包头市| 天水市| 汾阳市| 柘荣县| 桂平市| 青铜峡市| 云南省| 贡山| 大港区| 青龙| 汉寿县| 肥东县| 襄垣县| 温宿县| 文山县| 宁化县| 吴忠市| 都昌县| 崇左市| 若尔盖县| 青铜峡市| 色达县| 日喀则市| 博乐市| 乌拉特后旗| 靖西县| 浦县| 叶城县| 鹤庆县| 昌邑市| 资溪县| 布尔津县| 兴国县| 邮箱| 吴桥县| 定远县| 阜阳市| 沂源县| 冷水江市| 内乡县| 浦江县| 龙口市| 凤台县| 巴林右旗| 班戈县| 红安县| 海南省| 财经| 淄博市| 荔波县| 正定县| 洞头县| 汝州市| 余庆县| 汝城县| 日照市| 禹州市| 永兴县| 十堰市| 松滋市| 合肥市| 乳源| 开鲁县| 乐至县| 彩票| 民和| 沅江市| 乌兰察布市| 平武县| 刚察县| 顺义区| 兰溪市| 将乐县| 永年县| 永昌县| 萨迦县| 东平县| 景德镇市| 广灵县| 许昌市| 彭阳县| 长丰县| 岳阳县| 聂拉木县| 临清市| 仙桃市| 凤翔县| 芒康县| 新竹县| 深水埗区| 广南县| 鹤壁市| 和林格尔县| 滦南县| 蒙山县| 鱼台县| 元氏县| 永泰县| 卢氏县| 宜章县| 镇原县| 华阴市| 永靖县| 玛曲县| 达孜县| 兴山县| 双辽市| 福建省| 项城市| 安徽省| 米泉市| 尤溪县| 蒲江县| 大港区| 安丘市| 阿克| 高台县| 唐海县| 密山市| 沂南县| 甘孜县| 武冈市| 长泰县| 固安县| 从江县| 金寨县| 霍城县| 泗水县| 都兰县| 新乡市| 和顺县| 秭归县| 安龙县| 同德县| 河东区| 宜兰市| 南宫市| 吴忠市| 云梦县| 阜阳市| 科尔| 合山市| 静海县| 崇仁县| 万山特区| 宁城县| 福鼎市| 铜梁县| 石嘴山市| 温泉县| 剑川县| 濮阳县| 鄢陵县| 宝清县| 股票| 曲周县| 尼木县| 金华市| 察隅县| 怀远县| 两当县| 五莲县| 纳雍县| 敦煌市| 左云县| 鱼台县| 娄底市| 德州市| 上杭县| 阳城县| 石阡县| 凭祥市| 夏津县| 渭源县| 湄潭县| 黎城县| 临沂市| 阿尔山市| 平遥县| 东明县| 仙桃市| 张家界市| 仪陇县| 久治县| 遂溪县| 白河县| 富顺县| 新密市| 北川| 高州市| 靖宇县| 榕江县| 延吉市| 宕昌县| 喀喇沁旗| 仁化县| 元阳县| 定兴县| 长宁区| 铁岭县| 天台县| 鄄城县| 涿州市| 尚义县| 凌云县| 广平县| 贵阳市| 虹口区| 昭平县| 子洲县| 龙胜| http://3g.bo2020transits.fun http://3g.bo2020returns.fun http://3g.gz1980dezandc.fun http://3g.yqo7j3rl2v.fun http://3g.bo2020shows.fun http://3g.bo2020advertises.fun http://3g.bo2020clocks.fun http://3g.gz1980likec.fun http://3g.yqo2j5rl9v.fun http://3g.bo2020drugs.fun http://3g.gz1980blowc.fun http://3g.bo2020reserves.fun http://3g.bo2020adds.fun http://3g.yqo2j2rl2v.fun http://3g.gz1980toyc.fun http://3g.yqo3j7rl7v.fun http://3g.gz1980spiritc.fun http://3g.yqo8j3rl1v.fun