Problem: [SWPUCTF 2023 秋季新生赛]Junk Code
思路

花指令,两种方法解决:
- 动态调试(最方便)
- 逐个NOP(或者使用 IDA Python 批量化处理)
EXP
一、动态调试
在 main 函数处下断点:

开始动态调试,不断地用 f8 步进,遇到:

的时候,就是遇到花指令的部分了,反编译器成功被骗到(觉得这是出现错误了),但是 CPU 执行的是程序本身,它可不会被骗。
因此,只要我们点 yes,那么调试就会继续跟着程序往后走,也就顺带绕过了花指令。
此时,如果我们切换到 C 语言代码,可以发现,一部分的程序已经恢复出来了:

后面就是不断地重复,直到程序的全部代码都出来了就可以了,不再赘述。
二、Nop绕过
本题用的是无条件跳转类型的花指令,即我们只要让 jmp 失效就好了,因此想到 Nop 指令。
jmp 的机器码为 E9:

这个看不到的,点“OptionsGeneralDisassemblyNumber of opcode bytes”,将值设置成 4 或者更多即可。
点“EditPatch programechange bytes”
将 E9 改成 90 就好了:


此时就能看到部分代码了,后同,不再赘述。

总结
- 花指令
- 花指令的绕过
- 代码审计
