题目附件:
989ca07c3f90426fa05406e4369901ff.apk
题目思路:
通过jeb将apk反编译,找到密钥加密函数进行分析,按照自定义映射字符base64解码即可。
解题过程:
首先我们使用老套路,用jeb或者dex2jar反编译后用jd-gui打开,并且查看java源码,在apk下bytecode中的MainActivity找到主类,右键decompile
public class MainActivity extends AppCompatActivity {
public MainActivity() {
super();
}
protected void onCreate(Bundle arg3) {
super.onCreate(arg3);
this.setContentView(2130968603);
this.findViewById(2131427446).setOnClickListener(new View$OnClickListener() {
public void onClick(View arg8) {
if(new Base64New().Base64Encode(MainActivity.this.findViewById(2131427445).getText().toString().getBytes()).equals("5rFf7E2K6rqN7Hpiyush7E6S5fJg6rsi5NBf6NGT5rs=")) {//很明显是比较字符串,将输入的字符串进行base64New()中的base64加密之后与后面的字符串进行比较
Toast.makeText(MainActivity.this, "验证通过!", 1).show();
}
else {
Toast.makeText(MainActivity.this, "验证失败!", 1).show();
}
}
});
}
}
双击跟入Base64New(),发现码表不同,所以需要使用特定的base64解密。
public class Base64New {
private static final char[] Base64ByteToStr = null;
private static final int RANGE = 255;
private static byte[] StrToBase64Byte;
static {
Base64New.Base64ByteToStr = new char[]{'v', 'w', 'x', 'r', 's', 't', 'u', 'o', 'p', 'q', '3', '4', '5', '6', '7', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'y', 'z', '0', '1', '2', 'P', 'Q', 'R', 'S', 'T', 'K', 'L', 'M', 'N', 'O', 'Z', 'a', 'b', 'c', 'd', 'U', 'V', 'W', 'X', 'Y', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', '8', '9', '+', '/'};
Base64New.StrToBase64Byte = new byte[128];
}
}
将Base64New()的编码方式复制出来处理一下,放到base64自定义解码网站,解密得出flag
flag{05397c42f9b6da593a3644162d36eb01}