easy-java
拿到题目使用jad把reverse.class编译成reverse.java
jad -o -r -s java -d ./ ./Reverse.class
用jd-gui打开java源文件
// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.kpdus.com/jad.html
// Decompiler options: packimports(3)
// Source File Name: Reverse.java
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Scanner;
public class Reverse
{
public Reverse()
{
}
public static void main(String args[])
{
Scanner scanner = new Scanner(System.in);
System.out.println("Please input the flag \uFF1A");
String s = scanner.next();
System.out.println("Your input is \uFF1A");
System.out.println(s);
char ac[] = s.toCharArray();
Encrypt(ac);
}
public static void Encrypt(char ac[])
{
ArrayList arraylist = new ArrayList();
for(int i = 0; i < ac.length; i++)
{
int j = ac[i] + 64 ^ 0x20;
arraylist.add(Integer.valueOf(j));
}
int ai[] = {
131, 129, 148, 134, 140, 129, 135, 155, 138, 129,
150, 129, 191, 133, 129, 147, 153, 191, 133, 129,
147, 153, 157
};
ArrayList arraylist1 = new ArrayList();
for(int k = 0; k < ai.length; k++)
arraylist1.add(Integer.valueOf(ai[k]));
System.out.println("Result:");
if(arraylist.equals(arraylist1))
System.out.println("Congratulations\uFF01");
else
System.err.println("Error\uFF01");
}
}
我们查看关键代码
for(int i = 0; i < ac.length; i++)
{
int j = ac[i] + 64 ^ 0x20;
arraylist.add(Integer.valueOf(j));
}
int ai[] = {
131, 129, 148, 134, 140, 129, 135, 155, 138, 129,
150, 129, 191, 133, 129, 147, 153, 191, 133, 129,
147, 153, 157
};
这里是一个简单的加密函数,我们反向操作即可
a = [131, 129, 148, 134, 140, 129, 135, 155, 138, 129,
150, 129, 191, 133, 129, 147, 153, 191, 133, 129,
147, 153, 157]
for i in a:
s = i - 64 ^ 0x20
print(chr(s),end='')
catflag{java_easy_easy}