一种注册表沙箱的思路、实现
从今年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拷贝到我们重定向的键下么?或许这是一种一劳永逸的方法,但是谁也不愿意去当第一次触发“拷贝”操作的倒霉小孩。于是定下以下规则:
- 原始对象不能修改(修改值,属性,删除)
- 创建,我会在重定向注册表(其实就是真实注册表一个子键)中创建它。
- 枚举、查询、打开、关闭,我会综合原始注册表和重定向表之后去操作。
- 修改,我会在对应的重定向注册表中修改它
- 删除,我优先在重定向表中删除,其次再“操作”原始注册表(不是真删除,而是找个位置做标记)
基于以上的原则和规则,就可以开始我们的开发之旅了。
一种注册表沙箱的思路、实现相关推荐
- 一种注册表沙箱的思路、实现——注册表的一些基础知识
要做注册表沙箱,就必须要了解部分注册表知识.而注册表的知识很多,本文主要讲述如何在win32系统是上识别注册表映射的.(转载请指明出处) 在我的xp 32bit系统上,Win+R regedit之后打 ...
- 一种注册表沙箱的思路、实现——研究Reactos中注册表函数的实现2
上一篇博文中主要介绍了Reactos中大部分函数的思路和HKEY和HANDLE之间的关系,本文将介绍一些Reactos中有意思的函数和存在bug的函数.(转载请指明出处) CreateNestedKe ...
- 一种注册表沙箱的思路、实现——研究Reactos中注册表函数的实现1
因为我们沙箱注入了一个DLL到了目标进程,并且Hook了一系列NtXX(NtOpenKey)函数,所以我们在注入的代码中是不能使用RegXX(RegOpenKey等)这类函数的.因为RegXX系列函数 ...
- 一种注册表沙箱的思路、实现——研究Reactos中注册表函数的实现3
这篇我们看一个"容错""节省"的实例.一下是一个Win32API的声明(转载请指明出处) LONG WINAPI RegEnumKeyEx(__in HKEY ...
- 一种注册表沙箱的思路、实现——研究Reactos中注册表函数的实现4
今天为了KPI,搞了一天的PPT,搞得恶心想吐.最后还是回到这儿,这儿才是我的净土,可以写写我的研究. 这儿讲一些Reactos中一些明显的错误.(转载请指明出处) 在Reactos的RegQuery ...
- 一种注册表沙箱的思路、实现——Hook Nt函数
Nt函数是在Ring3层最底层的函数了,选择此类函数进行Hook,是为了提高绕过门槛.我的Hook方案使用的是微软的Detours.(转载请指明出处) Detours的Hook和反Hook的写入如下: ...
- wince注册表介绍
欢迎加入Wince技术讨论群QQ#326444254 0 引言 嵌入式操作系统Windows CE和桌面操作系统一样使用注册表(Registry)来保存应用程序.驱动程序和用户的设定以及其他一些配置信 ...
- 基于WinCE的嵌入式系统注册表的研究(转载)
摘要:本文首先讲述了Windows CE注册表的重要性,它对整个嵌入式系统的正常运行起着关键性作用.然后又介绍了两种注册表存储方式,并着重讲述了基于HIVE的注册表.详细阐述了基于HIVE的注册表的保 ...
- wince注册表结构
2019独角兽企业重金招聘Python工程师标准>>> 与桌面Windows一样,Windows CE也使用注册表(Registry)来保存应用程序.驱动程序和用户的设定以及其他一些 ...
最新文章
- AI每日精选:AI可追踪人体血糖水平;中国或成为首个AI超级大国
- 用Tableau画3D模型之二(提高篇)
- android的动态注册,Android应用开发之BroadcastReceiver(广播)的静态注册和动态注册 --Android开发...
- 最新发布!斯坦福 CS224n 出作业视频详细讲解啦!
- Arm开发板+Qt学习之路-析构函数和对话框一起时
- html中iframe根据子页面内容动态修改高度
- 【鲲鹏来了】鲲鹏迁移过程案例分享
- virtualbox虚拟机上安装centOS的网络配置(安装centos时选择桥接网络)
- #pragma once 与 #ifndef 解析(转载)
- python写math函数_pythonmathcot函数_Matplotlib 编写数学表达式
- 下载新浪股票历史数据
- 在计算机操作系统中操作系统是处于应用软件,计算机操作系统考试复习题
- 【Verilog基础】常见的加法器电路总结(面试常考)(半加器、全加器、行波进位加法器RCA、超前进位加法器CLA)
- mysql建立序列相关操作 sequence
- Cocos精品《地下城堡2》:从挂机到RPG 唯有暗黑始终如一
- javaSe探赜索隐IO--File
- 向量ab怎么用计算机打出来,数学ab上面加一横线-数学符号如何打?急急急!!!向量AB上的剪 – 手机爱问...
- c语言中compar的用法,compare的用法
- 现在香港开银行账户又变难了
- asp毕业设计——基于asp+access的商品销售网站设计与实现(毕业论文+程序源码)——商品销售网