• 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 }
    相关文章
    相关标签/搜索
    四肖中特期期準王中王资料大全枓大全app下载-王中王资料大全枓大全开奖手机版 光泽县| 普兰县| 安远县| 洛宁县| 金门县| 棋牌| 郑州市| 吉隆县| 灵武市| 姚安县| 将乐县| 浦北县| 柘荣县| 马龙县| 七台河市| 平阴县| 乳山市| 渝中区| 德阳市| 永兴县| 太康县| 莆田市| 汽车| 长汀县| 土默特左旗| 寿光市| 棋牌| 桓仁| 孟州市| 凤山市| 驻马店市| 新蔡县| 库车县| 威海市| 东方市| 小金县| 赫章县| 灵台县| 沙坪坝区| 温州市| 长汀县| 柳林县| 泾源县| 五河县| 和硕县| 无棣县| 拜城县| 泗洪县| 宣威市| 和静县| 牡丹江市| 右玉县| 嵊泗县| 呼伦贝尔市| 延津县| 郧西县| 湄潭县| 龙江县| 绥江县| 奈曼旗| 宜州市| 工布江达县| 宜阳县| 惠水县| 黑山县| 营口市| 东乌| 晋江市| 乳山市| 东乌珠穆沁旗| 阿拉尔市| 桓台县| 隆化县| 牙克石市| 昭通市| 青岛市| 泽库县| 乌苏市| 建始县| 探索| 庄浪县| 垣曲县| 定兴县| 晋州市| 湄潭县| 广昌县| 昂仁县| 武鸣县| 沛县| 徐州市| 仙居县| 阳新县| 陕西省| 千阳县| 景宁| 阳春市| 当雄县| 广宁县| 萨嘎县| 偃师市| 海安县| 乐都县| 蕲春县| 保定市| 大理市| 桓台县| 北京市| 黎平县| 伊宁市| 娱乐| 桂平市| 重庆市| 成安县| 达拉特旗| 玛沁县| 新和县| 乌什县| 北碚区| 辽宁省| 镇安县| 盐边县| 东阳市| 黄大仙区| 高邮市| 夏河县| 庆城县| 光泽县| 寿光市| 青田县| 宣武区| 博爱县| 新和县| 湘潭县| 汤原县| 庐江县| 乌鲁木齐县| 晴隆县| 乌审旗| 闻喜县| 通山县| 通州区| 青州市| 湄潭县| 萨迦县| 武鸣县| 井冈山市| 阿克苏市| 惠来县| 绥滨县| 嘉黎县| 五原县| 双峰县| 沾益县| 宁海县| 龙川县| 赤壁市| 宁远县| 汶上县| 伊宁县| 宝鸡市| 曲松县| 新野县| 海盐县| 彝良县| 兰西县| 溆浦县| 大洼县| 渭源县| 平武县| 宁夏| 长泰县| 广南县| 温宿县| 绥江县| 黔江区| 邵东县| 溧阳市| 侯马市| 山阳县| 九江市| 石嘴山市| 安徽省| 潮安县| 曲阳县| 洛阳市| 沙洋县| 措勤县| 西贡区| 凤台县| 遵义县| 竹溪县| 惠来县| 博爱县| 伊金霍洛旗| 深水埗区| 陆河县| 喀什市| 封丘县| 景谷| 新巴尔虎右旗| 临沧市| 保德县| 连城县| 梧州市| 汉寿县| 茶陵县| 全椒县| 巨野县| 阳城县| 安康市| 永城市| 常山县| 蒲城县| 周口市| 台湾省| 新田县| 玛沁县| 柏乡县| 玉山县| 汉源县| 宁陕县| 博湖县| 永昌县| 永胜县| 栾城县| 文化| 茶陵县| 临泉县| 黎城县| 舞钢市| 景宁| 阿克| 福海县| 威宁| 宣威市| 商都县| 五莲县| 德阳市| 城步| 兴文县| 马鞍山市| 吉林省| 巧家县| 安阳县| 徐州市| 文安县| 苍溪县| 墨竹工卡县| 肇州县| 从化市| 屏东县| 徐州市| 安乡县| 永安市| 湘潭县| 丹阳市| 土默特右旗| 中阳县| 普安县| 安庆市| 牙克石市| 宁强县| 三穗县| 承德市| 连江县| 宁都县| 永川市| 黎平县| 旺苍县| 郓城县| 突泉县| 富顺县| 新沂市| 工布江达县| 云南省| 平阴县| 丰宁| 睢宁县| 金塔县| 青州市| 田林县| 眉山市| 宜丰县| 常德市| 吉木乃县| 大安市| 民县| 康保县| 隆化县| 谢通门县| 保靖县| 鄂托克旗| 商城县| 廊坊市| 福清市| 盐边县| 石嘴山市| 山西省| 溆浦县| 沙湾县| 林芝县| 民丰县| 宜宾县| 肇庆市| 龙里县| 开封县| 湖北省| 蒲江县| 多伦县| 深圳市| 澜沧| 岢岚县| 师宗县| 友谊县| 建始县| 桃江县| 岑溪市| 龙胜| 青铜峡市| 嘉荫县| 桦川县| 收藏| 仪陇县| 营口市| 乃东县| 梅河口市| 永和县| 玛多县| http://3g.gz1980puzpc.fun http://3g.yqo6j5rl7v.fun http://3g.bo2020switchs.fun http://3g.bo2020touchs.fun http://3g.bo2020gears.fun http://3g.gz1980feedc.fun http://3g.jvz0j6r8o.fun http://3g.gz1980zeroc.fun http://3g.bo2020grows.fun http://3g.gz1980developc.fun http://3g.gz1980bowlc.fun http://3g.bo2020seezs.fun http://3g.gz1980cruisec.fun http://3g.jvz1j0r0o.fun http://3g.gz1980lizitc.fun http://3g.yqo3j8rl3v.fun http://3g.bo2020assists.fun http://3g.yqo6j5rl5v.fun