nssctf_jump_by_jump

下载、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 运行逻辑的本质区别:

  1. CPU 实际运行:严格跟着跳转指令的真实路径走,垃圾字节永远不会被执行,程序功能 100% 不受影响。
  2. IDA 静态解析:默认按内存地址从上到下、按指令边界顺序解析。垃圾字节会打乱指令的起始对齐位置,导致后续所有正常指令全部错位,被解析成一堆无意义的乱码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值