当前位置:首页 » 编程博文
开发技术指南» 文章正文
    引言: 众所周知在非 Admin 用户模式下,是不允许加载驱动执行 RING 0 代码的。
 

 

 ·基于目录结构认证的问题    »显示摘要«
    摘要: 目录结构以tree形式展现,按照rbac的规范,我把目录当做一种资源(resource),然后以permission=resource+operation来定义权限,operation包括view,edit,check in/out等, 定义一个权限的大概流程是:在目录树上选择某一目录节点,然后选择一种操作类型,由此定义一个对该节点的权限permission1。 按此方式授权:permissio......
 ·向java宣战,从ide开始    »显示摘要«
    摘要: 很久以来,为了集中有限的精力先打好一个良好的c\c++基础,一直顶着java及其fans的猖狂的心理进攻,我承认,在这个浮躁的世界里做到这点的确不容易。毕竟到处迷漫着所谓的“java胜利论”(正确与否我不想讨论)。因此在某些人看来,我简直是个食古不化的书呆子。恩,的确有点。当然,盲目的拒绝一个强有力的新生力量是愚蠢的,恩,比人云亦云更愚蠢,晤,你总得承认流行起来的东西肯定......


任意用户模式下执行Ring代码

众所周知在非 admin 用户模式下,是不允许加载驱动执行 ring 0 代码的.

本文提供了一种方法,通过修改系统 gdt,idt 来添加自己的 callgate 与 【程序编程相关:用JDOM建立XML文件

【推荐阅读:心语——女性程序员的心声

intgate 这样便在系统中设置了一个后门.我们就可以利用这个后门 【扩展信息:递归法提升密码穷举算法性能

在任意用户模式下执行 ring 0 代码了.为了保证我们添加的 callgate 与 int

gate 永久性.可以在第一次安装时利用 service api 或 inf 文件设置成随

系统启动.不过此方法也有个缺陷,就是在第一次安装 callgate 或 intgate

时仍然需要 admin 权限.下面分别给出了添加 callgate 与 intgate 的具体

代码.

  

   一.通过添加调用门实现

  为了可以让任意用户来调用我们的 callgate 需要解决一个小问题.因为

需要知道 callgate 的 selector 后才可以调用.而在 ring 3 下除了能

得到 gdt 的 base address 与 limit 外是无法访问 gdt 内容的.我本想

在 ring 0 把 selector 保存到文件里.在 ring 3 下读取出来再调用.

后经过跟 wowocock 探讨.他提出的思路是在 ring 0 下通过

zwquerysysteminformation 得到 ntdll.dll 的 module base 然后根据

pe header 中的空闲处存放 selector.这样在 ring 3 的任意用户模式下

就很容易得到了.在这里要特别感谢 wowocock.下面的代码为了演示

方便,用了在我机器上 gdt 中第一个空闲描述符的 selector .

驱动程序:

/*****************************************************************

文件名        : wssaddcallgate.c

描述          : 添加调用门

作者          : sinister

最后修改日期  : 2002-11-02

*****************************************************************/

#include "ntddk.h"

#include "string.h"

#ifndef dword

#define dword unsigned int

#endif

#ifndef word

#define word unsigned short

#endif

#define loword(l)           ((unsigned short)(unsigned int)(l))

#define hiword(l)           ((unsigned short)((((unsigned int)(l)) >> 16) & 0xffff))

typedef unsigned long    ulong;

static ntstatus  mydrvdispatch (in pdevice_object deviceobject, in pirp irp);

void driverunload (in pdriver_object pdriverobject);

#pragma pack(push,1)

typedef struct taggdtr{

    word    wlimit;

    dword   *dwbase;

}gdtr, *pgdtr;

typedef struct taggdt_descriptor{

    unsigned limit         : 16;

    unsigned baselo         : 16;

    unsigned basemid     : 8;

    unsigned type        : 4;

    unsigned system      : 1;

    unsigned dpl         : 2;

    unsigned present     : 1;

    unsigned limithi     : 4;

    unsigned available   : 1;

    unsigned zero        : 1;


...   下一页
 ·我对于关键字ref和out的理解    »显示摘要«
    摘要:最近刚开始接触c#这门语言,觉得它挺有意思的。昨天我看到了关键字ref和out,当时我没搞清楚这两个概念到底是怎么回事情,今天总算是差不多把它们弄明白了。简单介绍在微软的msdn上,这两个关键字是这样解释的:ref:the ref method parameter keyword on a method parameter causes a method to refer to the same ......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE