Starsound.XYZ

长夜伴浪破晓梦 梦晓破浪伴夜长

BugkuCTF 平台 Reverse 题目 signin Writeup

仅供参考。

题目简介

signin

题目类型:Android

知识点

Android 基本架构
ARM 架构基础知识
APK 文件格式
Dalvik 层逆向分析

工具

Apktool
dex2jar
jd-gui

解题过程

0x01. 使用 Apktool 反编译 sign_in.apk

Apktool

0x02. 使用 dex2jar 生成 jar 文件

dex2jar

0x03. 使用 jd-gui 查看反编译的 java 代码

jd-gui

MainActivity.class 中可以找到如图所示的两段关键代码
读第一段代码可知 falg 为地址是 2131427360 的字符串
读第二段代码可知 要得到正确的 flag 需要把字符串进行逆置和 base64 解码

0x04. 复制地址,在 R.class 中搜索此地址

search

R 中表明 2131427360 对应的 toString 变量在 string.xml

0x05. 去 res/values/string.xml 目录查找 toString 变量

toString

flag() 方法中返回的字符串为 991YiZWOz81ZhFjZfJXdwk3X1k2XzIXZIt3ZhxmZ

0x06. 写脚本将得到的字符串逆置并进行 base64 解码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.io.UnsupportedEncodingException;
import java.util.Base64;
public class MainActivity {
private static String getFlag() {
return "991YiZWOz81ZhFjZfJXdwk3X1k2XzIXZIt3ZhxmZ";
}
public static String decode(String base64str) {
String str = "";
// 解码
byte[] base64Data = Base64.getDecoder().decode(base64str);
try {
// byte[] --> string
str = new String(base64Data, "utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return str;
}
public static void main(String[] args) {
System.out.println(decode(new StringBuffer(getFlag()).reverse().toString()));
}
}

flag

言论

失败很少是一种永久状态。失败后,继续前进就可以了。失败只是旅程中的一站,不要让它成为你的目的地。

《首届 Delta Force 训练班》