社区
Windows SDK/API
帖子详情
用DELPHI怎么写进Ring0
ZZZddd
2003-02-12 08:19:03
用DELPHI怎么写进Ring0
...全文
38
1
打赏
收藏
用DELPHI怎么写进Ring0
用DELPHI怎么写进Ring0
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
1 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
grail_
2003-02-12
打赏
举报
回复
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();
}
***********************************************
编译是通过了,你自己调试一下吧。
lea esi, MyInt; 一句语法应该有逻辑错误,要在Debug中仔细看一下。
procedure MyInt;
asm
// 这里面的内容可要你自己写哦。
end;
const HookExceptionNumber = 3;
procedure GetRing0;
asm
// 连续压入8个字节作为缓冲区
push eax
push eax;
// 取得idt偏移,共6字节,含段选择子2字节,偏移4字节。
sidt [esp-02h]; // Get IDT Base Address
// 弹出4字节偏移
pop ebx;
// 每个中断门8字节,所以偏移是HookExceptionNumber*08h
// 另外的4字节是定位到中心,因为中断门的4字节偏移分开放在8字节的0、1、6、7中。
// 0、1存放偏移低16位,6、7存放高16位。2,3是段选择子。4、5是门属性。
add ebx, HookExceptionNumber*08h + 04h;
// 关中断,准备修改idt。
cli
// 取得中断门的4、5、6、7字节,其中6、7字节在ebp高16位
mov ebp, [ebx]; // Get Exception Base
// 取得中断门的0、1字节到bp(实际上是ebp的低16位)。
mov bp, [ebx-04h]; // Entry Point
// 这样就合成了完整的32位偏移。
// 取得自己中断函数入口地址,放入esi中。
lea esi, MyInt;
// 压入堆栈
push esi
// 填充入口低16位到中断门0、1字节。
mov [ebx-04h], si;
// 将高16位移动到低16位。
shr esi, 16; // Modify Exception
// 填充入口高16位到中断门6、7字节。
mov [ebx+02h], si; // Entry Point Address
// idt修改完毕。
// 调整堆栈
pop esi
// 此时堆栈比初始状态多压8字节。估计是在引发的中断中处理。
// ebp的初始中断入口估计也是在自己的中断函数中用于恢复现场。
// 后面的就是引发软中断,取得ring0权力。
// 不过说句老实话。CIH的创意是不错,不过CIH的汇编的水平其实很一般。
int HookExceptionNumber; // GenerateException
// ReadyRestoreSE:
sti
end;
----------------------------------
const IntNo=9;
var
IDTR,SavedGate:int64;
OurGate:array[0..3] of word=(0,$0028,$ee00,$0000);
procedure Ring0Proc; // 在Ring0中执行你自已的代码
begin
// .......
asm
mov eax,CR0; // 试验一下Ring3不能执行的特权指令
end;
end;
// =====================================================
procedure NewInt(); //新中断
begin
Ring0Proc();
asm
iretd;
end;
end;
procedure GotoRing0;
begin
asm
mov eax,offset NewInt;
mov word ptr[OurGate],ax;
shr eax,16;
mov word ptr[OurGate+6],ax;
sidt fword ptr IDTR;//在Delphi中应该改成:lea ebx, idtr; sidt [ebx]
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;
end;
end;
// ===================================================
procedure TForm1.Button1Click(Sender: TObject);
begin
gotoring0;
end;
********************************
const IntNo=3;
//var
//IDTR,SavedGate:int64;
procedure Ring0Proc; // 在Ring0中执行你自已的代码
begin
// .......
// showmessage('kfsdj;fk');
asm
mov eax,CR0; // 试验一下Ring3不能执行的特权指令
end;
end;
// =====================================================
procedure NewInt(); //新中断
begin
Ring0Proc();
asm
iretd;
end;
end;
procedure GotoRing0;
begin
asm
mov edi,offset buf;
sidt [edi]; //Get IDT-->buf;
mov ebx,[edi+2] //求中断门基址
add ebx,IntNo*8;
mov esi,ebx;
push edi;
push esi;
movsd;
movsd;
cli;
mov eax,offset newint;
mov [ebx],ax;
shr eax,16;
mov [ebx+6],ax;
mov ax,0ee00h;
mov [ebx+4],ax;
int intno;
pop edi
pop esi;
movsd;
movsd;
sti;
end;
end;
DELPHI
示范如何读写硬盘物理扇区
通过以上步骤,你可以使用
DELPHI
编写程序来演示如何读写硬盘物理扇区。需要注意的是,这样的操作需要深入理解操作系统和硬件交互的工作原理,并且需要谨慎操作,避免造成不必要的数据损坏。在提供的压缩包文件...
Delphi
使用
Ring0
技术读写物理扇区.rar
Delphi
基于
Ring0
技术读写Windows系统下的硬盘物理扇区,磁盘读写操作一例,包括了VxD和仿CIH两种方法,VxD方法中还包括了所调用控件的VC 源代码,并且包括了一个测试的例子,运行效果如演示截图所示。相关的源代码...
Ring3恢复HOOK FOR
Delphi
Ring3是指操作系统中的用户模式,与之相对的是
Ring0
内核模式。在Ring3中运行的应用程序具有较低级别的权限,不能直接访问硬件资源或执行敏感操作。因此,在
Delphi
应用程序中进行HOOK操作时,通常处于Ring3环境中。 ...
随意将函数执行权限提高到
Ring0
源代码.rar
描述中的"
DELPHI
版"进一步确认了这些源代码是用
Delphi
语言编写的,可能是为了帮助开发者理解如何在
Delphi
环境中实现
Ring0
权限的提升。这样的知识对于系统编程、驱动开发或者逆向工程的人员来说是很有价值的,因为...
显示所有消息钩子hook_并没有使用gSharedInfo. ring3是
DELPHI
编写的,
ring0
是C编写的驱动.zip
本项目涉及到的是在Windows操作系统中,使用
DELPHI
和C语言分别在用户模式(Ring3)和内核模式(
Ring0
)实现的消息钩子。下面将详细阐述相关知识点: 1. **消息钩子(Hook)**:Windows API提供了一种机制,允许...
Windows SDK/API
1,184
社区成员
22,326
社区内容
发帖
与我相关
我的任务
Windows SDK/API
Delphi Windows SDK/API
复制链接
扫一扫
分享
社区描述
Delphi Windows SDK/API
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章