• BUUCTF Java逆向解密 1


    Class文件是Java编译后的二进制字节码文件。
    我这里使用的是jadx-gui,直接将class文件拖进去即可

    package defpackage;
    
    import java.util.ArrayList;
    import java.util.Scanner;
    
    /* renamed from: Reverse  reason: default package */
    /* loaded from: Reverse.class */
    public class Reverse {
        public static void main(String[] args) {
            Scanner s = new Scanner(System.in);
            System.out.println("Please input the flag :");
            String str = s.next();
            System.out.println("Your input is :");
            System.out.println(str);
            char[] stringArr = str.toCharArray();
            Encrypt(stringArr);
        }
    
        public static void Encrypt(char[] arr) {
            ArrayList<Integer> Resultlist = new ArrayList<>();
            for (char c : arr) {
                int result = (c + '@') ^ 32;
                Resultlist.add(Integer.valueOf(result));
            }
            int[] KEY = {180, 136, 137, 147, 191, 137, 147, 191, 148, 136, 133, 191, 134, 140, 129, 135, 191, 65};
            ArrayList<Integer> KEYList = new ArrayList<>();
            for (int i : KEY) {
                KEYList.add(Integer.valueOf(i));
            }
            System.out.println("Result:");
            if (Resultlist.equals(KEYList)) {
                System.out.println("Congratulations!");
            } else {
                System.err.println("Error!");
            }
        }
    }
    
    • 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

    代码的逻辑也非常简单

    if (Resultlist.equals(KEYList)) {
                System.out.println("Congratulations!");
    }
    
    • 1
    • 2
    • 3

    主要就是我们输入的值最后需要等于KEYList这个数组,而KEYList的值就是

    int[] KEY = {180, 136, 137, 147, 191, 137, 147, 191, 148, 136, 133, 191, 134, 140, 129, 135, 191, 65};
    
    • 1

    exp

    java

    public class Test {
        public static void main(String[] args) {
            int[] KEY = {180, 136, 137, 147, 191, 137, 147, 191, 148, 136, 133, 191, 134, 140, 129, 135, 191, 65};
            char cArr[] = new char[KEY.length * 2];
            for (int i = 0; i < KEY.length; i++) 
                cArr[i] = (char)((KEY[i] ^ 32 ) - '@');
            System.out.println(new String(cArr));
        }
     }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    python

    KEY = [180, 136, 137, 147, 191, 137, 147, 191,148, 136, 133, 191, 134, 140, 129, 135, 191, 65]
    cArr = [chr(((KEY[i] ^ 32) - ord('@'))) for i in range(len(KEY))]
    print(''.join(cArr))
    
    
    • 1
    • 2
    • 3
    • 4

    flag

    flag{This_is_the_flag_!}
    
    • 1
  • 相关阅读:
    分布式文件系统JuiceFS测试总结
    云原生Kubernetes:K8S集群list-watch机制与 pod调度约束
    Docker部署Nacos注册中心
    springcloud3 指定nacos的服务名称和配置文件的group,名称空间
    shell_56.Linux永久重定向
    【LeetCode】【剑指offer】【最小的k个数】
    Windows系统CMake编译Opencv4.6.0源码,支持contrib库
    汽车烟雾测漏仪(EP120)
    Leetcode:前缀和系列
    三、防火墙-源NAT
  • 原文地址:https://blog.csdn.net/qq_56313338/article/details/133753051