当前位置: 首页 > 编程日记 > 正文

一种注册表沙箱的思路、实现

从今年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. 删除,我优先在重定向表中删除,其次再“操作”原始注册表(不是真删除,而是找个位置做标记)

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

相关文章:

PyTorch实现L2和L1正则化的方法 | CSDN博文精选

作者 | pan_jinquan来源 | CSDN博文精选目录1.torch.optim优化器实现L2正则化2.如何判断正则化作用了模型?2.1未加入正则化loss和Accuracy2.1加入正则化loss和Accuracy2.3正则化说明3.自定义正则化的方法3.1自定义正则化Regularization类3.2Regularization使用方法4…

构建插件式的应用程序框架(六)----通讯机制(ZT)

前天发了构建插件式的应用程序框架(五)----管理插件这篇文章,有几个朋友在回复中希望了解插件之间是如何通讯的。这个系列的文章写到这里,也该谈谈这个问题了,毕竟已经有了插件管理。不知道大家…

【翻译】将Ext JS Grid转换为Excel表格

原文:Converting an Ext 5 Grid to Excel Spreadsheet稍微迟来的礼物——Ext JS Grid转为Excel代码,现在支持Ext JS 5!功能包括: - 支持分组 - 数字的处理 VS 字符串数据类型 - 对于不支持客户端下载的浏览器会提交回服务器Enjoy&…

AI研究过于集中狭隘,我们是不是该反思了?

作者 | Sergii Shelpuk译者 | 陆离编辑 | 夕颜出品 | AI科技大本营(ID: rgznai100)【导读】2019年是AI领域更加冷静的一年,少了些喧嚣和泡沫,大浪淘沙留下的是经过检验的真正的AI研究者、实践者。但是你也许没有发现,本…

上周回顾:微软与苹果比赛谁更“不安全”

每个月的第二周应该是微软例行发布补丁的日子,本周也不例外,微软如定期新闻发布会一样公布了自己的安全公告。这本来已经成了例如51CTO.com这样关注企业网络安全的媒体重要的素材,不过没想到的是本周苹果偏要抢这个风头……热点一&#xff1a…

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

要做注册表沙箱,就必须要了解部分注册表知识。而注册表的知识很多,本文主要讲述如何在win32系统是上识别注册表映射的。(转载请指明出处) 在我的xp 32bit系统上,WinR regedit之后打开注册表管理器。我们可以看到如下主…

bzoj 2565: 最长双回文串 manacher算法

2565: 最长双回文串 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem.php?id2565 Description 顺序和逆序读起来完全一样的串叫做回文串。比如acbca是回文串,而abc不是(abc的顺序为“abc”,逆…

44岁的微软如何刷新未来?

整理 | 伍杏玲出品 | AI科技大本营(ID:rgznai100)在当今的“云”时代,很多企业在多个云计算平台部署应用,且需要统一管理和保护应用。在微软Ignite 2019 大会上,为了让企业轻松地在任何类型的基础设施平台上…

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

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

浅析Struts 体系结构与工作原理(图)

Struts 体系结构是目前基于java的 web系统设计中广泛使用的mvc构架。基本概念    Struts是Apache 基金会Jakarta 项目组的一个Open Source 项目,它采用模型-视图-控制器(Model-View- Controller,简称MVC)模式,能够…

2015第22周一Web性能测试工具及IE扩展区别

在高性能web测试工具推荐http://www.jb51.net/article/23034.htm中发现了dynaTrace 感觉很不错,不但可以检测资源加载瀑布图,而且还能监控页面呈现时间,CPU花销,JS分析和执行时间,CSS解析时间的等。http://www.ibm.com…

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

因为我们沙箱注入了一个DLL到了目标进程,并且Hook了一系列NtXX(NtOpenKey)函数,所以我们在注入的代码中是不能使用RegXX(RegOpenKey等)这类函数的。因为RegXX系列函数在底层使用了NtXX系列函数,如果在注入DLL执行Hook后的逻辑中使用了RegXX系…

面试大厂背怼!这都搞不定,你只能做“搬运工”!

每一个面试过大厂的程序员似乎总会有种种困境:毕业季参加大厂校招面试,我本以为做过一些真实项目就不错了,没想到根本没问什么项目,都是基础知识,数学、算法,然而平时只喜欢学程序设计。小公司工作3年&…

net程序架构开发

< DOCTYPE html PUBLIC -WCDTD XHTML StrictEN httpwwwworgTRxhtmlDTDxhtml-strictdtd> 程序架构,功能的划分: 数据库(包括存储过程) 数据访问(包括Microsoft Application Blocks for .NET的2.0版) 数据结构(等价于强类型DataSet) 业务逻辑层 业务表现层 数据库:不用说…

Java面向对象学习笔记 -- 6(内部类、Timer)

1. 内部类内部类就是在一个类的内部定义的类&#xff0c;有&#xff1a;静态内部类、成员内部类&#xff0c;局部内部类、匿名内部类。-1) 静态内部类&#xff1a;使用static修饰&#xff0c;声明在类体中&#xff0c; 静态内部类中可以访问外部类的静态成员&#xff0c;开发很…

30年间,软件开发行业为何Bug纷飞?

作者 | Chris Fox译者 | 弯月&#xff0c;责编 | 屠敏出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;【导语】在时间的推移历程中&#xff0c;软件行业早已发生了天翻地覆的变化。和曾经大家习以为常的编码日常相比&#xff0c;越多越多的开发者发现&#xff0c;如…

去掉字符串两端的全角空格和半角空格(含源代码)

昨天&#xff0c;遇到了一个技术问题。本来我在程序中用的trim()方法来处理从JSP页面传来的值,后来在测试时&#xff0c;发现当我输入的是全角空格时&#xff0c;trim()方法失效。需求是这样的&#xff0c;只是去掉字符串两端的空格&#xff08;不论是全角空格还是半角空格&…

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

上一篇博文中主要介绍了Reactos中大部分函数的思路和HKEY和HANDLE之间的关系&#xff0c;本文将介绍一些Reactos中有意思的函数和存在bug的函数。&#xff08;转载请指明出处&#xff09;CreateNestedKey是一个辅助创建键的函数&#xff0c;比如我们要创建\Regsitry\User\3\2\1…

云计算安全解决方案白皮书(一)

云计算安全解决方案白皮书Jack zhai研究云的安全有两三年了&#xff0c;但形成完整的安全思路&#xff0c;还是去年的事&#xff0c;这也是“流安全”思路形成的主要阶段。云计算的安全问题之所以突出&#xff0c;是因为虚拟机的动态迁移&#xff0c;以及多业务系统交织在一起&…

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

这篇我们看一个”容错“”节省“的实例。一下是一个Win32API的声明&#xff08;转载请指明出处&#xff09; LONG WINAPI RegEnumKeyEx(__in HKEY hKey,__in DWORD dwIndex,__out LPTSTR lpName,__inout LPDWORD lpcName,__reserved LPDWORD lp…

腾讯Angel升级:加入图算法,支持十亿节点、千亿边规模!中国首个毕业于Linux AI基金会的开源项目...

出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;【导语】Angel 是腾讯的首个AI开源项目&#xff0c;于 2016 年底推出、2017年开源。近日&#xff0c;快速发展的 Angel 完成了从 2.0 版本到 3.0 版本的跨越&#xff0c;从一个单纯的模型训练系统进化成包…

如何在JSP页面中获取当前系统时间转

出自&#xff1a;http://hi.baidu.com/itfuck_/item/803662469cdf7baa61d7b945 1: import java.util.*; int y,m,d,h,mm; Calendar c Calendar.getInstance(); y c.get(Calendar.YEAR); //年 m c.get(Calendar.MONTH) 1; //月 d c.get(Calendar.DAY_OF_MONTH); //日 …

如何用Python实现超级玛丽的界面和状态机?

作者 | marble_xu编辑 | 郭芮来源 | CSDN博客小时候的经典游戏&#xff0c;代码参考了github上的项目Mario-Level-1&#xff08;https://github.com/justinmeister/Mario-Level-1&#xff09;&#xff0c;使用pygame来实现&#xff0c;从中学习到了横版过关游戏实现中的一些处理…

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

今天为了KPI&#xff0c;搞了一天的PPT&#xff0c;搞得恶心想吐。最后还是回到这儿&#xff0c;这儿才是我的净土&#xff0c;可以写写我的研究。 这儿讲一些Reactos中一些明显的错误。&#xff08;转载请指明出处&#xff09; 在Reactos的RegQueryInfoKeyW中有段这样的实现 i…

Netscaler 认证,访问报http 5000 内部错误

在VDI项目中&#xff0c;Netscaler经常与AD不在同一网络&#xff0c;有时在icaprofile中写的SF或WI的FQDN&#xff0c;访问VDI&#xff0c;会报http 5000 内部错误&#xff1b;解决办法如下&#xff1a;1.NS无法解析Storefont或WI的主机名&#xff0c;需要修改icaprofile 中SF或…

解读 | 2019年10篇计算机视觉精选论文(中)

导读&#xff1a;2019 年转眼已经接近尾声&#xff0c;我们看到&#xff0c;这一年计算机视觉&#xff08;CV&#xff09;领域又诞生了大量出色的论文&#xff0c;提出了许多新颖的架构和方法&#xff0c;进一步提高了视觉系统的感知和生成能力。因此&#xff0c;我们精选了 20…

PE文件和COFF文件格式分析--概述

刚工作的时候&#xff0c;我听说某某大牛在做病毒分析时&#xff0c;只是用notepad打开病毒文件&#xff0c;就能大致猜到病毒的工作原理。当时我是佩服的很啊&#xff0c;同时我也在心中埋下了一个种子&#xff1a;我也得有这天。随着后来的工作进行&#xff0c;一些任务的和这…

2015第22周六Java反射、泛型、容器简介

Java的反射非常强大&#xff0c;传递class&#xff0c; 可以动态的生成该类、取得这个类的所有信息&#xff0c;包括里面的属性、方法以及构造函数等&#xff0c;甚至可以取得其父类或父接口里面的内容。 obj.getClass().getDeclaredMethods();//取得obj类中自己定义的方法&…

中服公司企业信息化的ERP系统选择

中服公司企业信息化的ERP系统选择一、 中服公司概况 1. 组织概况 中服公司创建于1950年9月&#xff0c;是国家120家企业集团试点单位之一&#xff0c;主要经营各类纺织原料、半成品、服装、针棉毛织品以及其他商品的进出口业务&#xff0c;同时通过合资、联营等方…

PE文件和COFF文件格式分析--MS-DOS 2.0兼容Exe文件段

MS 2.0节是PE文件格式中第一个“节”。其大致结构如下&#xff1a;&#xff08;转载请指明来源于breaksoftware的csdn博客&#xff09; 在VC\PlatformSDK\Include\WinNT.h文件中有对MS-DOS 2.0兼容EXE文件头的完整定义 typedef struct _IMAGE_DOS_HEADER { // DOS .EXE h…