攻防世界 逆向 Guess-the-Number
(原创)
原题如下:
下载文件,是一个jar包,解压一下得到一个class文件。
这个地方要用到一个反编译插件jadclipse,得到guess.class文件的源代码如下(全部)。
import java.io.PrintStream;
import java.math.BigInteger;
public class guess
{
public guess()
{
}
static String XOR(String _str_one, String _str_two)
{
BigInteger i1 = new BigInteger(_str_one, 16);
BigInteger i2 = new BigInteger(_str_two, 16);
BigInteger res = i1.xor(i2);
String result = res.toString(16);
return result;
}
public static void main(String args[])
{
int guess_number = 0;
int my_num = 0x14d8f707;
int my_number = 0x5c214f6c;
int flag = 0x149b861a;
if(args.length > 0)
{
try
{
guess_number = Integer.parseInt(args[0]);
if(my_number / 5 == guess_number)
{
String str_one = "4b64ca12ace755516c178f72d05d7061";
String str_two = "ecd44646cfe5994ebeb35bf922e25dba";
my_num += flag;
String answer = XOR(str_one, str_two);
System.out.println((new StringBuilder("your flag is: ")).append(answer).toString());
} else
{
System.err.println("wrong guess!");
System.exit(1);
}
}
catch(NumberFormatException e)
{
System.err.println("please enter an integer \nexample: java -jar guess 12");
System.exit(1);
}
} else
{
System.err.println("wrong guess!");
int num = 0xf4240;
num++;
System.exit(1);
}
}
}
想要得到flag,必须要运行的是try中的部分。
我对代码做了如下修改:
将if-else语句去掉,之后为了使(my_number / 5 == guess_number)条件成立,我将变量my_number和guess_number均改为0。
直接运行,得到运行结果:
your flag is: a7b08c546302cc1fd2a4d48bf2bf2ddb