Contents

[Re]Java RE

闲着无视刷群发现有人发问题

0x01.启动程序

https://s2.loli.net/2023/08/27/abC5OgQFjq8NJ46.png

要求输入key,看title为xxxx-xxxx-xxxx-xxxx

输入假key弹错误信息

https://s2.loli.net/2023/08/27/642VIQwyYWOcvpG.png

0X02.Jadx反编译打开

https://s2.loli.net/2023/08/27/DHkWobAzsVTJpF7.png

https://s2.loli.net/2023/08/27/wCjaAbvydfFx9Gp.png

调用C0002.m6 验证key

双击进入函数

https://s2.loli.net/2023/08/27/1P69Ot7RidCmhjs.png

判断输入是不是为空且是不是长度为19

接着这边有个arraycopy 混淆视听 System类下的arraycopy返回值应该为void

应该是重写了函数 双击进去

https://s2.loli.net/2023/08/27/sDFlmQ4T3cBKIPE.png

这里分析一下 charArray 居然没初始化 应该是反编译问题? 往下看 for循环这里一串字符 然后后面去他长度加上下面的charArray[i]可以判断这个字符串就是我们的charArray 我们分割一下 加进去

然后复制代码运行一下 看看返回值

https://s2.loli.net/2023/08/27/vdNa5479GngZUkh.png

得到x

继续返回m6里面看看

让f1_=x

然后继续往下 两个for循环 就是取key的部分 然后和f1中的对比

这边有个m0函数 其实不用看了直接复制一份跑一下 打印出f1_.charAt(Start.m0(i + i3, f1_)的值就行

https://s2.loli.net/2023/08/27/p4taXKiny2AdVHb.png

得到这个 每4位加一下**-**就是flag

https://s2.loli.net/2023/08/27/rlaUk2MsHxjNK1e.png

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);

    }

}