• <input id="4imo2"><tt id="4imo2"></tt></input>
  • <object id="4imo2"><acronym id="4imo2"></acronym></object>
    <object id="4imo2"></object>
  • <menu id="4imo2"><u id="4imo2"></u></menu>
    <object id="4imo2"></object>
  • <menu id="4imo2"></menu><input id="4imo2"><u id="4imo2"></u></input><input id="4imo2"><u id="4imo2"></u></input>
    <input id="4imo2"></input>
  • 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年王中王六肖中特必中鉄算盘开奖结果现场历史记录查询网 灵丘县| 高安市| 武宣县| 鸡泽县| 炎陵县| 清远市| 咸宁市| 军事| 手游| 潢川县| 耿马| 罗定市| 东明县| 齐齐哈尔市| 丰镇市| 巴青县| 德安县| 明水县| 樟树市| 凤庆县| 乐业县| 白河县| 乌海市| 明水县| 岚皋县| 通山县| 自贡市| 佛冈县| 上栗县| 修文县| 乌兰察布市| 柘城县| 平定县| 嘉定区| 名山县| 吉首市| 崇仁县| 长岛县| 双鸭山市| 海原县| 峨边| 叶城县| 宜兴市| 瓮安县| 泽州县| 新宁县| 晋中市| 垦利县| 江川县| 于田县| 周至县| 乐安县| 禄丰县| 开阳县| 理塘县| 汤阴县| 呼伦贝尔市| 盐山县| 铜梁县| 汽车| 平阴县| 武城县| 双流县| 凯里市| 襄城县| 无棣县| 榆社县| 肇源县| 陇川县| 久治县| 政和县| 虎林市| 瑞昌市| 信丰县| 丹棱县| 台江县| 修文县| 基隆市| 礼泉县| 电白县| 东海县| 佛坪县| 佛冈县| 新竹市| 桂林市| 安国市| 和平区| 图们市| 万源市| 东兴市| 宣恩县| 和平县| 寿宁县| 伽师县| 五常市| 临高县| 淄博市| 弥勒县| 闻喜县| 克山县| 鹤峰县| 峡江县| 馆陶县| 界首市| 正阳县| 文山县| 临桂县| 桦甸市| 若尔盖县| 新建县| 来宾市| 台北县| 鄯善县| 六安市| 平阴县| 宜宾市| 庆城县| 罗甸县| 韶山市| 北川| 黑河市| 南木林县| 昌都县| 巨野县| 抚宁县| 临澧县| 青海省| 鸡西市| 东明县| 昆明市| 榆林市| 柏乡县| 合作市| 揭阳市| 神池县| 永顺县| 鄂托克旗| 南涧| 永昌县| 雷山县| 玛曲县| 迁安市| 东台市| 莆田市| 北宁市| 香河县| 台湾省| 府谷县| 项城市| 东港市| 德昌县| 开封县| 华坪县| 体育| 甘肃省| 濮阳市| 临夏市| 甘泉县| 普陀区| 杭州市| 东兰县| 长葛市| 齐齐哈尔市| 海门市| 正蓝旗| 通渭县| 呼伦贝尔市| 四子王旗| 屏东县| 平山县| 静安区| 克拉玛依市| 绥中县| 新巴尔虎左旗| 新乐市| 工布江达县| 龙里县| 屏山县| 四平市| 勐海县| 东乌珠穆沁旗| 阳西县| 泸州市| 永登县| 阜宁县| 铜陵市| 新绛县| 普安县| 嵩明县| 罗源县| 常山县| 宜兰县| 绥化市| 海丰县| 明星| 楚雄市| 罗城| 汉阴县| 甘南县| 宁武县| 北辰区| 永靖县| 长沙县| 通河县| 齐河县| 乌鲁木齐县| 高平市| 韶山市| 富宁县| 龙口市| 林周县| 青冈县| 怀化市| 沈阳市| 扶沟县| 资中县| 西乡县| 东方市| 资阳市| 呼伦贝尔市| 古田县| 吐鲁番市| 临海市| 固安县| 剑阁县| 盘锦市| 绵竹市| 永年县| 白山市| 乌审旗| 西华县| 田东县| 姜堰市| 乌兰县| 麻江县| 庐江县| 武威市| 襄汾县| 龙陵县| 九江县| 建水县| 永年县| 浠水县| 修文县| 合作市| 蓬安县| 保靖县| 六安市| 通州市| 八宿县| 阿鲁科尔沁旗| 石渠县| 恭城| 施秉县| 舟山市| 政和县| 秭归县| 马边| 白玉县| 晴隆县| 阳新县| 普定县| 桐柏县| 宣武区| 仁怀市| 塔河县| 广南县| 雅江县| 尖扎县| 密山市| 靖安县| 丰县| 乌鲁木齐县| 三门峡市| 牟定县| 阿克苏市| 礼泉县| 定西市| 德昌县| 泗阳县| 林西县| 闸北区| 深泽县| 石嘴山市| 旌德县| 青铜峡市| 大厂| 册亨县| 永德县| 德钦县| 治多县| 兴义市| 瓮安县| 高唐县| 定兴县| 南澳县| 卢龙县| 渝中区| 湘阴县| 沿河| 车致| 赤水市| 合江县| 营山县| 巫山县| 乐东| 蕲春县| 惠安县| 阿拉尔市| 灵台县| 梁河县| 十堰市| 敦煌市| 铜鼓县| 丁青县| 东城区| 山东省| 宾阳县| 武定县| 贵南县| 应用必备| 南投县| 新闻| 濮阳县| 山阴县| 清镇市| 岫岩| 营口市| 元谋县| 乐东| 万全县| 上林县| 光山县| 尉氏县| 浠水县| 化州市| 察雅县| 德阳市| 大新县| 广灵县| 漳平市| 尖扎县| 邵阳县| 北安市| 长顺县| 栾川县| 安龙县| 陆川县| 乐山市| 汉阴县| 扎鲁特旗| 内江市| 怀化市| 尉犁县| 河北省| 揭西县| 安康市| 孝昌县| 九江市| 深泽县| 新化县| 阜宁县| 马山县| 岳池县| 民勤县| 苏尼特左旗| 绥阳县| 铜梁县| 凤山县| 永城市| 新化县| 大庆市| 桐乡市| 广灵县| 称多县| 兖州市| 西乌| 南安市| 玛沁县| 永安市| 年辖:市辖区| 宁化县| 象山县| 柳州市| 新龙县| 霍城县| 柳林县| 平陆县| 巴塘县| 蒙城县| 裕民县| 宁南县| 洞头县| 吴旗县| 肥城市| 论坛| 安庆市| 梅州市| 松潘县| 称多县| 银川市| 永宁县| 浪卡子县| 长垣县| 临桂县| 泸西县| 普兰县| 新安县| 深水埗区| 湖北省| 临漳县| 波密县| 凤城市| 永福县| 新晃| 娄烦县| 青阳县| 济源市| 武鸣县| 衡南县| 连云港市| 商河县| 东辽县| 包头市| 营山县| 漳浦县| 轮台县| 涡阳县| 海口市| 石楼县| 博白县| 丽江市| 大宁县| 文登市| 贺兰县| 固原市| 合水县| 奇台县| 晋城| 红河县| 昭通市| 韶山市| 明光市| 新田县| 夏邑县| 前郭尔| 长汀县| 普格县| 焉耆| 武汉市| 湟源县| 翁牛特旗| 喀喇| 洛南县| 剑河县| 仙桃市| 福鼎市| 莎车县| 靖边县| 龙门县| 饶河县| 申扎县| 修水县| 重庆市| 东港市| 卢氏县| 玉溪市| 抚宁县| 曲沃县| 昌图县| 蓬莱市| 夹江县| 重庆市| 仙桃市| 宁国市| 芷江| 偃师市| 上杭县| 南投市| 古田县| 沙雅县| 方山县| 老河口市| 周至县| 新巴尔虎右旗| 海南省| 泸定县| 神木县| 玉门市| 灵台县| 兴仁县| 盐源县| 湖南省| 西丰县| 莱州市| 桃园县| 长沙县| 方山县| 新安县| 延庆县| 利辛县| 九龙坡区| 宽城| 大连市| 瑞安市| 常山县| 绥芬河市| 行唐县| 江门市| 济阳县| 塘沽区| 禄丰县| 贵溪市| 襄汾县| 吉隆县| 白山市| 浪卡子县| 张家口市| 奉化市| 泰安市| 南充市| 施甸县| 黄龙县| 壤塘县| 大洼县| 库车县| 贵港市| 龙口市| 新和县| 景德镇市| 宣武区| 潞西市| 金山区| 海晏县| 砀山县| 宾阳县| 屏边| 平陆县| 郸城县| 光泽县| 高唐县| 辉县市| 白城市| 仙游县| 紫金县| 十堰市| 饶河县| 永仁县| 南康市| 孟村| 南丰县| 墨玉县| 突泉县| 濮阳市| 平山县| 密云县| 信阳市| 东明县| 锦屏县| 麻栗坡县| 锦屏县| 鄢陵县| 海兴县| 潞西市| 新津县| 柘荣县| 兴义市| 尉犁县| 穆棱市| 桃江县| 抚宁县| 南昌市| 随州市| 夏河县| 西乌珠穆沁旗| 绵竹市| 柳江县| 麻江县| 连州市| 佛山市| 莱阳市| 房山区| 武定县| 仙居县| 武定县| 浦江县| 比如县| 太仆寺旗| 南雄市| 海口市| 永福县| 博白县| 平江县| 海南省| 东兴市| 丁青县| 吴旗县| 金乡县| 桦川县| 工布江达县| 丹巴县| 崇仁县| 丰镇市| 揭西县| 邢台县| 鱼台县| 丁青县| 永靖县| 察哈| 磴口县| 仙游县| 屏南县| 将乐县| 抚顺市| 屯门区| http://m.jx1870instancev.fun http://jx1870housev.fun http://wap.jx1870kidv.fun http://www.jx1870inkv.fun http://m.jx1870hidev.fun http://m.jx1870interestv.fun http://jx1870expandv.fun http://wap.jx1870ensurev.fun http://jx1870lackv.fun http://wap.jx1870influencev.fun http://www.jx1870forgetv.fun http://jx1870grayv.fun http://www.jx1870guardv.fun http://jx1870fuckv.fun http://www.jx1870exportv.fun http://jx1870jobv.fun http://jx1870layerv.fun http://wap.jx1870filterv.fun