收获

  • 花指令的处理

  • 利用 IDA 的脚本嵌入功能,执行将 jmp 花指令的第一个字节 patch 成 0x90 再分析


【NSSCTF】wordy


思路一(非预期解)

在文件的 16进制视图中可以看到 flag:GFCTF{u_are2wordy}

NSSCTF-wordy1.png


思路二

拖入 IDA,没有 main 函数,进入 start 函数查看

NSSCTF-wordy2.png

这里已经发现报错信息了:// positive sp value has been detected, the output may be wrong!

进入函数 _libc_start_main(),发现该函数无法 F5 反编译

NSSCTF-wordy3.png

到 IDA View-A 中定位到该函数的位置

NSSCTF-wordy4.png

发现指令 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

恢复后:

NSSCTF-wordy5.png

发现 main 函数就是一直在做 putchar 的输出,一次输出一个字符

在地址 0x2D56 开始的地方发现了 flag:

NSSCTF-wordy6.png


结果

GFCTF{u_are2wordy}