专栏首页BinarySecWindows x64上的x86重定向

Windows x64上的x86重定向

0x00 背景

搬砖过程中遇到一个很奇怪的现象。写了一个程序利用命令regedit来读取注册表的某项值,出现了一个奇怪的现象:在某些电脑上能读到值,在另一些电脑上无法读取。

0x01 排查过程

在无法读取的机器上手动查看,注册表确实是有这个值的。百思不得其解,猜测可能是权限的问题。

  • 设置了注册表访问权限
  • 程序使用管理员权限运行

试了以上两种方法还是不行。

思考是否为进程权限太低?于是使用Processexp看一下进程的权限。当看到进程路径时,看出了一点端倪。 在x86的机器上,我们程序调用的regedit的路径是C:\windows\regedit.exe;而在x86_64上,程序调用的regedit的路径是C:\windows\SysWOW64\regedit.exe

用实例程序分别编译为32bit和64bit演示一下,不同的程序运行的系统命令所在的路径。

#include<stdio.h>#include<stdlib.h>int main(){ system("cmd"); return 0;}

其中SysWOW64(System Windows on Windows64)是windows的一个兼容层,用来在x86_64的机器上运行x86程序。说白了就是在64bit操作系统上运行32bit程序。因为我们的程序是32bit的,所以在32bit程序中调用的系统程序也是32bit的。

正巧程序读取的注册表键值在64bit版的regedit上可以读取,而在32bit版本的regedit上无法读取,这就造成了开头的问题。

0x02 解决方法

解决方法有两种:

  • 将程序编译成64bit的
  • 使用关闭重定向的函数Wow64DisableWow64FsRedirection

第一种方法当然简单粗暴,但是在x86的系统上却无法运行,只能寻求第二种方法。

#include<stdio.h>#include<stdlib.h>#include<windows.h>int main(){ PVOID OldVal = NULL; if (Wow64DisableWow64FsRedirection(&OldVal)) { system("cmd"); } if (FALSE == Wow64RevertWow64FsRedirection(OldVal)) { return 1; } return 0;}

可以看到启动的cmd已经是64bit的了。

注意,关闭重定向后完成相关操作一定要恢复重定向,一定要恢复重定向,一定要恢复重定向,重要的事情说三遍,若不恢复的话会导致一些dll等调用失败。

0x03 x86 Redirect in x86_64

wow64其实相当于64bit系统的一个子系统,用来兼容32bit的程序。32bit程序运行时会收到重定向的影响,这个重定向主要分为:

  • 文件重定向

当32bit程序运行时,会存在以下的重定向规则。

访问

重定向

%systemroot%/system32

%systemroot%/SysWOW64

比如,当32bit程序访问calc.exe时,本应访问

C:\windows\system32\calc.exe

但是由于重定向机制,会被重定向到

C:\windwos\SysWOW64\calc.exe

  • 注册表重定向

不多说,想了解的话看看微软的文章。 https://msdn.microsoft.com/en-us/library/windows/desktop/aa384253(v=vs.85).aspx

0x04 Refer

http://blog.csdn.net/magictong/article/details/5892209 http://www.cnblogs.com/lhglihuagang/p/3930874.html http://www.tuicool.com/articles/Ibui6bZ

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python脚本中使用Django函数

    WeaponX
  • CVE-2010-3333分析[漏洞战争]

    CVE-2010-3333漏洞是一个栈溢出漏洞,该漏洞是由于Microsoft word在处理RTF数据的对数据解析处理错误,可被利用破坏内存,导致任意代码执行...

    WeaponX
  • 搭建一个Hexo博客

    0x00 背景 一直想搭建一个自己的博客,之前在Aliyun虚拟主机上搭了一个WordPress+MySQL的个人博客。后来维护成本太大,主机和域名都没有续费被...

    WeaponX
  • 几种加快R语言运算的方法

    提升R代码运行速度并不需要很高级的优化技术, 例如代码并行化, 使用数据库, 使用c++等. 实际上, 通过简单的操作, 就能够是R的运算速度显著的加快, 下面...

    邓飞
  • Elasticsearch SQL介绍及实例

    Elasticsearch 是一个全文搜索引擎,具有您期望的所有优点,例如相关性评分,词干,同义词等。而且,由于它是具有水平可扩展的分布式文档存储,因此它可以处...

    zhisheng
  • VIPKID估值超过30亿美金?创始人身价暴涨,腾讯成为大赢家

    熟悉在线英语教育的朋友,一定听说过VIPKID这个平台。根据媒体的报道,VIPKID目前已经是全球最大的少儿英语在线教育平台之一。从去年8月到今年7月,不到一年...

    光荣与梦想1987
  • 案例丨索龄商铺利用小程序拓客引流,月销售额突破10W+

    随着小程序生态的崛起,围绕着用户衣食住行的小程序电商出现了井喷之势,也让更多的传统电商纷纷有了进军小程序的决心。“索龄商铺”正是其中的一员。

    极客小程序分享
  • 小程序线上线下打通增强体验和效率 新零售业该如何把握机会?

    自小程序2017年1月9号正式上线以来,不论是中小商家,还是各大品牌巨头,都在抢占小程序这波风口,打造属于自己的小程序。截至目前,全国正式上线小程序超过100万...

    速成应用小程序开发平台
  • 使用ELK分析腾讯云CLB日志

    最近在使用腾讯云,想对访问日志进行收集与分析,发现CLB(负责均衡)日志只能保存到COS上面,而且是每个CLB没小时压发送个gz压缩包到COS。

    三杯水Plus
  • 小程序 · 一周报

    有读者发现,微信近日悄然上线了小游戏设计指南。微信基于小游戏轻便快捷、便于传播的特点拟定了小游戏界面设计指南和建议,旨在帮助小游戏开发者创造更优秀的游戏产品,同...

    极乐君

扫码关注云+社区

领取腾讯云代金券