• [保护模式]联系1 三环访问高2G


    // 三环读高两G.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include <windows.h>
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    
        int* gdtAddress = NULL; //定义个变量
        getchar();
        gdtAddress = (int*)0x80b95048; //复制一个高地址
        *gdtAddress = 2; 
        printf("%x,value =%x
    ", gdtAddress,*gdtAddress);
        system("pause");
        return 0;
    
     
    
    }

    会出现读取失败,那么此时我们需要借助Windbg来辅助操作!

    首先找到

    0x80b95048地址
    将他改写

    0: kd> eq 80b95048 00000000`12345678
    0: kd> dq gdtr
    80b95000 00000000`00000000 00cf9b00`0000ffff
    80b95010 00cf9300`0000ffff 00cffb00`0000ffff
    80b95020 00cff300`0000ffff 80008b1e`600020ab
    80b95030 84409333`dc003748 0040f300`00000fff
    80b95040 0000f200`0400ffff 00000000`12345678
    80b95050 84008933`b0000068 84008933`b0680068
    80b95060 00000000`00000000 00000000`00000000
    80b95070 800092b9`500003ff 00000000`00000000

     
       
    拆分
    0x80b95048地址
    拆分后:‭1000 0000 1011 1001 0101 0000 0100 1000‬
    根据 2 9 9 12的物理页进行重组
    因为结构大小为8位,如果要定义到目录还需乘它的位数
    2位 :10 2*8 (0a9f4801 )

    9位:00 0000 101    5*8 (00193063 )

    9位:1100 1010 1    195*8 (00b95163 )
    12 位:0000 0100 1000‬  48   (123456)这里已经到了具体指向数据了,所以它并不需要再乘位在虚拟机内运行程序,断在GETchar 然后再用Windbg接管
    使用!process 0 0 来遍历所有进程   (如果需要读物理地址那么前面加个!)
    填写000 则是为了防止读写属性参与运算!

    0: kd> !dq beaf6220+2*8
    #beaf6230 00000000`0a9f4801 00000000`0acf5801
    #beaf6240 00000000`5d0ab801 00000000`5d8ac801
    #beaf6250 00000000`5d8ad801 00000000`5d6ae801
    #beaf6260 00000000`5c6b8801 00000000`5c4b9801
    #beaf6270 00000000`5beba801 00000000`5c4bb801
    #beaf6280 00000000`5dbc1801 00000000`5e0c2801
    #beaf6290 00000000`5e1c3801 00000000`5e3c4801
    #beaf62a0 00000000`5989e801 00000000`5919f801
    
    0: kd> !dq 0a9f4000+5*8
    # a9f4028 00000000`00193063 00000000`b6a02863
    # a9f4038 00000000`00000000 00000000`001c2063
    # a9f4048 00000000`001c3063 00000000`001c4063
    # a9f4058 00000000`001c5063 00000000`001c6063
    # a9f4068 00000000`001c7063 00000000`001c8063
    # a9f4078 00000000`001c9063 00000000`001ca063
    # a9f4088 00000000`001cb063 00000000`001cc063
    # a9f4098 00000000`001cd063 00000000`001ce063
    
    0: kd> !dq 00193000 + 195*8
    #  193ca8 00000000`00b95163 00000000`00000000
    #  193cb8 00000000`00000000 00000000`00000000
    #  193cc8 00000000`00000000 00000000`00000000
    #  193cd8 00000000`00000000 00000000`00000000
    #  193ce8 00000000`00000000 00000000`00000000
    #  193cf8 00000000`00000000 00000000`00000000
    #  193d08 00000000`00000000 00000000`00000000
    #  193d18 00000000`00000000 00000000`00000000
    
    0: kd> !dq 00b95000 +48
    #  b95048 00000000`12345678 84008933`b0000068
    #  b95058 84008933`b0680068 00000000`00000000
    #  b95068 00000000`00000000 800092b9`500003ff
    #  b95078 00000000`00000000 00000000`00000000
    #  b95088 00000000`00000000 00000000`00000000
    #  b95098 00000000`00000000 87008905`2f980068
    #  b950a8 00000000`00000000 00000000`00000000
    #  b950b8 00000000`00000000 00000000`00000000

    原代码:

    a9f4028 00000000`00193063    3拆分后是0011   属于超级用户才能访问

    !ed a9f4028 00193067    7拆分后0111    
    把PDE第二位设置位普通用户

    就是一层层的把超级权限改成用户权限!
  • 相关阅读:
    vue.js 条件与循环
    vue.js 声明式渲染
    数据库设计范式?
    用户购物车,实现添加商品的功能!
    用户购物车功能的实现。
    初始ajax技术
    SQL语句中 INNER JOIN的用法!
    商城 用户登录、注册、注销,购物车。
    EL和 JSTL? 在JSP中简化 java代码的写法!
    小数点后保留2位小数的正则表达式
  • 原文地址:https://www.cnblogs.com/hanhandaren/p/11225817.html
Copyright © 2020-2023  润新知