中断门实验(一)打印任意地址(中断提权)

 idt是中断描述表,idt表包含了三种描述符:任务门,中断门,以及陷阱门

本文是通过修改idt表中的0x20号中断,增加了自己的中断门

 每一个idt表项中的 前2个字节+后2个字节(Offset31..16+Offset15..0=EIP)这个地址是当权限符合以后跳转到这个地址执行。

权限符合:

这里举一个例子 :   mov eax, dword ptr ds : [0x8003f500]

(1.找出选择子->2.查找IDT或者GDT表->3.找出描述符->4.根据描述符里的属性加载)

如果符合就运行这行汇编代码

 当前可以看见中20号中断的地址为空

 

 我们可以在8003f500插入自己构造的中断门,0040ee00`0008100f ,前两个字节+后两个字节=EIP(0040100f)也就是下面IdtEntry这个函数的地址 ee00`0008则是属性位,当权限符合后跳转到这个函数

 

#include "stdafx.h"


#include<windows.h>
DWORD g_tmp = 0;
//declspec(naked)是编译器直接拿来用的汇编函数代码,所以一定要记得在开始的时候保存上下文标志位(压栈),在结束的时候要记得恢复上下文(出栈)。并且在结尾要加上ret命令
void  __declspec(naked) IdtEntry()
{
	__asm {
		mov eax, dword ptr ds : [0x8003f500]
		mov g_tmp, eax
		iretd
	}

}
void go() {
	__asm int 0x20;
	
}

int main()
{
	if ((DWORD)IdtEntry != 0x40100f)
	{
		printf("wrong addr:%p", IdtEntry);
		getchar();
		
	}
	go();
	printf("%p\n", IdtEntry);
	printf("%p\n",g_tmp);
	getchar();

	return 0;
}

把高地址的内容打印出来:

如有不足的地方,请予以指正

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值