type
status
date
slug
summary
tags
category
icon
password

天堂之门(Heaven's Gate)

一、基础知识

天堂之门,是建立在WoW64技术上的逆向反调试技术
要去认识它,需要先明白64位系统中32位应用程序的执行过程以及WoW64是什么

1.1 在x64下的进程

x64下的进程,不管是32位或者是64位,实际上都映射了两个地址空间,一个是32位,一个是64位,相当于一个进程的两种工作模式
解释:在64位的操作系统上,32位的应用程序并不能直接在64位环境下运行。为了使32位程序可以正常运行,操作系统提供了一个称为 WoW64(Windows on Windows 64-bit)的子系统。WoW64 子系统相当于一个兼容层,专门为32位程序提供了类似32位的运行环境
  • 事实上这个32位程序运行的环境也是一个64位的运行环境,系统在创建32位进程时,首先创建一个64位的进程,然后再在其中创建一个32位的子环境。32位程序所调用的系统函数,最终都要通过64位的动态链接库而实现
而这两种工作模式是可以进行切换的,他们之间的关键区别在于 cs段寄存器
  • 64位:CS = 0x33
  • 32位:CS = 0x23
Windows判别位的方式,是根据cs段寄存器的,所以只要修改cs的值,就能实现切换,再使用retf指令回到xx位

1.2 WoW64

WoW64(Windows-on-Windows 64-bit)是微软Windows操作系统的一个子系统,它使得32位应用程序能够在64位Windows操作系统上运行。WoW64实现了对32位应用程序的透明兼容,主要通过以下方式:
  1. 系统调用转化:32位系统调用转换为64位系统调用。
  1. 地址空间隔离:32位进程和64位进程拥有各自的虚拟地址空间。
  1. 库文件分离:WoW64将32位和64位的库文件分别存储在不同的系统目录中
  • 在32位程序中,使用syscallorcall以及jmp far ptrorcall far ptr实现跨位运行
  • ps:在windows下调试时windbg对32/64位切换的支持较好,其他如ida、x32dbg等调试器在retf语句后都无法调试

二、WoW64实现过程

32位程序首先调用32位ntdll.dll中的32位函数
再由ntdll.dll调用wow64cpu.dll中的X86SwitchTo64BitMode,就是调用该函数后进程从32位模式切换到64位模式,wow64.dll将32位的系统调用转化为64位
再调用64位ntdll.dll中的64位函数

2.1 转换过程参考

psretf是切换32位和64位的关键指令

2.2 Test

关于WoW64的知识,在《逆向工程核心原理》的第36章有介绍,上述是本书提供的样例代码,在x86和x32的源码相同
  • x86运行
notion image
  • x64运行
notion image
发现32位程序的运行结果与64位程序结果不同
notion image
64位程序返回的是正确的值,而32位程序虽然识别的是C:\WINDOWS\system32\,但是实际指向内容却是转为32位程序准备的SysWOW64。这是WOW64对32位程序进行重定向的结果

三、CTF运用

题目:ctfshow上的月饼杯2 EasyTea

3.1 分析天堂之门部分

notion image
0xEA是jmp far ptr的操作吗,会跳转到指定段和偏移地址。
58 12 40 00 是指偏移地址0x00401258
段选择符为 33 00 将cs寄存器改为0x33
即后面将执行的是64位指令
notion image
此处是将eip改为0x40126D,cs改为0x23
跳转至0x40126D处,先U再P
notion image
这里是最终逻辑,是一个cmp函数,提取出cipher
然后继续回找,现在主要看00401258处call指令指向的地址是哪
双击过去是.data段的数据流
强行P创建函数
notion image
发现都是64位的指令,32位IDA反编译的结果并不好分析
至此本题完成了32位程序使用64位函数

3.2 解题

由于是静态,便可以将这个unk_427A50dump出来,patch到随意的64位程序中
打开test.exe(任意64位程序),这里我在.data区的0x1400060C0位置上开始patch
notion image
idapython:
然后P创建函数
得到了很清晰的魔改XTEA逻辑

3.3 EXP

3.4 总结

本题的思路:
遇到32位程序调用64位函数的天堂之门,解题思路:根据汇编和机器码找到64位函数,dump到64位程序中阅读
参考文章中提到还可能出现动态天堂之门,只有动调手撕了。。。

四、杂谈

天堂之门技术,除了CTF中的反调应用,实战中应该只会存在于恶意程序
因为看大佬们沙箱&火绒剑测试的结果,都会被识别出来,实战用处不大
若还想看看其他CTF题中的应用,可以参考此大佬的文章:CTF中32位程序调用64位代码的逆向方法-安全客 - 安全资讯平台 (anquanke.com)
  • 参考文章:
pixel 3 android 12 线刷ByteCTF2024
Loading...
Sh4d0w
Sh4d0w
漫长学习路ing
最新发布
360加固复现学习
2025-6-15
java反射机制
2025-6-14
classLoader机制
2025-6-14
dex文件结构
2025-6-14
APP启动流程
2025-6-14
JNI学习
2025-6-14
公告
Welcome to Sh4dw’s blog!
敬请指导,Q 467194403