刘功瑞的博客

有一天你突然惊醒,发现这一切,都只不过是一场梦。

攻防世界 XCTF Reverse BABYRE Writeup

image.png

image.png

judge这个函数无法被反编译,因为可以看到程序运行后动态修改了这个函数,可以使用python脚本模拟执行后的代码,然后再反编译

import sys
from idautils import *
from idc import *
import idaapi
if __name__ =="__main__":
	start_addr=0x600B00
	for i in range(182):
		PatchByte(start_addr+i,Byte(start_addr+i)^0xC)

执行之后,删除原函数

image.png

重新在main里双击进入这个函数,修改一下sp,即可反编译成功

image.png

最终代码很简单,就是每个字符循环异或i,其实这题主要是考察动态查看汇编代码的能力,但是能反编译回来当然更好

arr = [0x66, 0x6D, 0x63, 0x64, 0x7F, 0x6B, 0x37, 0x64, 0x3B, 0x56, 0x60, 0x3B, 0x6E, 0x70]
flag = ''
for i in range(len(arr)):
    flag += chr(arr[i] ^ i)
print flag
flag{n1c3_j0b}


发表评论:

Powered By Z-BlogPHP 1.5.2 Zero

Copyright www.liugongrui.com.All Rights Reserved.