从今年4月份开始,我接触到一个沙箱项目。该项目的需求要求我们的沙箱具有良好的安全性和兼容性。当时我们研究了SandBoxIE和360的沙箱,基本确定通过“重定向”思路来实现这款沙箱。而我主要负责研究注册表这块。(转载请指明出处)

在操作系统中,我们对一个对象(文件、注册表键等)的操作存在“创建”、“打开”、“关闭”、“修改”、“删除”和“查询”等。这些操作的源便是那个对象,“重定向”思路就是针对这个对象“作手脚”。说得通俗点,就是通过“狸猫换太子”的方式达到欺骗上层的目的。以后有什么操作,我们便是对这个“狸猫”去作,从而达到保护“太子”的目的。说的“程序化”点,就是比如Create(APath) 要试图创建APath路径的对象(文件,注册表键等),我们通过Hook到Create的底层函数,获取APath,通过一定的规则将APath转换为BPath,同时创建BPath上的对象,将创建结果返回。当然以上只是最最简单的情况,而实际的思路则比这个要复杂的多。

要达到“狸猫换太子”的目的,我们必须要在外界第一次接触到“太子”之前就下手做点事。于是这就涉及到下手早晚的问题。总得来说存在两种方案:

一种方法是把“太子”的胚胎取出换到猫的肚子里培育,将“狸猫”的胚胎换到皇后(当然可能是其他女性)的肚子里培育。这种方案的优点是:我们在之前任何一个没人注意的时刻完成以上操作,从此就不用管啥了。但是缺点是:太不稳定,如果出问题了,那就是“胎死腹中”,对好坏哪方都没个交代。

一种是把刚出生的“太子”抱走,再抱来一只“狸猫”。这种方案优点是:安全稳定,两种不同物种培育自己的胚胎问题不大。问题是:在“太子”出生这个万众瞩目的时刻,我们如何安全的将“太子”抱走,在把“狸猫”抱过来。

貌似小说中都是使用第二种方案,我想可能是因为科技还不够发达,不能让不同DNA的动物之间相互培育胚胎。同样,针对我们这个项目,我们同样秉承一个准则:“能在ring3做的,我们就在ring3层做”,因为ring0层我们还没足够的把握去保证稳定性,而且一旦出了问题就是大问题——蓝屏(胎死腹中)。于是我们要Hook的函数是Ring3层NtDll中NtCreateKey、NtOpenKey和NtDeleteKey等函数。

以上的讨论我们可以通过“狸猫和太子”的关系来描述。因为“狸猫”和“太子”都是一个完整的个体,所以描述非常方便。然而实际操作中,完整的将“狸猫”塑造成一个人样的“太子”形象是非常不现实的,因为整容费用太大。同样针对我们的项目,我们不可能将所有操作的对象都创造一个一样的真实的“映射”对象。打个比方,一个操作要枚举Classes Root注册表键,难道我们要将成千上万子键的Classes Root拷贝到我们重定向的键下么?或许这是一种一劳永逸的方法,但是谁也不愿意去当第一次触发“拷贝”操作的倒霉小孩。于是定下以下规则:

  1. 原始对象不能修改(修改值,属性,删除)
  2. 创建,我会在重定向注册表(其实就是真实注册表一个子键)中创建它。
  3. 枚举、查询、打开、关闭,我会综合原始注册表和重定向表之后去操作。
  4. 修改,我会在对应的重定向注册表中修改它
  5. 删除,我优先在重定向表中删除,其次再“操作”原始注册表(不是真删除,而是找个位置做标记)

基于以上的原则和规则,就可以开始我们的开发之旅了。

一种注册表沙箱的思路、实现相关推荐

  1. 一种注册表沙箱的思路、实现——注册表的一些基础知识

    要做注册表沙箱,就必须要了解部分注册表知识.而注册表的知识很多,本文主要讲述如何在win32系统是上识别注册表映射的.(转载请指明出处) 在我的xp 32bit系统上,Win+R regedit之后打 ...

  2. 一种注册表沙箱的思路、实现——研究Reactos中注册表函数的实现2

    上一篇博文中主要介绍了Reactos中大部分函数的思路和HKEY和HANDLE之间的关系,本文将介绍一些Reactos中有意思的函数和存在bug的函数.(转载请指明出处) CreateNestedKe ...

  3. 一种注册表沙箱的思路、实现——研究Reactos中注册表函数的实现1

    因为我们沙箱注入了一个DLL到了目标进程,并且Hook了一系列NtXX(NtOpenKey)函数,所以我们在注入的代码中是不能使用RegXX(RegOpenKey等)这类函数的.因为RegXX系列函数 ...

  4. 一种注册表沙箱的思路、实现——研究Reactos中注册表函数的实现3

    这篇我们看一个"容错""节省"的实例.一下是一个Win32API的声明(转载请指明出处) LONG WINAPI RegEnumKeyEx(__in HKEY ...

  5. 一种注册表沙箱的思路、实现——研究Reactos中注册表函数的实现4

    今天为了KPI,搞了一天的PPT,搞得恶心想吐.最后还是回到这儿,这儿才是我的净土,可以写写我的研究. 这儿讲一些Reactos中一些明显的错误.(转载请指明出处) 在Reactos的RegQuery ...

  6. 一种注册表沙箱的思路、实现——Hook Nt函数

    Nt函数是在Ring3层最底层的函数了,选择此类函数进行Hook,是为了提高绕过门槛.我的Hook方案使用的是微软的Detours.(转载请指明出处) Detours的Hook和反Hook的写入如下: ...

  7. wince注册表介绍

    欢迎加入Wince技术讨论群QQ#326444254 0 引言 嵌入式操作系统Windows CE和桌面操作系统一样使用注册表(Registry)来保存应用程序.驱动程序和用户的设定以及其他一些配置信 ...

  8. 基于WinCE的嵌入式系统注册表的研究(转载)

    摘要:本文首先讲述了Windows CE注册表的重要性,它对整个嵌入式系统的正常运行起着关键性作用.然后又介绍了两种注册表存储方式,并着重讲述了基于HIVE的注册表.详细阐述了基于HIVE的注册表的保 ...

  9. wince注册表结构

    2019独角兽企业重金招聘Python工程师标准>>> 与桌面Windows一样,Windows CE也使用注册表(Registry)来保存应用程序.驱动程序和用户的设定以及其他一些 ...

最新文章

  1. AI每日精选:AI可追踪人体血糖水平;中国或成为首个AI超级大国
  2. 用Tableau画3D模型之二(提高篇)
  3. android的动态注册,Android应用开发之BroadcastReceiver(广播)的静态注册和动态注册 --Android开发...
  4. 最新发布!斯坦福 CS224n 出作业视频详细讲解啦!
  5. Arm开发板+Qt学习之路-析构函数和对话框一起时
  6. html中iframe根据子页面内容动态修改高度
  7. 【鲲鹏来了】鲲鹏迁移过程案例分享
  8. virtualbox虚拟机上安装centOS的网络配置(安装centos时选择桥接网络)
  9. #pragma once 与 #ifndef 解析(转载)
  10. python写math函数_pythonmathcot函数_Matplotlib 编写数学表达式
  11. 下载新浪股票历史数据
  12. 在计算机操作系统中操作系统是处于应用软件,计算机操作系统考试复习题
  13. 【Verilog基础】常见的加法器电路总结(面试常考)(半加器、全加器、行波进位加法器RCA、超前进位加法器CLA)
  14. mysql建立序列相关操作 sequence
  15. Cocos精品《地下城堡2》:从挂机到RPG 唯有暗黑始终如一
  16. javaSe探赜索隐IO--File
  17. 向量ab怎么用计算机打出来,数学ab上面加一横线-数学符号如何打?急急急!!!向量AB上的剪 – 手机爱问...
  18. c语言中compar的用法,compare的用法
  19. 现在香港开银行账户又变难了
  20. asp毕业设计——基于asp+access的商品销售网站设计与实现(毕业论文+程序源码)——商品销售网

热门文章

  1. pip install可能遇到的一些问题
  2. 【radar】毫米波雷达静态障碍物识别及其相关资料(仿真、生成、标定、运动估计、静态障碍物识别)(3)
  3. 生成式对抗网络的原理和实现方法
  4. string 基本用法
  5. poj 2449 Remmarguts' Date 启发式搜索 A*算法
  6. 机器学习(实战)facebook地址预测
  7. shell中引号的使用方法
  8. C++多线程:互斥变量 std::mutex
  9. JSP+Servlet+JavaBean
  10. node编写定时任务,for循环只执行一遍的解决办法