摘要: 思想: 再次在 GDT 中偷内存 搭建 系统调用需要的 逻辑框架与功能实现;基本分解妄想:构建系统调用的代码:拷贝到 偷取的内存中:idt 向量 序号21位置: 8003ee00`0008f120 各函数的实现:注意: systemcallentry() 中esp + 0xc 是 3环 的 esp3环的 esp 应该是调用 函数的时候的发怒hi地址;所以实际的参数 是 + 4 偏移的位置。... 阅读全文
posted @ 2019-10-22 13:00 leibso二狗 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 0 查看 kifastcallentry 里面具体怎么调用首先是 切换了 fs 为kpcr的选择子然后 构造了 一个trap frame(保存3环--》0环 切换的上下文;如果0环不使用就没啥用,就不用构造;例如这里实验就没有构造,只是 切换了内核的kpcr)1 使用内核api 申请内存 注意:1.1 这里的函数地址是写死的,真正的地址应该动态获取1.2 这里push 0x3b ; pop fs ... 阅读全文
posted @ 2019-10-22 11:43 leibso二狗 阅读(151) 评论(0) 推荐(0) 编辑
摘要: 1 shellcode低2Gb警告、应使用高2GB 稳定 :在内核挂钩子:由于每个进程的低2gb 的数据是不同的;所以 在内核挂钩子 因该把 代码 放在 高 2gb。方法1(申请):比如 使用前面的 ExAllocatePool(0,size);分配非分页内存,然后把shellcode 拷贝到 非分页内存。方法2(偷内存):注意: 偷的时候 看一下 页属性 是否可读可写可执行在内核固定 没有使用... 阅读全文
posted @ 2019-10-22 11:43 leibso二狗 阅读(210) 评论(0) 推荐(0) 编辑
摘要: 1 直接开启sti --蓝屏2 配置环境 正确开启sti 中断kpcr -- 很多重要线程切换的数据、结构进入内核的时候 fs 不再是teb/tib; 是kpcr。同时观察 kifastcallentry,发现 的确设置了 fs 为内核的 kpcr:那我们手动修改成 kpcr ;注意: 如果 直接使用fs 不行;那么就查相关硬编码 来代替。效果 系统不卡,且任何方式杀不掉,关机也杀不掉: 当前... 阅读全文
posted @ 2019-10-22 11:41 leibso二狗 阅读(250) 评论(0) 推荐(0) 编辑
摘要: 理论:int x; 中断处理 响应切换(es、ss、esp) 应该由 硬件支持;如果其中交由汇编程序;那么还是不安全的,还是可以认为i控制。同理 iretd返回 也需要硬件支持。中断 使用到了 tss 数据段中的 ss esp;cs 怎么来的:来自于 我们构造的中断门 中的段选择子 如 : 0040ee00~00081040 这里 段选择子就是 8. 所以 切换之后的cs 就是8ss\esp ... 阅读全文
posted @ 2019-10-22 11:39 leibso二狗 阅读(112) 评论(0) 推荐(0) 编辑
摘要: 虚拟机和模拟器区别:-- windbg双机调试给虚拟机下断点是跟虚拟机子系统进行交互,可能windbg调试器会修改到内核环境:比如寄存器、gdt表等会被改变(有时候你调试发现windbg中gdt 的某项数据 和 pchunter 中gdt的某个数据不一致;其实,大概率pchunter才是正确的 );原因如前面一句话所述;-- 模拟器 (如 bochs)是实时的数据;下断点是模拟断点(用内存模拟的)... 阅读全文
posted @ 2019-10-22 11:38 leibso二狗 阅读(137) 评论(0) 推荐(0) 编辑
摘要: 1 查看中断前后 上下文的变换使用 代码打印 进入 中断前后的 上下文,发现有 cs ss esp 改变了。中断门只用到了 TSS数据段中 cs ss esp 这几个东西;任务门 任务切换用到了更多的上下文 TSS 数据段的所有数据 。TSS 数据格式:2 代码:// 3_中断现场分析.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//​#include "pch.h"... 阅读全文
posted @ 2019-10-22 11:35 leibso二狗 阅读(221) 评论(0) 推荐(0) 编辑
摘要: 前置知识为了防止中断嵌套会自动 cli 在中断能处理的时候会自动 cli -- 清除中断标记位 if。 这样如果在if = 0 的时候 ,0环死循环 那么就会造成系统假死崩溃。实际代码验证我们把前一次的代码设置成死循环void _declspec(naked) IdtEntry(){// 这里是裸函数,所以不会有函数头 push ebp,mov ebp,esp,,和 ret x / sub es... 阅读全文
posted @ 2019-10-22 11:34 leibso二狗 阅读(216) 评论(0) 推荐(0) 编辑
摘要: 1 使用pchunter查看系统中断表(中断描述符表)1.1 那些中断处理地址内核高2GB ,所以中断处理环境坑定在0环利用分析:那我们把自己得处理函数放在这里面,那经过这个表调用就能获得高权限;注意: 代码 应该把随机基址关闭,并且使用release版本,这样地址稳定一些,debug 即使不开随机基址,可能运行中 子函数的地址会因为重构(当你改变内容的时候,可能编译器判断换个地址更优)而改变。注... 阅读全文
posted @ 2019-10-22 11:31 leibso二狗 阅读(264) 评论(0) 推荐(0) 编辑
摘要: 0 开发工具 VS20171 先从win xp 开始2 最好是纯净的 win xp 这样遇到的坑少顺利更贴合我们学习目的3 搭建双机环境:使用串口--在虚拟机定义全局管道符号链接形如:在虚拟机的启动选项里面添加上:; 。。 具体百度 记不到-b -- 连接的时候将虚拟机子系统段下来-k -- kernel内核调试com:pipe,port 指定连接串口-resets -- 调试子系统是否需要重... 阅读全文
posted @ 2019-10-22 11:28 leibso二狗 阅读(147) 评论(0) 推荐(0) 编辑