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 最快开奖记录结果_小鱼儿玄机2站开奖 开奖结果 闸北区| 新竹市| 东至县| 临沭县| 扎兰屯市| 玉龙| 安溪县| 申扎县| 尉犁县| 朝阳县| 昌都县| 乌鲁木齐县| 凤山县| 双峰县| 郯城县| 闽侯县| 康马县| 汨罗市| 新巴尔虎右旗| 南京市| 永济市| 松溪县| 天门市| 苗栗市| 巫山县| 蕉岭县| 射阳县| 莒南县| 扎赉特旗| 遵化市| 铁岭市| 长治市| 富阳市| 泗洪县| 岳池县| 山阴县| 枣阳市| 黔江区| 台前县| 大化| 明溪县| 吉首市| 平罗县| 岳池县| 启东市| 资中县| 连云港市| 策勒县| 新乡市| 嘉义市| 虎林市| 博白县| 攀枝花市| 枣强县| 南阳市| 怀化市| 正阳县| 菏泽市| 望都县| 成都市| 开化县| 资溪县| 图木舒克市| 华宁县| 日土县| 天祝| 隆子县| 邮箱| 榆中县| 岱山县| 湖州市| 仙桃市| 淮北市| 如皋市| 门源| 靖远县| 苍梧县| 南开区| 武平县| 会东县| 周至县| 微博| 疏勒县| 木里| 卢氏县| 三穗县| 孝感市| 廉江市| 洞口县| 石河子市| 昔阳县| 洛川县| 安阳县| 崇礼县| 黑山县| 长沙县| 墨竹工卡县| 建瓯市| 沛县| 鄂州市| 五莲县| 苍南县| 桃园县| 乐昌市| 盱眙县| 灵璧县| 大厂| 武义县| 金秀| 黔南| 桑日县| 尚志市| 大渡口区| 抚顺县| 芜湖市| 昌图县| 阳原县| 仁怀市| 十堰市| 武城县| 琼中| 大荔县| 华安县| 水城县| 五台县| 金堂县| 大关县| 西乡县| 双峰县| 文昌市| 德清县| 鹤岗市| 枣强县| 吉隆县| 韶山市| 子洲县| 息烽县| 丰顺县| 富锦市| 麟游县| 顺义区| 滨海县| 桃江县| 谢通门县| 安多县| 阿图什市| 封开县| 偃师市| 龙南县| 徐州市| 锦州市| 台南县| 新龙县| 临江市| 苗栗县| 自贡市| 张北县| 凤阳县| 石柱| 潼关县| 亚东县| 塘沽区| 贵德县| 白玉县| 巴东县| 望奎县| 肃南| 正宁县| 五河县| 中山市| 景谷| 庄河市| 寿光市| 前郭尔| 兴和县| 华亭县| 井研县| 广水市| 平邑县| 上犹县| 高碑店市| 诸城市| 珲春市| 卢湾区| 麻江县| 平顺县| 铅山县| 双柏县| 长汀县| 自治县| 鄂伦春自治旗| 永新县| 淮滨县| 辽阳县| 双柏县| 宜州市| 古田县| 西和县| 兰考县| 大连市| 广南县| 互助| 崇州市| 朝阳区| 明光市| 虹口区| 建平县| 科技| 金乡县| 广州市| 尤溪县| 兰坪| 台东市| 棋牌| 河北区| 上杭县| 都安| 榆社县| 益阳市| 定西市| 怀安县| 广丰县| 修武县| 团风县| 鹿邑县| 邹城市| 罗平县| 图木舒克市| 泊头市| 宁蒗| 松江区| 南投县| 襄樊市| 南和县| 漯河市| 资讯| 富裕县| 漠河县| 海阳市| 巩义市| 安阳市| 揭西县| 滨州市| 含山县| 化德县| 岫岩| 福州市| 芮城县| 南投县| 德兴市| 扶绥县| 搜索| 昌吉市| 准格尔旗| 涿州市| 郯城县| 榕江县| 扎囊县| 全州县| 德化县| 大关县| 社旗县| 乌拉特前旗| 诸暨市| 大洼县| 桦南县| 永胜县| 曲沃县| 云浮市| 金秀| 阿坝县| 三都| 临洮县| 报价| 甘谷县| 盐源县| 许昌县| 中阳县| 陕西省| 铅山县| 石景山区| 武邑县| 永仁县| 罗山县| 唐海县| 柘荣县| 铜川市| 景东| 丹江口市| 南皮县| 桐庐县| 东乌珠穆沁旗| 平和县| 呼玛县| 湾仔区| 株洲市| 安平县| 丹巴县| 常州市| 平果县| 安新县| 湖北省| 固安县| 新宁县| 千阳县| 山阳县| 宁南县| 潼南县| 大方县| 三亚市| 南丰县| 湖州市| 涿州市| 大理市| 张家口市| 永年县| 丁青县| 娄烦县| 增城市| 莫力| 大英县| 如皋市| 西乌珠穆沁旗| 邳州市| 巢湖市| 胶南市| 正安县| 民权县| 武邑县| 丰都县| 静安区| 乳源| 尖扎县| 泰顺县| 来凤县| 定安县| 安新县| 丽水市| 平利县| 依兰县| 右玉县| 万载县| 建德市| 栾城县| 濉溪县| 定襄县| 蒲江县| 依安县| 泸水县| 梨树县| 凤翔县| 鄱阳县| 荔波县| 托克逊县| 新营市| 林口县| 佳木斯市| 泸西县| 类乌齐县| 喀喇沁旗| 遵义市| 玉山县| 肃北| 缙云县| 张掖市| 锦屏县| 高清| 长沙市| 同德县| 鄂托克旗| 伊通| 个旧市| 新源县| 沙雅县| 内乡县| 正阳县| 济阳县| 荣成市| 北海市| 咸丰县| 遂溪县| 榆树市| 昌宁县| 东至县| 马关县| 买车| 旬阳县| 临城县| 固始县| 安阳市| 临高县| 叙永县| 巧家县| 廊坊市| 广河县| 扶绥县| 梨树县| 凌源市| 甘孜县| 怀化市| 交城县| 天等县| 融水| 抚顺县| 汝城县| 安宁市| 平利县| 甘德县| 且末县| 聂荣县| 中江县| 华蓥市| 高安市| 鄂温| 新泰市| 长阳| 迁安市| 禹州市| 长宁县| 秦安县| 舒兰市| 平远县| 黄浦区| 固安县| 长治市| 克拉玛依市| 满城县| 洛浦县| 观塘区| 泽库县| 商城县| 汾阳市| 邻水| 尼勒克县| 成安县| 临沭县| 丁青县| 洛扎县| 宁波市| 鱼台县| 新竹市| 堆龙德庆县| 镇赉县| 通辽市| 苏尼特左旗| 台州市| 石河子市| 灵山县| 丽水市| 临洮县| 开封县| 和林格尔县| 正宁县| 湟中县| 鸡西市| 绩溪县| 永城市| 上饶市| 获嘉县| 莎车县| 三原县| 巴中市| 海城市| 东莞市| 崇义县| 罗城| 金湖县| 洛南县| 新建县| 贵定县| 巴彦淖尔市| 罗定市| 温宿县| 霸州市| 正蓝旗| 兴安盟| 云霄县| 莲花县| 奉新县| 浮山县| 西贡区| 松潘县| 嘉善县| 云南省| 金寨县| 宜兰市| 东乌珠穆沁旗| 房产| 句容市| 沙洋县| 长寿区| 南郑县| 陇川县| 巴中市| 湖南省| 贵溪市| 商都县| 沙河市| 报价| 林州市| 丹阳市| 玛纳斯县| 木兰县| 简阳市| 岢岚县| 许昌市| 寻甸| 塔河县| 禹州市| 涪陵区| 临泽县| 潞城市| 乌苏市| 黑水县| 南昌市| 阳高县| 蒲江县| 常山县| 伊金霍洛旗| 清原| 兴化市| 林州市| 马关县| 安泽县| 连云港市| 厦门市| 紫金县| 石泉县| 观塘区| 韩城市| 沙雅县| 天峨县| 江北区| 广德县| 都安| 邹平县| 苗栗市| 福建省| 陆良县| 正镶白旗| 德化县| 晋宁县| 四子王旗| 嘉黎县| 江安县| 夏津县| 普陀区| 宝鸡市| 綦江县| 湖口县| 阜平县| 沁水县| 贵阳市| 勃利县| 盐源县| 绥化市| 石屏县| 博客| 张家港市| 三门县| 仙桃市| 昆明市| 龙门县| 涟源市| 济阳县| 建昌县| 区。| 会同县| 阜新市| 汕尾市| 土默特左旗| 历史| 卢湾区| 平江县| 玛沁县| 新巴尔虎左旗| 紫云| 山西省| 舞钢市| 巴东县| 达州市| 西畴县| 井研县| 南召县| 科技| 龙海市| 吕梁市| 广汉市| 东海县| 年辖:市辖区| 巫山县| 卓尼县| 吕梁市| 江山市| 息烽县| 喀什市| 前郭尔| 洪湖市| 平利县| 米脂县| 蓝山县| 大石桥市| 南华县| 江门市| 青浦区| 泽普县| 义乌市| 邮箱| 西乌珠穆沁旗| 昌江| 马鞍山市| 社旗县| 色达县| 墨玉县| 喀喇| http://wap.iyvrbj.fit http://wap.coiffb.fit http://m.urjqlf.fit http://hlbzcz.fit http://wap.yoloil.fit http://hxuger.fit http://www.bm1961xeetz.fit http://m.ypftih.fit http://wap.suewll.fit http://wap.feszeq.fit http://anizpy.fit http://wap.kdphnm.fit http://zwbgea.fit http://wap.mudcfe.fit http://qfjjqh.fit http://wap.aaiamk.fit http://owvtgd.fit http://wap.roauzd.fit