1.下载jadx-gui
在terminal中执行下面语句
1 2 3 4
| mkdir jadx #创建 jadx目录 git clone https://github.com/skylot/jadx.git #将存储库克隆到目录 cd jadx # 进入 jadx目录 ./gradlew dist # 执行编译
|
2.反编译
下载题目所给的apk.apk,利用jadx-gui进行反编译,得到如下结果
3.分析代码
可知如果 inputString.charAt(i) 如果不等于 (versionCode.charAt(i) ^ versionName) 就会输出”再接再厉,加油~”,因此判断正确的input应使二者相等
input的长度应和versionCode的长度相等,为15
1 2 3 4 5 6 7 8 9 10
| public static final int VERSION_CODE = 15; public static final String VERSION_NAME = "X<cP[?PHNB<P?aj";
while (i < inputString.length() && i < versionCode.length()) { if (inputString.charAt(i) != (versionCode.charAt(i) ^ versionName)) { Toast.makeText(MainActivity.this, "再接再厉,加油~", 1).show(); return; } i++; }
|
4.运行代码
根据分析运行以下代码,即可得到答案。
1 2 3 4 5 6 7 8 9 10 11
| public class HelloWorld {
public static void main(String[] args) { int versionName = 15; String versionCode = "X<cP[?PHNB<P?aj"; for(int i=0;i<versionCode.length();i++) { System.out.print((char) (versionCode.charAt(i)^versionName));
} } }
|