空指针RE第一次公开赛-笔记
关于花指令和天堂之门
今天补了一下三月的空指针公开赛题目,没做出来,见到了一些没见过的东西,记录一下。
花指令JUMPOUT
对于这样一个花指令,call一个函数内的地址然后再retn返回,IDA会认为被call的地址是一个新的函数,当前函数就被截断了,影响到了IDA的分析,F5的话会看到这样的东西:
对于这道题,主程序中的花指令只有两种,全部nop掉(替换成0x90)就好:
EB0388C3BAE8F9FFFFFF
E80400000077EB07883683042401C3
天堂之门
在Windows64操作系统下,所有的32位程序会被装载到WoW64子系统中运行。而某些windows kernel调用,WoW64会将其钩取为64位调用。在这个过程中,运行的程序会从兼容模式暂时地切换成64位模式运行。利用这个特性,我们可以在程序运行过程中主动切换为64位模式来执行64位代码,以达到某种保护程序(如使静态分析失败、动态跟踪混乱)的目的。
这种保护方法被称为Heaven‘s Gate,直译就是”天堂之门“。
WoW64根据段寄存器cs的值来确定程序的运行模式,如果cs的值为0x33,则当前是64位模式;如果cs的值为0x23,则当前为兼容模式。
这道题采用了这样的方式来切换运行模式:
xx: push 0x33
00: call loc_05
05: add [esp],6
0b: retf
retf等价于pop eip; pop cs;
这样相当于修改了cs的值,以达到切换模式的目的。
坑(会填的会填的)(flag)
http://rce.co/knockin-on-heavens-gate-dynamic-processor-mode-switching/
https://medium.com/@fsx30/hooking-heavens-gate-a-wow64-hooking-technique-5235e1aeed73
https://www.malwaretech.com/2014/02/the-0x33-segment-selector-heavens-gate.html
天堂之门似乎还有一些其他的应用,官方WP给了一些ref,还没读完,英语太差了quq。等回头读完之后再填坑吧。