攻防世界 Reverse进阶区 BABYRE WP

本文详细介绍了在攻防世界Reverse进阶区的一个挑战中,通过IDA分析反汇编代码理解程序逻辑的过程。文章揭示了如何将数据转化为代码执行,并在调试过程中发现了关键的异或操作和循环,最终找到了解密flag的步骤,解密后的flag为{n1c3_j0b}。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

IDA下得到反汇编代码

显然,对于judge这个常量先与或处理,而后读取字符串s,判断s长度是否为14;

接下来这个judge(s)让我看不懂了,judge不是个数组吗,怎么可以这么使用?

<关键点>看了其他大佬的WP才知道,原来还有将data转为code执行的骚操作,所以这里其实是将judge数组的内容当成一个函数来执行,可以使用热键C将data转化为code,也可以用U恢复。

调试程序,先让其运行完字符串的初始处理,在if处下断点,观察judge函数的汇编代码

1.

push rbp 和mov rbp,rsp是栈指针操作

鼠标移动到rdi上,可以知道rdi存储着我们输入的字符串s的内容,mov [rbp-28h],rdi 则是将其拷贝到[rbp-28h]上;接下来将一堆字符入栈,数了一下,刚好14个,对应flag的长度,接下来必有用处; 然后给[rbp-4]赋值0,跳转到loc_600B71。

loc_600B71的汇编代码如下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值