18_ShadowWalker

白皮书中 page-fault error code:

1570607688762

shadowWalker 原理:

接管 指定程序 的 执行页面异常、读写页面异常;然后 调用一下正常的 使其出现在快表;然后恢复到假的pte

------ 根据白皮书中 的error code 过滤出 执行、读写异常类型

相关:

  • 将 402000 这个页面通过修改pte 设置为不存在(直接 给 p位置为 0);这样产生异常 我们接管

    • 然后通过 0x10 判断 是否是执行异常;是的话,就将页面给挂上去。

    • 1570610073334

    • 1570615185931

  • 全程接管 读写、执行异常

    • 读写异常 -- 不能交给系统默认处理;因为系统有虚拟地址的管理,他可能以为还没有映射该页面或者可能被置换到磁盘文件等,再次映射;但是还是不是我们想要的正确的。

    • 所以我们接管。

  • 只接管 402000 页面(具体根据项目//后来我的项目是 412000)

    • 因为其他页面也会产生异常;如果想把该程序的都接收,那么得区分出来分别处理,这里我们只处理一个页面就行;原理类似。

  • 利用 TLB 使得瞬间正常,然后又恢复异常状态;不然只接管了一次。

 
  • 在被接管得测试程序 一进入 0环 ,就保存 需要接管的 pte ;代码如上;

  • 异常接管后;如果不给页面的话 ;它会一直死循环 页面异常;所以 我们给他假的页面

  • 创建一个假页面:

1570608936324

 
  • 再把假页面给 内核;这样 我们在内核接管的时候;可以将这个假页面给请求者。

1570609102689

 

 

  • 处理之后不能直接退出;得手动平 error code 这个栈位;因为中断系统只平默认的5个。

1570609714118

  • 接管处理:

    • 代码执行异常:

      • 1570610465408

    • 读写异常接管:

      • 同理。。。 只是纠正后用一下;让其快表中;然后恢复到假页面

  • OD 有时能读出; 要完善的话得考虑OD 和内核通讯得路径

  • 程序退出 有可能蓝屏:

    • 原因: 退出得时候;把页面得pte 应该设置成正常得;前面遇到过重复释放问题。程序有虚拟地址管理;程序结束会回收;找pte 物理页面找不到;会出错。

  • 所以在退出程序得时候将pte 修改回来;还可以将钩子卸掉;

    • 还是得C 了 窗口消息函数 然后 将 pte 得修改回来!★ ---- 这个才是i正确得。。。

 

代码1 被隐藏目标程序:shadowWalker.cpp

 

 

代码2:注册和过滤处理目标页面异常消息

 

 

不知道怎么回事 搬家博客的图片这里显示不了--- 有兴趣的可查看 我博客园 原版 博文 : https://www.cnblogs.com/leibso-cy/category/1573404.html

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值