闲着无视刷群发现有人发问题
0x01.启动程序
要求输入key,看title为xxxx-xxxx-xxxx-xxxx
输入假key弹错误信息
0X02.Jadx反编译打开
调用C0002.m6 验证key
双击进入函数
判断输入是不是为空且是不是长度为19
接着这边有个arraycopy 混淆视听 System类下的arraycopy返回值应该为void
应该是重写了函数 双击进去
这里分析一下 charArray 居然没初始化 应该是反编译问题? 往下看 for循环这里一串字符 然后后面去他长度加上下面的charArray[i]可以判断这个字符串就是我们的charArray 我们分割一下 加进去
然后复制代码运行一下 看看返回值
得到x
继续返回m6里面看看
让f1_=x
然后继续往下 两个for循环 就是取key的部分 然后和f1中的对比
这边有个m0函数 其实不用看了直接复制一份跑一下 打印出f1_.charAt(Start.m0(i + i3, f1_)的值就行
得到这个 每4位加一下**-**就是flag
m1函数为递归求斐波那契 第几位的值
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
class MainTest{
static String f1_ = "JsnatterrtJuaththovacke";
static String f2_ = "ZYXWVUTSRQPONMLKJIHGFEDCBA";
public static int m0(int i, String str) {
// System.out.println(m1(i));
return m1(i) % str.length();
}
private static int m1(int i) {
if (i > 2) {
return m1(i - 1) + m1(i - 2);
}
return 1;
}
public static boolean m6(String str) {
if (str != null && str.length() == 19) {
//System.arraycopy(f2_, 0, f1_, 5, 5);
boolean keyGuessWrong = true;
int i = 0;
for (int i2 = 0; i2 < 4; i2++) {
for (int i3 = 0; i3 < 4; i3++) {
System.out.print(f1_.charAt(m0(i + i3, f1_)));
// System.out.println(i + i3);
if (str.charAt(i + i3) != f1_.charAt(m0(i + i3, f1_))) {
keyGuessWrong = false;
}
}
i += 5;
}
return keyGuessWrong;
}
return false;
}
public static void main(String[] args){
m6("aaaa-aaaa-aaaa-aaaa");
char[] charArray={'v','È','¾','¤','Ê','Ê','¬','Æ','Æ','Ê','v','Ì','¤','Ê','²','Ê','²','À','Î','¤','¨','¸','¬'};
String x = "";
for (int i = 0; i < "vȾ¤ÊʬÆÆÊv̤ʲʲÀΤ¨¸¬".toCharArray().length; i++) {
x = String.valueOf(x) + ((char) ((charArray[i] >> 1) + 15));
}
// System.out.print(x);
}
}
|