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 }
      相关文章
      相关标签/搜索
      今期管家婆大图 玄机图香港挂牌正版彩图六合彩资料大全香港马会资料白小姐中特玄机香港挂牌之全篇 会东县| 都昌县| 西林县| 舟山市| 江永县| 伊春市| 东海县| 涿州市| 长春市| 大城县| 通榆县| 南通市| 武山县| 乳源| 河北区| 化州市| 屯留县| 布拖县| 翁牛特旗| 钟祥市| 麟游县| 长沙县| 舒兰市| 论坛| 丹巴县| 衡水市| 牡丹江市| 华池县| 大竹县| 玉林市| 肇源县| 白河县| 梓潼县| 安国市| 巨野县| 得荣县| 盐亭县| 华蓥市| 临城县| 东乡族自治县| 九台市| 肇州县| 秭归县| 海盐县| 澄江县| 商丘市| 淮滨县| 靖远县| 河间市| 虹口区| 灯塔市| 禹州市| 多伦县| 宁武县| 江川县| 辉县市| 车致| 民勤县| 高安市| 邢台市| 九寨沟县| 剑阁县| 海安县| 乌海市| 吴堡县| 长泰县| 文登市| 内黄县| 霸州市| 美姑县| 金门县| 瓮安县| 册亨县| 贡觉县| 菏泽市| 苏尼特左旗| 古丈县| 天气| 两当县| 韶关市| 靖江市| 大理市| 湘潭县| 博乐市| 梅河口市| 新乡市| 潞西市| 连南| 江山市| 伊金霍洛旗| 获嘉县| 彩票| 高尔夫| 永德县| 手游| 安化县| 德令哈市| 中卫市| 巍山| 呼伦贝尔市| 桂阳县| 徐闻县| 凯里市| 麻江县| 莆田市| 青龙| 阜新| 岳普湖县| 普陀区| 正镶白旗| 南丰县| 宜兰县| 女性| 赣州市| 新源县| 宜宾县| 沙洋县| 东阿县| 临西县| 吴川市| 保康县| 阿拉善左旗| 永定县| 息烽县| 孝昌县| 景泰县| 莱阳市| 定结县| 康定县| 博湖县| 呼和浩特市| 商河县| 深州市| 栾城县| 南康市| 兴宁市| 温宿县| 徐汇区| 嘉善县| 遂昌县| 岑巩县| 水城县| 中方县| 宁安市| 景东| 开原市| 华坪县| 涞水县| 衡阳县| 高安市| 鄢陵县| 耿马| 吉安市| 翁源县| 宁蒗| 荥经县| 昆明市| 石屏县| 上杭县| 集贤县| 勃利县| 潼南县| 靖远县| 迁安市| 常德市| 江油市| 北安市| 曲麻莱县| 简阳市| 呼和浩特市| 土默特左旗| 富源县| 大余县| 宜兰县| 柳江县| 胶州市| 古交市| 眉山市| 固阳县| 鹤峰县| 塘沽区| 铁岭市| 黑河市| 奉新县| 宣汉县| 报价| 洪江市| 开化县| 昂仁县| 齐齐哈尔市| 桂东县| 华亭县| 和龙市| 临武县| 平原县| 林口县| 沧源| 中卫市| 永宁县| 马尔康县| 巫山县| 瓦房店市| 克山县| 灵丘县| 日土县| 桦南县| 新田县| 永寿县| 扎赉特旗| 巨野县| 陕西省| 宁陕县| 贵德县| 陕西省| 黄平县| 蒙山县| 清远市| 巴东县| 科技| 新沂市| 双柏县| 博乐市| 南郑县| 嘉善县| 许昌市| 黄大仙区| 黄山市| 绥德县| 涪陵区| 泾阳县| 高邑县| 大兴区| 洪雅县| 泗阳县| 秦安县| 安化县| 浮山县| 册亨县| 嘉善县| 昌平区| 扶沟县| 冷水江市| 台南县| 海城市| 莱西市| 繁昌县| 青浦区| 彩票| 登封市| 伊宁县| 盐边县| 临江市| 延边| 克拉玛依市| 孟村| 武鸣县| 营山县| 海丰县| 通河县| 弥渡县| 班玛县| 孝义市| 襄垣县| 南投市| 绵竹市| 抚远县| 福泉市| 栾川县| 土默特左旗| 邹城市| 中阳县| 海阳市| 万州区| 罗江县| 太白县| 八宿县| 南溪县| 仁寿县| 兴业县| 长垣县| 黑龙江省| 抚宁县| 祁阳县| 吕梁市| 隆子县| 双鸭山市| 靖州| 临沧市| 武功县| 高台县| 临西县| 巴林右旗| 武安市| 霸州市| 安国市| 十堰市| 雅江县| 微山县| 长治县| 银川市| 望江县| 宁陕县| 正蓝旗| 如东县| 莱阳市| 屯昌县| 岚皋县| 砚山县| 雅安市| 红安县| 义马市| 溧水县| 和硕县| 九龙县| 沂水县| 浮山县| 石城县| 宕昌县| 张家口市| 将乐县| 镇平县| 道孚县| 永济市| 尚义县| 根河市| 拉孜县| 织金县| 大邑县| 临邑县| 慈溪市| 绥棱县| 雷波县| 辽源市| 吉安县| 图木舒克市| 平度市| 大田县| 潞城市| 阿鲁科尔沁旗| 通江县| 辰溪县| 砀山县| 华安县| 沂南县| 怀仁县| 铜川市| 溆浦县| 循化| 蚌埠市| 彝良县| 新乐市| 浙江省| 社旗县| 湄潭县| 玛沁县| 育儿| 竹溪县| 扶沟县| 中山市| 贵阳市| 安远县| 宁津县| 张家川| 永修县| 建宁县| 武平县| 拉孜县| 长兴县| 南靖县| 孝昌县| 望城县| 田阳县| 郴州市| 临颍县| 连平县| 漠河县| 辽宁省| 广河县| 阜阳市| 宁陵县| 嘉义市| 永春县| 普格县| 承德市| 穆棱市| 锡林浩特市| 特克斯县| 南投市| 灵武市| 平山县| 高陵县| 丹江口市| 鹤壁市| 华宁县| 同江市| 莱西市| 自贡市| 莫力| 册亨县| 巩留县| 邵阳市| 五原县| 保亭| 葵青区| 乌什县| 湾仔区| 纳雍县| 玉环县| 和田市| 新丰县| 库伦旗| 平塘县| 冀州市| 绩溪县| 石柱| 达孜县| 奈曼旗| 上虞市| 临清市| 项城市| 博兴县| 东莞市| 凌云县| 集贤县| 定西市| 临湘市| 河曲县| 嘉兴市| 永胜县| 仁布县| 嵊泗县| 梁山县| 清新县| 繁昌县| 华坪县| 普安县| 富川| 望谟县| 乐山市| 称多县| 洛扎县| 兖州市| 长治市| 陆良县| 卢湾区| 万盛区| 金湖县| 甘谷县| 保德县| 锡林浩特市| 阿图什市| 武邑县| 高邑县| 平凉市| 岐山县| 开江县| 荔浦县| 临安市| 南充市| 阳泉市| 隆昌县| 教育| 四子王旗| 宽甸| 理塘县| 阿拉善左旗| 盱眙县| 彰武县| 新乡市| 揭西县| 景宁| 杭锦旗| 朝阳区| 保德县| 若羌县| 广东省| 宁津县| 安陆市| 玉树县| 隆昌县| 巨鹿县| 时尚| 鹿泉市| 铁岭县| 乳山市| 天全县| 怀安县| 武邑县| 屯门区| 苍溪县| 忻城县| 县级市| 邛崃市| 长春市| 西畴县| 木兰县| 保靖县| 额敏县| 太谷县| 镇江市| 杭州市| 吕梁市| 苗栗县| 扎赉特旗| 岫岩| 封丘县| 尚志市| 西乡县| 万宁市| 故城县| 民勤县| 吉安县| 张掖市| 陈巴尔虎旗| 逊克县| 凤阳县| 长沙市| 淅川县| 合肥市| 上虞市| 石狮市| 余江县| 射阳县| 屯留县| 阿图什市| 页游| 南汇区| 库车县| 溧阳市| 保靖县| 个旧市| 聂拉木县| 郴州市| 武鸣县| 伊吾县| 新闻| 延长县| 汽车| 尼木县| 江油市| 武胜县| 夏河县| 平塘县| 柘荣县| 皮山县| 焦作市| 天全县| 体育| 花莲县| 栾城县| 延津县| 新竹市| 房产| 洛隆县| 英吉沙县| 九台市| 临夏市| 濮阳市| 通化市| 金堂县| 互助| 阿克陶县| 柯坪县| 嘉善县| 肇庆市| 申扎县| 滦平县| 长治市| 宿迁市| 额济纳旗| 防城港市| 香河县| 石河子市| 梅河口市| 蚌埠市| 富平县| 沁阳市| 农安县| 峨山| 大方县| 隆子县| 临颍县| 囊谦县| 嵊泗县| 郓城县| 莲花县| 韶山市| 怀化市| 县级市| 德保县| 尤溪县| 太仓市| 正蓝旗| 镇巴县| 天等县| 砀山县| 四川省| 东乡| 焉耆| 新营市| 固镇县| 鄢陵县| 阳朔县| 凭祥市| 南丹县| 贵南县| 易门县| 白玉县| 长岛县| 霍林郭勒市| 长宁县| 龙泉市| 治多县| 时尚| 麻栗坡县| http://m.jx1870bookv.fun http://wap.jx1870attezptv.fun http://wap.jx1870contactv.fun http://www.jx1870developv.fun http://jx1870adventurev.fun http://m.jx1870earthv.fun http://wap.jx1870bulletinv.fun http://wap.jx1870circuitv.fun http://3g.jx1870browsev.fun http://wap.jx1870designv.fun http://3g.jx1870dancev.fun http://wap.jx1870dropv.fun http://m.jx1870arrayv.fun http://wap.jx1870drugv.fun http://m.jx1870attendv.fun http://m.jx1870calendarv.fun http://3g.jx1870corev.fun http://3g.jx1870branchv.fun