DD Android Normal

0x01 题目描述

提交下一关的邮箱地址。

解压密码 infected。

0x02 题解

这道题下载的是一个zip文件,用题目给的压缩密码解压,得到一个apk和一个readme.txt

readme.txt如下:

1
2
3
4
5
赛题背景:本挑战结合了Android, Java, C/C++,加密算法等知识点,考察了挑战者的binary逆向技术和加密算法能力。

赛题描述:本题是一个app,请试分析app中隐藏的key,逆向加密算法并得到对应的秘钥。可以在app中尝试输入key,如果正确会显示“correct”,如果错误会显示“Wrong”。
提 示:阅读assembly code,理解xor的加密逻辑和参数,解出答案。
评分标准:key正确则可进入下一题。

按照描述,将apk送入jeb尝试反汇编

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package com.didictf.hellolibs;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
private TextView mFlagEntryView;
private TextView mFlagResultView;

static {
System.loadLibrary("hello-libs");
}

public MainActivity() {
super();
}

public void onClickTest(View arg3) {
if(this.mFlagEntryView.getText().toString().equals(this.stringFromJNI())) {
this.mFlagResultView.setText("Correct");
}
else {
this.mFlagResultView.setText("Wrong");
}
}

protected void onCreate(Bundle arg2) {
super.onCreate(arg2);
this.setContentView(2130968602);
this.mFlagEntryView = this.findViewById(2131427413);
this.mFlagResultView = this.findViewById(2131427415);
}

public native String stringFromJNI() {
}
}

代码没什么用,看到最后的方法有一个native关键字,知道这个是JNI,因此得调试.so文件,看到上面程序也调用了hellolibs,那么我们将hellolibs.so提取出来

用IDA打开.so文件,发现在HEX View中直接有flag。。

本文标题:DD Android Normal

文章作者:Pino-HD

发布时间:2018年06月10日 - 16:06

最后更新:2018年06月10日 - 16:06

原始链接:https://pino-hd.github.io/2018/06/10/DD-Android-Normal/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

坚持原创技术分享,您的支持将鼓励我继续创作!