打开题目所给的压缩包,发现是apk文件
由于没有一点相关知识,也是第一次做安卓逆向相关的题目
所以只能网上搜索安卓逆向相关题解,看看能不能照猫画虎做出来
网上搜素到了一篇博客(https://www.freesion.com/article/5728265720/),首先需要下载jadx-gui工具对apk进行反编译
然后打开,找到按钮点击事件 也就是onClick事件下
发现应该是”check”方法控制了软件输出“正确”或者是“错误“
搜索文本“check“
接着跳转到相应的方法中
原本以为是简单的字符串匹配,直接找与key相关的字符串就行了,没想到程序这里弄了个简单的算法
于是就写了一个简单的小脚本(附在wp最后),输出为应该要输入的字符串(此时软件才会输出“正确“)
需要注意的是,这里iArr数组1与2的位置会有两组不同赋值,原key值也是有两组不同赋值,遍历一下即可~~
最后输出结果
最后附上脚本源码~~
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
int[] iArr = new int[16];
iArr[0] = 42;
iArr[12] = 14;
iArr[10] = 7;
iArr[14] = 15;
iArr[15] = 17;
iArr[1] = 43;
iArr[5] = 5;
iArr[6] = 15;
iArr[2] = 32;
iArr[3] = 23;
iArr[11] = 68;
iArr[4] = 85;
iArr[13] = 5;
iArr[9] = 7;
iArr[7] = 8;
iArr[8] = 22;
String key=new String("anylab");
int[] res=new int[100];
for(int i=0;i<16;i++){
res[i]=(iArr[i] & 255)^(key.charAt(i % key.length()) & 255);
}
char[] ans=new char[100];
for(int i=0;i<16;i++){
ans[i]=(char)res[i];
System.out.print(ans[i]);
}
}
}