【NSSCTF】wordy
收获
花指令的处理
利用 IDA 的脚本嵌入功能,执行将 jmp 花指令的第一个字节 patch 成 0x90 再分析
思路一(非预期解)
在文件的 16进制视图中可以看到 flag:GFCTF{u_are2wordy}
思路二
拖入 IDA,没有 main 函数,进入 start 函数查看
这里已经发现报错信息了:// positive sp value has been detected, the output may be wrong!
进入函数 _libc_start_main()
,发现该函数无法 F5 反编译
到 IDA View-A 中定位到该函数的位置
发现指令 jmp short near ptr loc_1144+1
跳转到了一大片疑似垃圾数据的位置,所以导致函数不能被 IDA 正常解析,应该又是花指令
因为数据量太大,这里用 python 脚本处理花指令
快捷键:shift + F2
,嵌入脚本代码:
# 利用 idapython 脚本解决重复工作
startaddr = 0x1135
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)))
思想就是将数据的第一个字节修改为 90
恢复后:
发现 main 函数就是一直在做 putchar 的输出,一次输出一个字符
在地址 0x2D56 开始的地方发现了 flag:
结果
GFCTF{u_are2wordy}
评论