QCTF - re -babyre(Rust逆向)

这篇博客介绍了作者初次接触Rust语言并参与QCTF逆向分析题目的经历。文章详细记录了Rust环境的搭建、简单的Rust程序编写与逆向分析过程,以及在解决re-babyre挑战时逐步分析代码、找出规律的思路。最终,作者通过动态调试和静态分析,理解了代码的变换函数,并给出了解题的关键步骤和总结。
摘要由CSDN通过智能技术生成

前言

这是一个Rust语言编写的程序,之前也没有接触过这种语言,一时确实无从下手,因此我也将此题分析放到了最后。为了更好的了解Rust编程以及逆向,先尝试使用Rust编写一个helloworld。所以我在自己的电脑上搭建的Rust编译环境。

Rust环境搭建与测试

官网
在网上找了好久才找到一些Rust的编程示例,这好像是最近兴起的类C的语言。
gitbook上有其第一版的程序设计指导。
因此我使用Rust编写如下代码,并且编译运行。

fn main(){
println!("Hello,world!");
}

编译 rustc hello.rs
说实话编译完了吓一跳,程序居然有5.5Mb
将生成的程序丢到IDA中,23333,表示想哭,连最简单的hellworld都看不懂了,而且我这还没去除符号表。

这里写图片描述
看来这Rust作为最安全的编程语言是有道理的。
这里写图片描述
其中第一个很长的main才是真正的主函数
接着尝试加入简单判断的程序,代码如下:

fn main() {
    println!("Guess the number!");
let x =5;
if x == 5 {
    println!("x is five!");
} else {
    println!("x is not five :(");
}
}

丢到IDA中,实在是看不下去了。有点无奈了。
这里写图片描述
其实冷静下来分析一下,虽然Rust的API有变化,但是代码块与代码块之间的关系并没有发生变化,所以还是头铁。

分析题目

0x0

大概了解了一下Rust编程,接下来还是老老实实的分析题目代码。首先定位到main函数。试图寻找cmp指令。幸运的是找到了cmp rax ,32并且看到了分支.
这里写图片描述
所以可以确定flag的长度为32位,F5失效了。静态看确实看不出来,所以动态调试一番.

0x01

第一次变化,以四个为一组进行0 = 2;1 = 0;2 = 3;3 = 1变换
这里写图片描述

0x02

第二次变化,这里需要仔细的去看下输入是如何变化的。说白了就是在找规律

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值