TLB实验

0x001 实验环境 xp3 2-9-9-12 分页环境 0x002 时间代码 // 20180327_01.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <stdio.h> #include <windows.h> DWORD zero, one, two; __declspec(naked) void MountPageOnNull() { ...

阅读全文>>

ė264次浏览 60条评论 0

PAE分页下的PDT-PTT基址

PDE 和 PTE 地址计算公式 为了先入为主,这里直接给出访问一个线性地址的 PDE 和 PTT 的计算公式。PAE分页,把线性地址分成了四段,即PDPTI-PDI-PTI-OFFSET. 如果要找出这个线性地址对应的 PDE 和 PTE 的位置,可以使用下面的计算公式。 公式一不过,我们可以采用更简洁的方式来计算PDE和PTE的位置,这种方式不需要事先计算 PDPTI、PDI 和 PTI。 公式二 // addr 存放的是线性地址 pPDE = (int*)(0xc0600000 + ((addr >> 18...

阅读全文>>

ė255次浏览 60条评论 0

PDT/PTT基址

知道了PDT和PTT的基址,那么PDE和PTE的基址就很容易得到,只要加上偏移就行了。 如果一个线性地址被拆分成三段式PDI-PTI-OFFSET,则有: PDE 的基址 // 第 PDI 个 PDE 的基址 PDT[PDI] = 0xc0300000 + PDI * 4 1 2 PTE 的基址 // 第 PDI 个 PDE 指向的 PTT 中的第 PTI 个 PTE 的基址 PTE[PTI] = 0xc0000...

阅读全文>>

ė194次浏览 60条评论 0

PDE与PTE

从上面的结构,发现 PDE 和 PTE 的结构基本上差不多,但是有个别比如第 7 位就不一样。 属性含义 P:有效位。0 表示当前表项无效。 R/W: 0 表示只读。1表示可读写。 U/S: 0 表示特技用户可访问,1表示普通用户可访问。 A: 0 表示该页未被访问,1表示已被访问。 D: 脏位。0表示该页未写过,1表示该页被写过。 PS: 只存在于页目录表。0表示这是4KB页,指向一个页表。1表示这是4MB大页,直接指向物理页。 PWT、PCD、G:暂不...

阅读全文>>

ė181次浏览 60条评论 0

任务门测试实验

0x001 部署环境 eq 8003f500 0000e500`00c30000 eq 8003f0c0 0000e912`fdcc0068 0x002 测试代码 // 20180323_01.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <windows.h> #include <stdio.h> DWORD dwOK; DWORD dwESP; DWORD dwCS;...

阅读全文>>

ė219次浏览 60条评论 0

TSS切换实验

0x001 TSS的基础知识 TSS是一段内存结构 char st[10] = {0}; // st 的地址是 0042b034 TSS tss = {// tss的地址是 0x00427b40 0x00000000,//link (DWORD)st,//esp0 0x00000010,//ss0 0x00000000,//esp1 0x00000000,//ss1 0x00000000,//esp2 0x00000000,//ss2 0x00000000,//cr3 0x0040...

阅读全文>>

ė250次浏览 60条评论 0

神秘巨星 颁奖背景音乐

流沙 | 随笔 | 2018-03-21
http://5sing.kugou.com/bz/3006614.html

阅读全文>>

ė175次浏览 60条评论 0

【转载】中断门提权测试

原文地址: http://blog.csdn.net/q1007729991/article/details/52644720 除了使用调用门进行提权,本篇的中断门显的更加重要。因为在 Windows 中,大量使用了中断门。 中断门的结构 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 字节 |76543210|76543210|7 65 4 3210|76543210|76543210|76543210|76543210|76543210| 比特 |-----------------|1|--|0|1110|-...

阅读全文>>

ė214次浏览 60条评论 0

IDT详解

IDT,Interrupt Descriptor Table,中断描述符表是CPU用来处理中断和程序异常的。 一、有关IDT的基本知识 1、中断时一种机制,用来处理硬件需要向CPU输入信息的情况。 比如鼠标,键盘等。 2、中断和异常的产生是随机的,在CPU正常运行过程中随时可能产生。CPU的中断处理机制 3、中断可以由硬件产生(称为外部中断),也可以由软件产生(称为内部中断),在程序中写入int n指令可以产生n号中断和异常(n从0-ffh)。 4、同时CPU的中断异常机制还是重要特性的支...

阅读全文>>

ė206次浏览 60条评论 0

调试门测试(四) 简单总结

1) 当通过门,权限不变的时候,只会PUSH两个值:CS  返回地址 新的CS的值由调用门决定 2) 当通过门,权限改变的时候,会PUSH四个值:SS ESP CS  返回地址   新的CS的值由调用门决定  新的SS和ESP由TSS提供 3) 通过门调用时,要执行哪行代码有调用门决定,但使用RETF返回时,由堆栈中压人的值决定,这就是说,进门时只能按指定路线走,出门时可以翻墙(只要改变堆栈里面的值就可以想去哪去哪) 4) 可不可以再建个门出去呢?也就是用Call  当然可以了 前门进 后门出

阅读全文>>

ė222次浏览 60条评论 0

调用门测试(三) 参数传递

0x001 设置环境 eq 8003f048 0040EC03`00081030 0x002 测试代码 #include <windows.h> #include <stdio.h> DWORD x; DWORD y; DWORD z; void __declspec(naked) GateProc() { __asm{ pushad pushfd mov eax,[esp+0x24+0x8+0x8] mov DWORD ptr ds:[x],eax mov eax...

阅读全文>>

ė206次浏览 60条评论 0

调用门提权测试(二)

直接上代码, 能看懂就理解了 记录一下 #include <windows.h> #include <stdio.h> BYTE GDT[6]={0}; DWORD dwH2GValue; void __declspec(naked) GetRegister() { __asm{ pushad pushfd mov eax,0x8003f00c //读取高2G内存 mov ebx,[eax] mov dwH2GValue,ebx sgdt GDT; ...

阅读全文>>

ė250次浏览 60条评论 0

调用门测试(一)

0x01 调用门的基础知识 调用门执行流程 指令格式:CALL  CS:EIP(EIP是废弃的) 执行步骤: 1) 根据CS的值 查GDT表,找到对应的段描述符  这个描述符是一个调用门. 2) 在调用门描述符中存储另一个代码段段的选择子. 3) 选择子指向的段  段.Base + 偏移地址 就是真正要执行的地址. 0x02门描述符 0x03 构造调用门 eq 8003f048 0040EC00`00081020 0x0...

阅读全文>>

ė229次浏览 60条评论 0

windbg 常用命令

目录: (1) u命令(反汇编) (2) dt命令(查看数据结构) (3) ln命令(查找就近的符号) (4) x命令(显示模块的符号) (5) k命令(显示调用栈) (6) d命令(以数据方式显示) (7) b命令(断点) (8) lm lmvm (显示模块信息) (9) .reload (重加载模块) (10) !process !thread .process .thread (查看进程线程信息) (11) !object (查看对象信息) (1...

阅读全文>>

ė227次浏览 60条评论 0

代码跨段 详细步骤

本质就是修改CS段寄存器 JMP 0x20:0x004183D7 CPU如何执行这行代码? (1) 段选择子拆分 0x20 对应二进制形式 0000 0000 0010 0000 RPL = 00    TI = 0 Index = 4 (2) 查表得到段描述符 TI = 0 所以查GDT表 Index = 4 找到对应的段描述符 四种情况可以跳转:代码段、调用门、TSS任务段、任务门 (3) 权限检查 如果是非一致代码段,要求:CPL == DPL 并且 RPL <= DPL 如果是一致代码段,要求:CP...

阅读全文>>

ė228次浏览 60条评论 0

CPL DPL RPL

数据段的权限检查 参考如下代码: 比如当前程序处于0环,也就是说CPL=0 Mov ax,000B //1011   RPL = 3 Mov ds,ax //ax指向的段描述符的DPL = 0 数据段的权限检查: CPL <= DPL  并且 RPL <= DPL (数值上的比较) 注意: 代码段和系统段描述符中的检查方式并不一样,具体参加后面课程. 总结: CPL  CPU当前的权限级别 DPL  如果你想访问我,你应该...

阅读全文>>

ė193次浏览 60条评论 0

D/B位

ė186次浏览 60条评论 0

分析GDT表

0x001 读取GDT表 (删除部分 00000000 ) 0: kd> dq 8003f000 l 3ff 8003f000  00000000`00000000 00cf9b00`0000ffff 8003f010  00cf9300`0000ffff 00cffb00`0000ffff 8003f020  00cff300`0000ffff 80008b04`200020ab 8003f030  ffc093df`f0000001 0040f300`00000fff 8003f040  0000f200`040...

阅读全文>>

ė317次浏览 60条评论 0

保护模式(二) 段描述符属性:S位 TYPE域

根据段描述符进行的拆分 S位 S = 1 代码段或者数据段描述符 S = 0 系统段描述符 S=1的TYPE域作用 A 访问位,表示该位最后一次被操作系统清零后,该段是否被访问过.每当处理器将该段选择符置入某个段寄存器时,就将该位置1. W 是否可写 E 扩展方向 A 访问位 R 可读位 C 一致位 C = 1 一致代码段 C = 0 非一致代码段 S=0 的时候 系统段的分类 直接...

阅读全文>>

ė259次浏览 60条评论 0

windbg + VirtualKD + vmware

0x001 搭建过程 vmware上安装干净版本的xp3, [记住一定要干净版本的, 我昨天用了我以前的一个xp !process命令一直不能使用] 把VirtualKD 的target目录 复制到 虚拟机中 运行 直接确定即可 本机打开: 配置调试器(找到windbg的位置,点击确定即可): 0x002 配置 符号表 重启虚拟机,运行, 会自动打开windbg 运行 g 命令 接着下载符号: S...

阅读全文>>

ė217次浏览 60条评论 0

Ɣ回顶部