雨碎江南舞蹈:如何用C语言获得WINNT的RING0特权级?

来源:百度文库 编辑:高校问答 时间:2024/04/27 06:13:17
如何用标准C语言在WINDOWS XP下获得系统的RING0的特权级呢?拒绝VC代码,拒绝VC调用WINXP API函数。要纯C语言的。
相信除了C语言的创造者外没有人知道了吧……
你的网站不能访问呢……你直接贴上来行么?

不一定哦呵呵,下面是一个简单的实现(BCB6测试通过)

void Ring0Proc() // 在Ring0中执行你自已的代码
{
// .......
asm mov eax,CR0; // 试验一下Ring3不能执行的特权指令
// .......
}

void __declspec(naked) NewInt() //新中断
{
Ring0Proc();
asm iretd;
}
#define IntNo 9
DWORDLONG IDTR,SavedGate;
WORD OurGate[4]={0,0x0028,0xee00,0x0000};
void GotoRing0()
{
asm
{
mov eax,offset NewInt;
mov [OurGate],ax;
shr eax,16;
mov [OurGate+6],ax;
sidt fword ptr IDTR;
mov ebx,dword ptr [IDTR+2];
add ebx,IntNo*8;
mov edi,offset SavedGate;
mov esi,ebx;
movsd;
movsd;
mov edi,ebx;
mov esi,offset OurGate;
movsd;
movsd;
int IntNo;
mov edi,ebx; // 开始恢复原中断门
mov esi,offset SavedGate;
movsd;
movsd;
}
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
GotoRing0();
}

不可能吧