空指针RE第一次公开赛-笔记

关于花指令和天堂之门

今天补了一下三月的空指针公开赛题目,没做出来,见到了一些没见过的东西,记录一下。

花指令JUMPOUT

image-20200320232229080

对于这样一个花指令,call一个函数内的地址然后再retn返回,IDA会认为被call的地址是一个新的函数,当前函数就被截断了,影响到了IDA的分析,F5的话会看到这样的东西:

image-20200320232414913

对于这道题,主程序中的花指令只有两种,全部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。等回头读完之后再填坑吧。

posted @ 2020-03-20 23:40  羊毛羊  阅读(577)  评论(0编辑  收藏  举报