是否运行在x64?逆向前辈作品找方法

作为一名程序员,从前辈实际编程中获取经验是十分有效的一种学习途径。那让我们看看前辈们是如何判断当前系统是x64还是x32的.

VirtualKD

为了调试虚拟机内的操作系统,所以需要按照不同系统版本提供相应的驱动.笔者它在2.8.0.1版本使用了GetVersionEx这个函数来判断系统.在它旁边我们发现如图的内容:
Win8不兼容

360安全软件64位安装包:

经过笔者的分析发现奇虎的程序员是通过直接查询注册表的方式来进行判断的:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
这里存放着系统的版本信息。

从系统结构体中获取版本信息:
    SYSTEM_INFO sysInfo;
    GetNativeSystemInfo(&sysInfo);

    if (sysInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64)
    {
        cout<<"64"<<endl;
    }
    else
    {
        cout<<"32"<<endl;
    }
利用WOW64子系统文件系统重定位

WOW64子系统会对%windir%\System32目录的访问进行重定位.
所以一个方案应运而生:

  1. 释放一个可执行文件到System32目录下.
  2. 运行该文件.
  3. 获取该文件路径是否是%windir%\System32.
  4. 是,则运行在32bitOS中,否,则运行在64bitOS中.
  5. 删除文件.
其它的思路

看雪上有一人发帖讨论一个问题:在不启动系统的情况下,如何判断操作系统是32位还是64位?
摘取几个有趣的答案:

ttuiop:
kernel32.dll IsWow64Process

LiXMX:

最简单的就是看看系统安装分区里面是不是有两个 “Program Files” 目录,有的话就是64位系统。。。
瀚海云烟认为:
判断文件夹法(可能被忽悠):
Program Files ,是否存在 Program Files (x86)
X:\windows\system32, 是否存在 X:\windows\SysWOW64
判断PE文件法(这个比较可靠):
判断X:\windows\explorer.exe 是 PE64还是 PE32, 别人不可能故意替换这个文件,否者系统无法启动桌面.

你现在是不是和笔者一样又有一些新思路呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值