当前位置:  编程技术>综合
本页文章导读:
    ▪原文翻译:绕过Windows RT的代码完整性检查      今天见RT系统被破解了,作为一个Win32开发者我很高兴,所以找到了原文,人工为大家翻译了一下。 其实我也看得一头晕,英语考试挂科的人,译得也许不咋样,不过原文大意算是表达的比较.........
    ▪小结UML      UML,一种可视化的建模语言,视频看完了,想要整理一下,其实想想关键还是要在应用上加深理解和使用,所以,在这里只是简单的贴出两个图,整理一下自己的思路。 作.........
    ▪有关个性CPU与个性系统的幻想吧      >>>个性CPU http://bbs.tianya.cn/post-it-657472-1.shtml     第一:CPU群内拥有多核U 多指令集U   第二:实现指令可管理   一、在主板上可以放入多种指令集的CPU。   二、用可重组.........

[1]原文翻译:绕过Windows RT的代码完整性检查
    来源: 互联网  发布时间: 2013-11-10
今天见RT系统被破解了,作为一个Win32开发者我很高兴,所以找到了原文,人工为大家翻译了一下。
其实我也看得一头晕,英语考试挂科的人,译得也许不咋样,不过原文大意算是表达的比较完整的。

原文:http://surfsec.wordpress.com/2013/01/06/circumventing-windows-rts-code-integrity-mechanism/
译文:
解决这个问题虽然用了不少时间,但我们确实搞定它了:使未经微软签名的桌面应用程序在Windows RT中运行。
很讽刺的是,这个“漏洞”已经存在了有一段时间了,就像Windows在其他平台的漏洞一样,这个漏洞也跟随母体“转移”到ARM的Windows Kernel中来了,所以让我们使这一切成为可能。
微软强制的不兼容桌面应用程序,使它们不能正常运行,但是Windows RT是个十分干净的客户端,这是一个很好的情况。我们发现,在内核深处中使用UEFI安全引导,和基于散列及签名的数据段关键保护,还有就是验证程序的二进制码最低签名等级。

【查找关键点】
以最低签名级别判断可执行文件是否可以执行是这样做的:0=没有签名,4=可信任代码(文件有签名),8=微软公司的组件,12=Windows系统组件。
而在Intel x86的Windows系统上,这个最低签名判断值为0,也就是说我们可以运行任何程序,即便这个程序没有经过数字签名。而在ARM的Windows RT上,这个值则是8。

这意味着,即使你能申请到个人签名认证,而你使用这个签名开发出来的桌面应用程序仍不能运行在其他Surface RT或Windows RT设备上。这不是用户设置的,是在内核本身内就硬编码了这个全局值。虽然不能改变这个设备启用了永久性UEFI安全引导,但是启动后我们倒可以在内存中修改它!

在内核中找到这个标示最低签名认证的字节,需要很长的一段时间,因为没有导出符号,甚至微软也没有给出符号数据库文件(pdb),可我通过使用WinDbg在一台装有Windows 8 Pro的PC上跟踪创建进程,并观察系统在创建进程时进行签名检查等一切行为,而发现这个检查在一个叫CL.dll的文件内部(译者:有这个文件?),而这个检查在Windows RT上则是如此的相似,是不是可以从ARM的代码内解决它呢,下面是代码:
SeGetImageRequiredSigningLevel+0x18
LDR R3, =0x59FFA6 -> 这是我们的字节指针, 0x19FFA6 at 0x400000(Image Base)
LDRB R3, [R3]
CMP R3, #4
BHI loc_HighSigReq
B.W loc_LowSigReq

其实在其他很多地方你都可以找到对这个字节的访问,可因为没有调试符号,这做起来十分困难。

【分析】
前段时间,我读过一篇关于如何在Windows Kernel中使通过一定地方的数据始终是完整的文章(此处翻译生硬了些),而此漏洞同样存在于Windows RT,但相比Windows 8,要实现起来还是十分的困难,因为无签名的二进制文件无法运行,以及我们也没有调试器,没有在Windows RT上调试这个系统的工具,无法附加到任何进程,十分无奈。
但是,微软却提供了一个起到了很重要作用的工具(Visual Studio 2012 Remote Tools),让这个困难的工作一下子轻松了不少,这个在x86可使用的远程调试器,使用管理员权限运行它,可以附加到RT系统当前用户的csrss进程,查看csrss操作的内存。
我们发现csrss中有大量可以被利用的NtUserSetInformationThread函数调用,以及还有它的参数等信息,利用它可以进行一些猥琐的操作,如下面这一个:
TerminalServerRequestThread+0x230
MOVS R3, #0xC
ADD R2, SP, #0x58
MOVS R1, #9
MOV R0, 0xFFFFFFFE
BL NtUserSetInformationThread (译者注:ARM汇编中的BL即跟x86的CALL指令差不多)

有一个csrss的线程会执行上面这样的代码,使用调试断点,我们可以改变执行NtUserSetInformationThread函数时的数据结构和参数,改变R2寄存器的值,可惜,这是非常不实际的,因为这个漏洞从特定的地址-1,而我们需要减去0x80000,这是因为我们不能在ARM上进行非对齐访问(译者注:4字节对齐),还记得上面没,我们的地址是0x19FFA6,我们不能进行一个非对齐访问,所以我们需要使用0x19FFA4。
我们还需要加载代码到内核映像中(跟x86的载入驱动到Ring0差不多道理),通过调用NtQuerySystemInformation,使用class的值为11,(还可以使任何Windows RT设备上运行未签名的Windows Store应用程序。如果你想知道如何使用NtQuerySystemInformation来进行这个设置,请查阅:Using the complete Windows API in store apps (mamaich at XDA-Developers)),这个11的值返回的数据为我们提供了所有加载驱动的镜像基地址,在这种情况下,绕过ASLR还是有可能的。(虽然这烦人的东西并不是什么ASLR)
(译者注:NtQuerySystemInformation的11号值在x86下为SystemModuleInformation,即获取系统所有载入的驱动设备信息,x86下流程为psapi.EnumDeviceDrivers->kernelbase.K32EnumDeviceDrivers->NtQuerySystemInformation:SystemModuleInformation)

【破解】
使用微软提供的远程调试器调试ARM本机代码,我使用了一片在winsrv.dll的空间(这个dll的基地址是0x10800)来存储这小片shellcode:
push {r5-r8}
mov r7, 0x80000
ldr r8, my_addr
loc_loop_begin:
movs r3, 0xC
add r2, sp, 0x68 ;0x58 org.
add r5, r2, 4
str r8, [r5]
movs r1, 9
mvn r0, 1
mov r12, 0x10E1
svc 1
subs r7, r7, 1
cmp r7, 0
bne loc_loop_begin
pop {r5-r8}
mov r0, r0
my_addr dcd 0x12345678 the kernel's base address + 0x18

现在我们在TerminalServerRequestThread调用NtUserSetInformationThread时设置断点,然后按下音量键,断点会被触发。这倒是十分有趣。
然后我们更改执行代码指针在内存中的地址,改到我们上面的代码,然后在mov r0, r0指令结束时设置一个断点,按F5运行,现在设置指令指针到断点前的第一个指令,再次按F5。
(可能这里译得很恶心,贴原文:Redirect the instruction pointer to the payload in memory and set a breakpoint at the mov r0, r0 instruction at the end. Press F5. Now set the instruction back to the first breakpoint and remove both. Press F5 again.)
这样做后,恭喜你,你的Windows RT设备已经解锁。

【结论】
Windows RT是一个十分干净的Windows 8客户端,看了上文,想必大家也明白,它们的内部其实十分的相像。而微软公司人为的强制进行代码完整性检查,想以此将这2个平台隔离开来,但这并不能避免Windows Store程序的被盗版和修改(及许可检查),因为Windows Store程序本来就可以未经签名执行,这与Windows 8是多么的相似。
而你甚至可以在Windows 8上开启代码完整性检查,来体验一下Windows RT的感觉。

设置这个检查的决定十分恶心,作为一个提高生产力的设备,Windows RT需要Win32的软件生态系统来完善它,市场上的消费型平板已经够多了。
微软,请让我们可以选择是否启用Windows RT的代码检查机制,这样可以增加Windows RT设备的市场价值!

【待解决的破解上的缺陷】
经过我们的修改后,有时候会让系统蓝屏(BugCheck),因为我们无法控制不写入单个字节在0x19FFA4和0x19FFA5内核基地址,而它们有时候是0,修改后则照成了0x18号的蓝屏错误。
我们现在的修改方法对大部分用户来说都是很不切实际的,因为相比PC用户来说,这些平板电脑的消费者都不太可能对计算机有深入的了解。

其实这篇文章的意愿大概就是说,VS2012虽然能编译出Native Code的桌面Windows RT应用程序(见谷歌),可我们无法运行,虽然可以申请个人签名,让这个程序能在本机运行,可发布出去别人还是没办法运行,所以有必要破解掉,这样以后我们可以用VS编译出如x86一样的原生桌面程序,并可分发给其他人在Windows RT的桌面上运行。
可见上面的Native Code都是ARM平台的,所以传统的x86应用程序是不可能运行在RT上的(就像你32系统无法运行64程序一样),即便PE格式一样,可代码完全不同,但如果上层Win32 API接口相同并且都已经实现可用,那就可以使用ARM的Native Code编译器编译到Windows RT的桌面应用程序。也许会有一些小部分的修改,但只要这个x86的Win32项目没有x86本机指令相关的代码和x86 Windows底层相关的代码,就可以比较方便的进行移植到RT设备上,让RT设备得到存在多年的Win32生态系统的强力支持,虽然Win32生态系统很老了,应用程序也没有对触摸进行优化,可在传统的键盘+鼠标模式下,这也就符合了原文作者说的“生产力”设备的概念了。
译者也就解释那么多了,如果有哪里说错,大家要喷我也认了。
作者:a1875566250 发表于2013-1-8 12:10:10 原文链接
阅读:0 评论:0 查看评论

    
[2]小结UML
    来源: 互联网  发布时间: 2013-11-10

UML,一种可视化的建模语言,视频看完了,想要整理一下,其实想想关键还是要在应用上加深理解和使用,所以,在这里只是简单的贴出两个图,整理一下自己的思路。

作者:caozhangyingfei0109 发表于2013-1-8 12:09:57 原文链接
阅读:0 评论:0 查看评论

    
[3]有关个性CPU与个性系统的幻想吧
    来源: 互联网  发布时间: 2013-11-10

>>>个性CPU

http://bbs.tianya.cn/post-it-657472-1.shtml

 

  第一:CPU群内拥有多核U 多指令集U
  第二:实现指令可管理
  一、在主板上可以放入多种指令集的CPU。
  二、用可重组的方式进行CPU指令映射、或新增指令。
  三、自动生成一个映射后的指令表。
  四、内置编译器,根据映射指令表,将已有程序重新编码。这里可能需要用到默认指令表。

  第三:重组指令内置指令映射指令系统与软体系统是隔离的。
  这样可以实现每台应用终端的CPU指令是不完全相同的,也就是不完全兼容。
  第四:在新指令表之后,生成一个虚拟平台。(类似虚拟机,这样可以用兼容模式运行X86架构)
  而且这个平台是智能的,解释的。权限的。加密的。个性化的。文件系统自由定义的。

  最终目标是智能机器人,或着智能的保密的个人PC。
  所有数据的交流都使用跨平台协议。
  所有的程序都是权限的被智能解释的,隐密执行的。这样就可以杜解绝大部分病毒了。
  所有文件类型都有标准规范,而读取的话,则是统一根据各自的规范来读取。
  至于生成也是根据规范来生成。或着第三方软件来生成,而第三方软件,需要开源,然后根据源码重编译生成应用程序。应用程序是被智能解释执行来操作相应文件的。

  个性CPU 个性平台 个性文件系统 及未想到其它个性化
  组成一个安全的、保密的应用终端。智能PC(即智能家用机器人)

  ‘‘=========’’
  第一,基本已实现
  第二,类似地有FPGA+CPU
  第三,第四,或着可以综合为内置智能虚拟机。
  虚拟机崩溃,但终端应用不会崩溃,恢复一个备份状态即可恢复虚拟机。

  有点像云虚拟机。
  整体来说就像是智能云。只是这是基于硬件底层,不是基于网络。

]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]

>>>个性系统

象安卓android的方式

1 用linux做内核,接管底层硬件驱动,包括用户安全,或着重写内核规划数据结构

2 生成一个虚拟机跟数据系统

3 API封装层

4 智能秘书层,分网络跟本地处理,分控制台跟界面,分记忆跟数据

5 应用层,远程应用跟本地应用.

 

A 作为数据服务器

  远程应用通过协议连接,就像现在的googleMap QQ开放平台

  本地应用相关数据的布局跟组织

B 作为智能PC来应用

  (1)一体机,加上内置话筒,加上蓝牙等,或平板,或笔记本

  (2)视听嗅重力磁力GPS加速光线红外等多种感应

  (3)本地层即智能秘书本身,可以自动生成各种应用

  (4)远程层即智能秘书从网络提取信息跟发送信息的能力,以及生成远程应用的能力

  (5)作为智能PC来使用时,个人觉得需要SSD来作为智能秘书的记忆,内存需要分为两种,一种为系统内存,一种为应用内存互不干扰,硬盘分为应用空间与数据空间

作者:jiaguoxinzhi 发表于2013-1-8 12:06:03 原文链接
阅读:28 评论:0 查看评论

    
最新技术文章:
▪error while loading shared libraries的解決方法    ▪版本控制的极佳实践    ▪安装多个jdk,多个tomcat版本的冲突问题
▪简单选择排序算法    ▪国外 Android资源大集合 和个人学习android收藏    ▪.NET MVC 给loading数据加 ajax 等待loading效果
▪http代理工作原理(3)    ▪关注细节-TWaver Android    ▪Spring怎样把Bean实例暴露出来?
▪java写入excel2007的操作    ▪http代理工作原理(1)    ▪浅谈三层架构
▪http代理工作原理(2)    ▪解析三层架构……如何分层?    ▪linux PS命令
▪secureMRT Linux命令汉字出现乱码    ▪把C++类成员方法直接作为线程回调函数    ▪weak-and算法原理演示(wand)
▪53个要点提高PHP编程效率    ▪linux僵尸进程    ▪java 序列化到mysql数据库中
▪利用ndk编译ffmpeg    ▪活用CSS巧妙解决超长文本内容显示问题    ▪通过DBMS_RANDOM得到随机
▪CodeSmith 使用教程(8): CodeTemplate对象    ▪android4.0 进程回收机制    ▪仿天猫首页-产品分类
▪从Samples中入门IOS开发(四)------ 基于socket的...    ▪工作趣事 之 重装服务器后的网站不能正常访...    ▪java序列化学习笔记
▪Office 2010下VBA Addressof的应用    ▪一起来学ASP.NET Ajax(二)之初识ASP.NET Ajax    ▪更改CentOS yum 源为163的源
▪ORACLE 常用表达式    ▪记录一下,AS3反射功能的实现方法    ▪u盘文件系统问题
▪java设计模式-观察者模式初探    ▪MANIFEST.MF格式总结    ▪Android 4.2 Wifi Display核心分析 (一)
▪Perl 正则表达式 记忆方法    ▪.NET MVC 给loading数据加 ajax 等待laoding效果    ▪java 类之访问权限
▪extjs在myeclipse提示    ▪xml不提示问题    ▪Android应用程序运行的性能设计
▪sharepoint 2010 自定义列表启用版本记录控制 如...    ▪解决UIScrollView截获touch事件的一个极其简单有...    ▪Chain of Responsibility -- 责任链模式
▪运行skyeye缺少libbfd-2.18.50.0.2.20071001.so问题    ▪sharepoint 2010 使用sharepoint脚本STSNavigate方法实...    ▪让javascript显原型!
▪kohana基本安装配置    ▪MVVM开发模式实例解析    ▪sharepoint 2010 设置pdf文件在浏览器中访问
▪spring+hibernate+事务    ▪MyEclipse中文乱码,编码格式设置,文件编码格...    ▪struts+spring+hibernate用jquery实现数据分页异步加...
▪windows平台c++开发"麻烦"总结    ▪Android Wifi几点    ▪Myeclipse中JDBC连接池的配置
▪优化后的冒泡排序算法    ▪elasticsearch RESTful搜索引擎-(java jest 使用[入门])...    ▪MyEclipse下安装SVN插件SubEclipse的方法
▪100个windows平台C++开发错误之七编程    ▪串口转以太网模块WIZ140SR/WIZ145SR 数据手册(版...    ▪初识XML(三)Schema
▪Deep Copy VS Shallow Copy    ▪iphone游戏开发之cocos2d (七) 自定义精灵类,实...    ▪100个windows平台C++开发错误之八编程
互联网 iis7站长之家
▪Activity生命周期管理之三——Stopping或者Restarti...    ▪《C语言参悟之旅》-读书笔记(八)    ▪C++函数参数小结
▪android Content Provider详解九    ▪简单的图片无缝滚动效果    ▪required artifact is missing.
▪c++编程风格----读书笔记(1)    ▪codeforces round 160    ▪【Visual C++】游戏开发笔记四十 浅墨DirectX教程...
▪【D3D11游戏编程】学习笔记十八:模板缓冲区...    ▪codeforces 70D 动态凸包    ▪c++编程风格----读书笔记(2)
▪Android窗口管理服务WindowManagerService计算Activity...    ▪keytool 错误: java.io.FileNotFoundException: MyAndroidKey....    ▪《HTTP权威指南》读书笔记---缓存
▪markdown    ▪[设计模式]总结    ▪网站用户行为分析在用户市场领域的应用
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3