首页
课程
问答
CTF
社区
招聘
峰会
发现
排行榜
知识库
工具下载
看雪20年
看雪商城
证书查询
登录
注册
首页
社区
课程
招聘
发现
问答
CTF
排行榜
知识库
工具下载
峰会
看雪商城
证书查询
社区
编程技术
发新帖
2
0
[求助]对rootkit ring3进ring0之调用门学习有个问题
发表于: 2010-7-26 15:35
5353
[求助]对rootkit ring3进ring0之调用门学习有个问题
wujimaa
1
2010-7-26 15:35
5353
在我的机器上,GDT表中第9个的present等于0,我增加一个调用函数.
为什么用main.c测试时,报内存访问出错.
程序是从combojiang大牛教程对rootkit ring3进ring0之一调用门中改过来.
http://bbs.pediy.com/showthread.php?t=62263
有谁知道错在哪的,请指点一下哪里出错了.谢谢
//------------------------------CallGate.sys-----------------
#include <ntddk.h>
UNICODE_STRING g_usDeviceName;
UNICODE_STRING g_usSymbolicLinkName;
#define MAKELONG(a, b) ((unsigned long) (((unsigned short) (a)) | ((unsigned long) ((unsigned short) (b))) << 16))
#pragma pack(1)
typedef struct gdtr {
unsigned short Limit;
unsigned short BaseLow;
unsigned short BaseHigh;
}Gdtr_t, *PGdtr_t;
typedef struct
{
unsigned short offset_0_15;
unsigned short selector;
unsigned char param_count : 4;
unsigned char some_bits : 4;
unsigned char type : 4;
unsigned char app_system : 1;
unsigned char dpl : 2;
unsigned char present : 1;
unsigned short offset_16_31;
} CALLGATE_DESCRIPTOR;
#pragma pack()
NTSTATUS DispatchControl(PDEVICE_OBJECT DeviceObject, PIRP Irp)
{
Irp->IoStatus.Status=STATUS_SUCCESS;
Irp->IoStatus.Information=0;
IoCompleteRequest(Irp,0);
return STATUS_SUCCESS;
}
__declspec(naked) Rrin0Fun()
{
__asm
{
pushad
pushfd
cli
}
DbgPrint("MyGateFun\n");
__asm
{
sti
popfd
popad
retf
}
}
VOID AddCallGate(ULONG FuncAddr)
{
Gdtr_t gdt;
CALLGATE_DESCRIPTOR *pGDT;
ULONG Index;
ULONG Addr;
__asm sgdt gdt;
pGDT=(CALLGATE_DESCRIPTOR*)MAKELONG(gdt.BaseLow,gdt.BaseHigh);
Index=1;
while(Index<255)
{
if(pGDT[Index].present==0)
{
__asm cli
pGDT[Index].offset_0_15=(unsigned short)FuncAddr;
pGDT[Index].selector=8;
pGDT[Index].param_count=0;
pGDT[Index].some_bits= 0;
pGDT[Index].type=0xC;
pGDT[Index].app_system=0;
pGDT[Index].dpl=3;
pGDT[Index].present=1;
pGDT[Index].offset_16_31=(unsigned short)(FuncAddr>>16);
__asm sti
DbgPrint("0x%x\n",Index);
break;
}
Index++;
}
Index=1;
while(Index<255)
{
Addr=MAKELONG(pGDT[Index].offset_0_15,pGDT[Index].offset_16_31);
DbgPrint("%d Func:0x%x,%d\n",Index,Addr,(int)pGDT[Index].present);
Index++;
}
}
VOID OnUnLoad(IN PDRIVER_OBJECT pDriverObject)
{
IoDeleteSymbolicLink(&g_usSymbolicLinkName);
IoDeleteDevice(pDriverObject->DeviceObject);
DbgPrint("Called OnUnLoad!\n");
}
NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject,IN PUNICODE_STRING pRegistryPath)
{
NTSTATUS status=STATUS_DEVICE_CONFIGURATION_ERROR;
PDEVICE_OBJECT pDeviceObject;
ULONG i;
RtlInitUnicodeString(&g_usDeviceName,L"\\Device\\MYCALLGATE");
RtlInitUnicodeString(&g_usSymbolicLinkName,L"\\??\\MYCALLGATE");
status=IoCreateDevice(pDriverObject,0,&g_usDeviceName,FILE_DEVICE_UNKNOWN,0,FALSE,&pDeviceObject);
if(status==STATUS_SUCCESS)
{
status=IoCreateSymbolicLink(&g_usSymbolicLinkName,&g_usDeviceName);
if(STATUS_SUCCESS==status)
{
for(i=0;i<IRP_MJ_MAXIMUM_FUNCTION;i++)
{
pDriverObject->MajorFunction[i]=DispatchControl;
}
pDriverObject->DriverUnload=OnUnLoad;
DbgPrint("Ring0Fun %x\n",Rrin0Fun);
AddCallGate((ULONG)Rrin0Fun);
status=STATUS_SUCCESS;
}
else
{
IoDeleteDevice(pDeviceObject);
}
}
return status;
}
//----------------------main.c------------------------
//测试
#include <windows.h>
#include <stdio.h>
void main()
{
WORD farcall[3];
farcall[0] = 0x0;
farcall[1] = 0x0;
farcall[2] = 0x0b; //0x09 |0x03=0x0b
_asm call fword ptr [farcall]
}
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
收藏
・
2
免费
・
0
支持
分享
分享到微信
分享到QQ
分享到微博
赞赏记录
参与人
雪币
留言
时间
查看更多
赞赏
×
1 雪花
5 雪花
10 雪花
20 雪花
50 雪花
80 雪花
100 雪花
150 雪花
200 雪花
支付方式:
微信支付
赞赏留言:
快捷留言
感谢分享~
精品文章~
原创内容~
精彩转帖~
助人为乐~
感谢分享~
最新回复
(
5
)
programfan
雪 币:
998
活跃值:
(10)
能力值:
( LV2,RANK:10 )
在线值:
发帖
1
回帖
215
粉丝
0
关注
私信
programfan
2
楼
farcall[2]=0x4b;
2010-7-27 00:16
0
wujimaa
雪 币:
364
活跃值:
(1741)
能力值:
( LV4,RANK:50 )
在线值:
发帖
11
回帖
167
粉丝
1
关注
私信
wujimaa
1
3
楼
为什么是farcall[2]=0x4b; 选择子CallGate_Sel = 索引值 or 0x03.
我索引值Index是9,选择子CallGate_Sel 不是0x09 | 0x03=0x0b 吗?
2010-7-27 09:56
0
programfan
雪 币:
998
活跃值:
(10)
能力值:
( LV2,RANK:10 )
在线值:
发帖
1
回帖
215
粉丝
0
关注
私信
programfan
4
楼
(0x9<<3)|0x03
2010-7-27 10:54
0
wujimaa
雪 币:
364
活跃值:
(1741)
能力值:
( LV4,RANK:50 )
在线值:
发帖
11
回帖
167
粉丝
1
关注
私信
wujimaa
1
5
楼
楼上,多谢了.
2010-7-27 14:20
0
冰雄
雪 币:
1485
活跃值:
(1135)
能力值:
( LV2,RANK:10 )
在线值:
发帖
22
回帖
224
粉丝
52
关注
私信
冰雄
6
楼
问题解决了吗?我在win7也出现问题
2018-3-20 12:10
0
游客
登录
|
注册
方可回帖
回帖
表情
雪币赚取及消费
高级回复
返回
wujimaa
1
11
发帖
167
回帖
50
RANK
关注
私信
他的文章
[求助]汇编语句
2820
[求助]驱动内调用ZwAllocateVirtualMemory,分配特定地址
5596
[求助]急 急。有什么好方法判断进程退出
3580
怎样判断电脑正在锁屏?
4791
[求助]逆向office漏洞检测相关软件
4744
关于我们
联系我们
企业服务
看雪公众号
专注于PC、移动、智能设备安全研究及逆向工程的开发者社区
看原图
赞赏
×
雪币:
+
留言:
快捷留言
为你点赞!
返回
顶部