下载、die查壳、IDA打开


按F5查看伪代码

一、当前这个 main 不是真实主函数,只是一层跳板
看到的 attributes: thunk 意思是跳板函数,它本身没有任何业务逻辑,唯一作用就是跳转到真实的函数地址 0x411860。
这是 MSVC 编译器增量编译的常见现象,也有可能是程序故意做的一层间接跳转混淆,用来干扰静态分析。
二、一步跳转到真实主函数
直接在伪代码窗口里,双击黄色高亮的 0x411860 地址,IDA 就会自动跳转到真实的 main 函数代码处

很明显的花指令
第一处:
手动修复:可以看到.text:0041188C call near ptr 41BC4932h,这一行标红,而且明显花指令是跳转到loc_41188C+1,所以脏字节就是loc_41188C,光标放到loc_41188C,按U
再按C,重新分析,可以看到程序正常了
发现左侧还是红的,然后对整个main函数进行重新分析,光标放到main函数这一行.text:00411860
,按P,重新分析后就正常了
再按F5,得到主函数伪代码
看到flag:NSSCTF{Jump_b9_jump!}
本质就是一个花指令修复,
花指令(Junk Code / 垃圾指令)是逆向工程中最经典的代码混淆手段。
简单来说:程序开发者在正常业务代码中,人为插入一些CPU 永远不会执行、或执行后完全不影响程序功能的垃圾代码。它不会改变程序的运行效果,但会严重干扰 IDA 这类静态反汇编工具的解析,让代码逻辑变得混乱不堪,提升逆向分析的门槛。
花指令能生效的核心,是抓住了反汇编工具和 CPU 运行逻辑的本质区别:
- CPU 实际运行:严格跟着跳转指令的真实路径走,垃圾字节永远不会被执行,程序功能 100% 不受影响。
- IDA 静态解析:默认按内存地址从上到下、按指令边界顺序解析。垃圾字节会打乱指令的起始对齐位置,导致后续所有正常指令全部错位,被解析成一堆无意义的乱码。

418

被折叠的 条评论
为什么被折叠?



