日常ida打开二进制文件,点开main函数发现点不开,出现一大堆数据

image-1

应该是使用了花指令,一开始以为是第一句的jmp塞入了垃圾数据导致后面的反编译失败,修改后仍然没有变化,说明还有其他地方需要修改。在看了wp之后才知道原来出题人塞入了不止一个垃圾数据,因此需要写个脚本来将垃圾数据修改掉,脚本如下:

1
2
3
4
5
6
7
8
from idc_bc695 import *
startaddr = 0x1144
endaddr = 0x3100
for i in range(startaddr, endaddr):
if get_wide_byte(i) == 0xeb:
if get_wide_byte(i+1) == 0xff:
patch_byte(i,0x90)
print("[+] Addr {} is patched".format(hex(i)))

脚本2:

1
2
3
4
5
6
7
8
from idc_bc695 import *
startaddr = 0x1144
endaddr = 0x3100
for i in range(startaddr, endaddr):
if Byte(i) == 0xeb:
if Byte(i+1) == 0xff:
PatchByte(i, 0x90)
print("[+] Addr {} is patched".format(hex(i)))

修改完的反编译结果如下图:

image-2

出题人将字符串拆分成一个个字符,也是一种防止逆向工程的做法,直接找flag

image-3

flag:GFCTF{u_are2wordy}