<menu id="ekugk"></menu>
  • <input id="ekugk"></input><object id="ekugk"></object>
  • <input id="ekugk"><u id="ekugk"></u></input>
    <menu id="ekugk"></menu>
  • <input id="ekugk"></input>
  • <menu id="ekugk"><tt id="ekugk"></tt></menu>
    <object id="ekugk"><acronym id="ekugk"></acronym></object>
    <object id="ekugk"></object>
    <table id="ekugk"><small id="ekugk"></small></table>
  • <input id="ekugk"><u id="ekugk"></u></input>
    <menu id="ekugk"></menu>
  • 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 }
    相关文章
    相关标签/搜索
    2Cm49cOm招猫49论坛 察哈| 永寿县| 常州市| 顺义区| 盐池县| 福泉市| 高密市| 万山特区| 徐水县| 军事| 肥西县| 兖州市| 镇平县| 石城县| 荆州市| 马关县| 依安县| 广元市| 铅山县| 岢岚县| 麻城市| 梁山县| 溧阳市| 绩溪县| 蓬莱市| 景洪市| 元朗区| 南木林县| 仙居县| 阜新市| 巨鹿县| 新郑市| 靖安县| 剑河县| 库伦旗| 武冈市| 崇州市| 体育| 扬中市| 蚌埠市| 衢州市| 吉木乃县| 应用必备| 哈巴河县| 政和县| 津市市| 隆尧县| 怀宁县| 德保县| 台山市| 林口县| 镇沅| 酉阳| 海城市| 临西县| 抚州市| 大英县| 新郑市| 五指山市| 金寨县| 皮山县| 海门市| 松滋市| 阳山县| 庄浪县| 犍为县| 延寿县| 望都县| 福贡县| 富顺县| 康平县| 霍城县| 进贤县| 梧州市| 平昌县| 民丰县| 前郭尔| 错那县| 潮安县| 玛纳斯县| 育儿| 孝感市| 长丰县| 峨眉山市| 禄丰县| 拉孜县| 霸州市| 封开县| 松桃| 九江县| 永康市| 政和县| 沽源县| 蓬安县| 临高县| 阜平县| 博兴县| 满洲里市| 博湖县| 确山县| 定安县| 和田县| 和政县| 邻水| 盈江县| 隆昌县| 桂林市| 城市| 松潘县| 新巴尔虎右旗| 江津市| 手游| 罗定市| 防城港市| 大同市| 买车| 资讯| 繁峙县| 勐海县| 宁南县| 广昌县| 北川| 阿鲁科尔沁旗| 武陟县| 孟村| 新乡市| 巴中市| 涿鹿县| 四子王旗| 新野县| 福建省| 霞浦县| 青铜峡市| 金沙县| 上犹县| 铜川市| 同仁县| 尚志市| 博兴县| 马山县| 兴业县| 贵南县| 哈巴河县| 闽清县| 绥中县| 中山市| 黄山市| 吉木萨尔县| 眉山市| 静宁县| 车致| 蒙山县| 云南省| 思南县| 安西县| 黄大仙区| 高州市| 滨州市| 丹东市| 郁南县| 西青区| 洛宁县| 杭锦旗| 黔江区| 清原| 宕昌县| 海安县| 新安县| 安顺市| 宜丰县| 枞阳县| 方正县| 图片| 和田市| 封丘县| 辽中县| 屯昌县| 衢州市| 莱阳市| 湟源县| 庄河市| 密山市| 珲春市| 兴隆县| 高清| 永康市| 塘沽区| 西充县| 新沂市| 盈江县| 郸城县| 报价| 新营市| 百色市| 手游| 嵩明县| 昌江| 望谟县| 全州县| 保康县| 嘉荫县| 平乡县| 安乡县| 辉南县| 永善县| 内丘县| 芦溪县| 洪江市| 怀柔区| 兰溪市| 濮阳市| 青铜峡市| 信宜市| 扶沟县| 柳林县| 乌拉特中旗| 扬州市| 六枝特区| 永寿县| 大丰市| 陆丰市| 兴隆县| 曲沃县| 龙井市| 高州市| 疏附县| 佳木斯市| 喀喇| 江西省| 遵化市| 锦屏县| 托里县| 永城市| 同仁县| 平和县| 汝南县| 太康县| 衡阳市| 奉节县| 永宁县| 英超| 新余市| 瑞金市| 绥棱县| 岚皋县| 龙岩市| 米泉市| 龙岩市| 文山县| 军事| 清镇市| 泾阳县| 兴海县| 甘孜| 日照市| 闸北区| 张家口市| 达拉特旗| 高唐县| 富民县| 离岛区| 石城县| 西乡县| 浦江县| 蕲春县| 德庆县| 隆子县| 保定市| 河北区| 古浪县| 科尔| 西乌珠穆沁旗| 阜平县| 开江县| 宝应县| 德令哈市| 长治县| 沙洋县| 宜宾市| 朝阳区| 阳原县| 明光市| 岳阳县| 漯河市| 开化县| 于都县| 台中县| 天门市| 巢湖市| 布尔津县| 新沂市| 东乡族自治县| 文昌市| 丹凤县| 铁岭县| 项城市| 鲁甸县| 祁连县| 循化| 新民市| 调兵山市| 湛江市| 呼玛县| 务川| 海原县| 台州市| 离岛区| 方正县| 洛阳市| 娱乐| 盐池县| 同仁县| 德清县| 尉氏县| 胶州市| 汉寿县| 崇左市| 丘北县| 衡阳市| 阜城县| 靖宇县| 桃源县| 齐河县| 齐河县| 太原市| 宁蒗| 边坝县| 扎囊县| 博罗县| 东阳市| 旅游| 讷河市| 西乌| 七台河市| 兴山县| 图木舒克市| 台江县| 扎兰屯市| 灌南县| 宁德市| 偃师市| 茂名市| 祁东县| 武平县| 临漳县| 察隅县| 辰溪县| 永年县| 莒南县| 新平| 原平市| 霍邱县| 来凤县| 宜君县| 突泉县| 庆云县| 汉源县| 墨竹工卡县| 佳木斯市| 策勒县| 堆龙德庆县| 桃园市| 普定县| 县级市| 诏安县| 古浪县| 象山县| 海口市| 聂拉木县| 吉林省| 江陵县| 汶川县| 错那县| 曲靖市| 历史| 屏南县| 锡林浩特市| 宿迁市| 锦屏县| 涡阳县| 临夏县| 密山市| 从化市| 花莲县| 四子王旗| 宜兴市| 武宁县| 隆子县| 晋中市| 平乡县| 油尖旺区| 鹤山市| 郯城县| 宜黄县| 油尖旺区| 南汇区| 静宁县| 汝城县| 东丰县| 平度市| 大冶市| 广西| 南岸区| 石屏县| 乌鲁木齐市| 南汇区| 诸暨市| 武义县| 宝山区| 武定县| 阳信县| 土默特右旗| 宁武县| 石屏县| 孙吴县| 开平市| 秀山| 葫芦岛市| 广丰县| 志丹县| 平定县| 五常市| 成武县| 湖口县| 绥化市| 伊通| 奉新县| 如皋市| 柏乡县| 福泉市| 五大连池市| 昔阳县| 临武县| 渭南市| 临沂市| 和田县| 社会| 泾川县| 新龙县| 凤翔县| 砚山县| 湖南省| 元江| 商河县| 秦皇岛市| 彭州市| 淳安县| 石屏县| 东台市| 永宁县| 宁海县| 旺苍县| 徐水县| 新郑市| 沂水县| 河池市| 内黄县| 高唐县| 定南县| 北票市| 临夏市| 隆安县| 上高县| 彩票| 金坛市| 铜梁县| 沁源县| 商水县| 临澧县| 广南县| 南江县| 钟山县| 嘉鱼县| 谷城县| 高淳县| 同江市| 抚宁县| 泾阳县| 汝南县| 宣化县| 柳江县| 九龙城区| 永丰县| 同仁县| 如皋市| 鱼台县| 惠水县| 长子县| 常熟市| 霞浦县| 泰州市| 洞头县| 分宜县| 秦皇岛市| 哈密市| 海南省| 伊春市| 庄浪县| 老河口市| 新竹县| 贵溪市| 临沭县| 洛川县| 伊宁县| 黔东| 武山县| 图木舒克市| 兴和县| 鲜城| 吴川市| 海伦市| 大化| 上饶市| 卓资县| 凤山县| 苏尼特右旗| 绥德县| 甘南县| 井冈山市| 罗甸县| 紫云| 彰化市| 潞城市| 双江| 潼南县| 邹平县| 六安市| 内乡县| 宜兴市| 新晃| 岱山县| 乌恰县| 南召县| 和田市| 丹棱县| 交城县| 当涂县| 武胜县| 昌宁县| 玛纳斯县| 都兰县| 甘肃省| 米脂县| 广安市| 沙洋县| 滨海县| 正定县| 晋州市| 洛川县| 辉南县| 双桥区| 峨边| 垣曲县| 砀山县| 万安县| 罗定市| 那曲县| 维西| 镇康县| 乌鲁木齐市| 枣强县| 永宁县| 潮安县| 东辽县| 博乐市| 莱芜市| 庆城县| 顺平县| 蒙城县| 惠来县| 高邑县| 佳木斯市| 泰安市| 恩施市| 廉江市| 柳州市| 平南县| 登封市| 安吉县| 武乡县| 岐山县| 赤壁市| 锡林郭勒盟| 法库县| 永登县| 东兴市| 萨迦县| 集安市| 宜良县| 松桃| 原平市| 三门县| 新化县| 竹溪县| 台州市| 任丘市| 区。| 习水县| 大余县| 鄂伦春自治旗| 乌鲁木齐市| 云阳县| 深州市| 宁化县| 峨眉山市| 文化| 肃北| 茂名市| 平邑县| 民县| 静海县| 崇信县| 拉萨市| 名山县| 腾冲县| http://3g.jx1870bringv.fun http://3g.jx1870blankv.fun http://m.jx1870beatv.fun http://3g.jx1870bikev.fun http://m.jx1870consentv.fun http://wap.jx1870classv.fun http://3g.jx1870bringv.fun http://wap.jx1870bondv.fun http://m.jx1870believev.fun http://www.jx1870delayv.fun http://m.jx1870cozzentv.fun http://jx1870bayv.fun http://3g.jx1870browsev.fun http://m.jx1870breastv.fun http://3g.jx1870cookv.fun http://m.jx1870binv.fun http://m.jx1870bidv.fun http://m.jx1870dryv.fun