0x01 题目描述
提交下一关的邮箱地址。
解压密码 infected。
0x02 题解
这道题下载的是一个zip文件,用题目给的压缩密码解压,得到一个apk和一个readme.txt
readme.txt如下:
赛题背景:本挑战结合了Android, Java, C/C++,加密算法等知识点,考察了挑战者的binary逆向技术和加密算法能力。
赛题描述:本题是一个app,请试分析app中隐藏的key,逆向加密算法并得到对应的秘钥。可以在app中尝试输入key,如果正确会显示“correct”,如果错误会显示“Wrong”。
提 示:阅读assembly code,理解xor的加密逻辑和参数,解出答案。
评分标准:key正确则可进入下一题。
按照描述,将apk送入jeb尝试反汇编
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。。