专栏首页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 条评论
登录 后参与评论

相关文章

  • Windows内核开发-9-32位和64位的区别

    32位的应用程序可以完美再64位的电脑上运行,而32位的内核驱动无法再64位的电脑上运行,或者64位的驱动无法在32位的应用程序上运行。这是为什么呢。

    冬夜先生
  • 64位Java开发平台的选择,如何区分JDK,Tomcat,eclipse的32位与64版本

    当你想下载Linux、JDK、Tomcat、eclipse时,你是下载32位版本还是64位版本?64位版本有两种,应该选哪一个?

    我是李超人
  • 域内计算机本地管理员密码管理

    随着互联网技术的不断发现,信息安全在企业中的受重视度也越来越高,终端管理是信息安全中至关重要的一环,不可能要求终端用户和服务器管理员有着一样的安全隐患意识和技术...

    嘉为蓝鲸
  • Windows 下使用 ffmpeg 库

    今天我们来聊聊如何在Windows下使用ffmpeg库进行音视开发。一般情况下我很少在Windows下使用ffmpeg, 最主要的原因是在Windows下编译f...

    音视频_李超
  • 工具资源系列之给 windows 虚拟机装个 windows

    前面我们已经介绍了如何在 Windows 宿主机安装 VMware 虚拟机,这节我们将利用安装好的 VMware 软件安装 Windows 系统.

    雪之梦技术驿站
  • x86与x64的区别,云服务器如何选择操作系统?

    云服务器中windows系列系统通常都有x86与x64两个版本。x86与x64有什么区别?云服务器用户该如何选择操作系统? ? x86与x64的区别: 1、x...

    静一
  • 【预警通告】Windows远程桌面服务远程代码执行漏洞(CVE-2019-0708)EXP披露预警

    北京时间9月7日凌晨,有开发者在GitHub上披露了Windows远程桌面服务远程代码执行漏洞 (CVE-2019-0708) 的Metasploit利用模块,...

    绿盟科技安全情报
  • Metasploit Payload在Linux平台的免杀

    目前,我认为在Linux防病毒方面做得比较好的安全厂商有Avast,Eset 和 Kaspersky。当然,本文的目的并不是为了推广某个产品,而是希望通过实例测...

    FB客服
  • Z投稿 | 支持windows2000的zabbix agent 3.4.4

    由于windows 2000 x86系统目前已经不在官方Zabbix的支持范围。我这里有少数Windows2000的机器,基于自己的经验,把编译的过程写出来分享...

    Zabbix
  • 体验vs11 Beta

    第一步:下载VS11Beta 下载地址:http://www.microsoft.com/click/services/Redirect2.ashx?CR_...

    Porschev
  • Windows内核利用表

    黑白天安全
  • 做开发环境用哪个版本的win服务器?

    做开发环境的服务器,那么就选择win2008,在win2008当中,整理了一下的版本:

    习惯说一说
  • 如何在windows安装php redis扩展

    很多地方都能下载到redis程序,官方的地址是 https://redis.io/download ,根据自己windows版本,下载合适自己系统的程序。同时g...

    皇上得了花柳病
  • CoreHook:基于.NET Core运行时实现的Windows HOOK库

    今天为大家介绍一款基于.NET Core运行时实现的Windows HOOK库,CoreHook。

    FB客服
  • windows xp sp3 AMD双核

       由于SP3已经集成了所有的KB系列补丁,所以当然也就集成了INTEL的双核补丁。只需要修改下注册表就可以了,修改注册表前,PI软件运行,主要依靠CPU中的...

    py3study
  • dotnet core 发布只有一个 exe 的方法

    在 dotnet core 发布的时候,会使用很多文件,这样发给小伙伴使用的时候不是很清真,本文告诉大家一个非官方的方法通过 warp 将多个文件打包为一个文件

    林德熙
  • 【Jenkins篇】Win环境安装部署Jenkins(一)

    JDK1.7,或者JDK1.8: Jdk下载地址如下: Windows X86: jdk-8u171-windows-i586.exe Windows X64:...

    王大力测试进阶之路
  • 【阿星的学习笔记(1)】如何在windows安裝Theano +Keras +Tensorflow並使用GPU加速訓練神經網路

    今天开始,Lady向各位介绍一个朋友阿星(Ashing)以及他的机器学习读书笔记! ? 阿星也是我们手撕深度学习算法微信群的热心群友!接下来,Lady我也会陆续...

    GPUS Lady
  • [Qt]VS2015下Qt项目的x86和x64版本编译

    原文链接:https://blog.csdn.net/humanking7/article/details/85883828

    祥知道

扫码关注云+社区

领取腾讯云代金券