BUUCTF reverse:easy re

1.查壳
在这里插入图片描述无壳
64位文件
2.IDA分析
找到main函数,F5反编译
在这里插入图片描述

int __cdecl main(int argc, const char **argv, const char **envp)
{
  int b; // [rsp+28h] [rbp-8h]
  int a; // [rsp+2Ch] [rbp-4h]

  _main();
  scanf("%d%d", &a, &b);
  if ( a == b )
    printf("flag{this_Is_a_EaSyRe}");
  else
    printf("sorry,you can't get flag");
  return 0;
}

于是flag出来了

flag{this_Is_a_EaSyRe}
### BUUCTF Reverse EasyRE 解题思路与题目分析 BUUCTF中的`EasyRE`是一道典型的逆向工程(Reverse Engineering)题目,主要考察选手对Android APK文件的逆向分析能力以及代码逻辑的理解。以下是针对该题目的详细解析: #### 题目背景 在CTF竞赛中,逆向工程题目通常提供一个二进制可执行文件或APK包作为目标,参赛者需要通过反汇编、静态分析或动态调试等方式理解其内部工作原理并提取Flag。对于BUUCTF中的`EasyRE`题目,重点在于分析APK文件内的关键类及其加密/解密逻辑。 #### 文件获取与初步分析 下载题目提供的APK文件后,可以使用工具如`apktool`对其进行反编译操作,从而获得Smali代码或其他形式的人类可读代码片段。此过程中可能涉及以下命令: ```bash apktool d easyre.apk -o output_directory ``` 上述命令会将APK分解成资源目录结构和对应的Smali字节码表示[^1]。 #### 关键代码定位 经过反编译处理后的项目中,需重点关注`MainActivity.class`这一核心组件。它往往承载着应用启动时的主要业务流程定义。具体而言,在本题里我们注意到存在一段简单的字符串混淆机制用于隐藏最终答案——即所谓的FLAG值[^3]。 #### 加密算法还原 通过对`MainActivity.smali`深入研究可知,这里采用了基本位运算符组合实现简易编码转换功能。例如异或(XOR)操作常被用来快速改变原始数据形态而不增加太多计算负担;同时配合循环迭代完成整个消息串逐字符加工效果展示如下伪代码所示: ```java public String decode(String input){ char[] chars = input.toCharArray(); for(int i=0;i<chars.length;i++){ chars[i]^=(char)(i%2==0?7:9); } return new String(chars); } ``` 这段Java风格描述实际上映射到了实际smali表述之中,只是语法上有所差异而已。 #### Flag提取方法 最后一步就是依据前面推导出来的规律手动模拟执行一遍给定样本测试用例直至得出预期结果为止。当然也可以借助Python脚本自动化完成此类重复性劳动任务提高效率比如这样写法: ```python def decode(input_str): result = [] for idx, ch in enumerate(input_str): if idx % 2 == 0: decoded_char = chr(ord(ch)^7) else: decoded_char = chr(ord(ch)^9) result.append(decoded_char) return ''.join(result) encoded_flag = "your_encoded_string_here" print(decode(encoded_flag)) ``` 以上便是关于BUUCTF `EasyRE`这道reverse challenge的大致解答框架概述。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值