zoukankan      html  css  js  c++  java
  • 调用门简单概括


    //通过调用门调用的 函数
    void _declspec(naked) GateFun()
    {
        g_num = 100;
        _asm mov [ g_esp ] , esp;
        _asm mov ax , ss;
        _asm mov word ptr [g_ss],ax
        _asm retf;
    }

    int main()
    {
        //构造描述符,段选择子为8.
    unsigned long long descript =
            createCallGateDescript(8/*8是内核中的代码段选择子*/ , ( unsigned int )GateFun , 0 );

        // 前4字节是EIP,后2字节是CS(0x004b)
        // 执行流程:
        // 1. 从buff这块内存中取出段选择子:0x4b
        //
        //       解释                       SEL T RPL
        //     十进制                         9 0 3
        // 2. 将段选择子分解,100 1011 ==> 1001 0 11, 得到GDT表中的下标:9
        // 3. 取出GDT表中第9项描述符, 是一个调用门描述符.
        // 4. 将调用门描述符中的段选择子加载到CS段寄存器
        // 5. 判断RPL权限是否足够,足够的话继续下一步
        char buff[ ] = { 0,0,0,0,0x4b,00 };
    _asm call fword ptr ds:[buff];
        // 6. 获取到描述符,解析描述符段选择子(8),权限足够的话执行函数。
    }
  • 相关阅读:
    【日记】200617 今天开始写日记了
    近期未复现比赛汇总
    2021NSCTF RE WP
    2021国赛CISCN 初赛 部分REwriteup
    对流氓APP——一份礼物.apk的逆向分析
    RE之攻防世界 maze
    RE-攻防世界 logmein
    RE-攻防世界 T4 simple-unpack
    安天逆向工程课程 U1
    RE-攻防世界 simple-unpack
  • 原文地址:https://www.cnblogs.com/ltyandy/p/11414659.html
Copyright © 2011-2022 走看看