摘要:
1 总览: a) 查看清单文件AndroidManifest注册的各种信息(入口类、权限、广播、服务等) l 发现只有入口类信息: Ø com.test.pac.demo.MainActivity b) 安装程序查看大致行为 l 输入UserName(长度为16) l PassWord 可以输入,也 阅读全文
摘要:
白皮书中 page-fault error code:shadowWalker 原理:接管 指定程序 的 执行页面异常、读写页面异常;然后 调用一下正常的 使其出现在快表;然后恢复到假的pte------ 根据白皮书中 的error code 过滤出 执行、读写异常类型相关:将 402000 这个页面通过修改pte 设置为不存在(直接 给 p位置为 0);这样产生异常 我们接管然后通过 0x10... 阅读全文
摘要:
页面异常捕获过滤: 原理:在 IDT 表中的e 号 处理 是 页面异常处理; 如果 我们 hook 掉 这个回调函数;那么就能获得全部的页面异常;再通过 cr3 对比 捕获指定的 cr3 (进程)的信息;最后再共享的区域将数据输出;然后测试程序获取该自己的页面异常信息;实验中 容易出现的错误:在 c 的时候注意将使用的寄存器(这里是eax)先保存起来;注意 通过栈保存 eax的话注意 相关进入... 阅读全文
摘要:
1 前面做的实验起始有缺陷访问内存之后,后面执行两句代码后;并不能保证刚才访问的代码还在TLB中;有可能被刷新出去了;实验验证缺陷:代码 不连续 TLB 被淘汰:2万次中有1次被淘汰;由于访问代码不连续代码:// 7_TLB_test.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include "pch.h"#include#include#include#d... 阅读全文
摘要:
》 TLB 是为了增加访问内存的效率即 如果 是 29 9 12 分页 请求数据 可能需要访问 4次内存;为了解决这个问题;出现了 TLB (虚拟地址到物理地址的转换关系),如果目标地址在TLB缓存中,那么直接从TLB 取出 物理地址;》 这个实验做起来很麻烦,因为:TLB 是CPU 内部的,没法通过汇编指令访问TLB;调试器,也没有办法知道 TLB 中有哪些项只有通过实验现象 结果,来证明其存在... 阅读全文
摘要:
分配的虚拟内存没有使用之前 是不会映射物理内存的。1 申请区段 目的: 对齐4kb// 定义一个可读可写的区段#pragma section("data seg", read,write) // 在区段里面 定义一个变量 var =1 (这里是区段第一个变量,所以坑定是 4kb对齐的起始地址)declspec(allocate("data seg")) DWORD var = 1;还可以这样申请... 阅读全文
摘要:
可以用来做进程保护!!! 平行得2个程序之间》通过cr3的切换,导致运行的代码是另外一个程序中的代码上面代码的缺陷:不能动态获取cr3,得程序二先运行打印出来不能很好平行的切换代码执行注意 这里实验的时候,需要多次调整地址;使得能平行过渡到另一个程序;可以使用Nop 这些填充来控制两者之间代码过度的位置照应。程序1:// 6_平行进程A.cpp : 此文件包含 "main" 函数。程序执行将在此处... 阅读全文
摘要:
注意:cr3 切换 ,导致eip 指向的页面,改变为对应cr3 的页面;所以代码也变了;这里需要将这部分代码放入公共区域。解决:使用 类似前面 山寨 systemfastcallentry 的方法;使用 int 20 将代码拷贝到 高2gb 公共区域。 注册到 int 21,然后中断调用即可。 阅读全文
摘要:
原理: 修改 进程空间 虚拟 零地址 的 pte 为 一个当前程序的全局变量;这样 零地址 指向的就是 同一个物理页且属性相同;修改 一个虚拟地址数据;另外的虚拟地址数据同样会改变。注意: 中间加阴影的部分 是为了刷新 TLB 快表,后面章节有详解。测试结果:这里不知道为什么printf时候 我的 exception handler 4 检测异常;导致输出不了;但是的确0页 映射到了 和全局变量... 阅读全文
摘要:
前置知识:在 windows 中 保护模式 有两种模式: 段保护 和 页保护段保护 主要体现在 段选择子上;但是数据段、代码段、栈段等采用的都是4GB平坦模式,段的特征并没有那样展现。所以具体的保护机制 采用的是页保护。PAE和 非PAE:页保护 有两种:非 PAEPAE开启 PAE: 在 boot.ini 中 设置:为 noexcute -- 即不可执行 ;激活 DEP 的功能 -在这个时候 ... 阅读全文