题目链接:https://adworld.xctf.org.cn/task/task_list?type=mobile&number=6&grade=0&page=1
发现字符串:You are wrong!Bye~
搜索字符串
发现代码
package com.a.easyjni;
import android.os.Bundle;
import android.support.v7.app.c;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
/* loaded from: classes.dex */
public class MainActivity extends c {
static {
System.loadLibrary("native");
}
/* JADX INFO: Access modifiers changed from: private */
public boolean a(String str) {
try {
return ncheck(new a().a(str.getBytes()));
} catch (Exception e) {
return false;
}
}
private native boolean ncheck(String str);
/* JADX INFO: Access modifiers changed from: protected */
@Override // android.support.v7.app.c, android.support.v4.a.i, android.support.v4.a.aa, android.app.Activity
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
setContentView(R.layout.activity_main);
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { // from class: com.a.easyjni.MainActivity.1
@Override // android.view.View.OnClickListener
public void onClick(View view) {
if (MainActivity.this.a(((EditText) ((MainActivity) this).findViewById(R.id.edit)).getText().toString())) {
Toast.makeText(this, "You are right!", 1).show();
} else {
Toast.makeText(this, "You are wrong! Bye~", 1).show();
}
}
});
}
}
进入a函数
这里我们知道了 是我们输入的字符 经过变形的base64加密码表为 然后传进了 so 里面的方法 然后我们去so里面找函数
用 ida 打开 so 文件,找到 ncheck 函数,发现将传进来的字符串首先将前 16 个字符和后 16 个字符交换位置,然后将这个新字符串两两一组互相交换位置,最后和一个字符串比较,相等则返回TRUE
。
解密脚本
import base64
import string
string1 = string.maketrans("i5jLW7S0GX6uf1cv3ny4q8es2Q+bdkYgKOIT/tAxUrFlVPzhmow9BHCMDpEaJRZN","ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/")
strEnBase64 = "QAoOQMPFks1BsB7cbM3TQsXg30i9g3==".translate(string1)
print(strEnBase64)
strFlag = base64.b64decode(strEnBase64)
print(strFlag)
flag为: flag{just_ANot#er_@p3}
找到关键字,逆向分析流程,写出对应的脚本就可以拿到答案