攻防の世界Guess the Number
14482 ワード
2020.7.21-1まずこの問題は正直に言って、ただ試練のコード能力この問題の難点は:javaを手に入れた後にどのようにするか分からないまずjavaプログラムに対して、反コンパイルを行って、プラグインを利用することができて、あるいはDJ java discompiler.javaを反コンパイルして、反コンパイルの後で、私達は1つの原始コードを得ることができます
元のコードを判断条件を外すとflagをすぐに解くことができます.得られた結果はyour flag is:a 7 b 08 c 546302 cc 1 fd 2 a 4 d 48 bf 2 bf 2 ddb//さらに、コードから推測するguess the numberが0 x 5 c 214 f 6 c/5=309137378であることがわかりますので、プログラムを変更しなくてもflagを直接出力することができます
import java.io.PrintStream;
import java.math.BigInteger;
public class Gues
{
public Gues()
{
}
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;
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());
}
元のコードを判断条件を外すとflagをすぐに解くことができます.得られた結果はyour flag is:a 7 b 08 c 546302 cc 1 fd 2 a 4 d 48 bf 2 bf 2 ddb//さらに、コードから推測するguess the numberが0 x 5 c 214 f 6 c/5=309137378であることがわかりますので、プログラムを変更しなくてもflagを直接出力することができます
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
example: java -jar guess 12");
System.exit(1);
}
} else
{
System.err.println("wrong guess!");
int num = 0xf4240;
num++;
System.exit(1);
}
}
}
```
, , answer=one xor two , , 。 。