攻防の世界Guess the Number

14482 ワード

2020.7.21-1まずこの問題は正直に言って、ただ試練のコード能力この問題の難点は:javaを手に入れた後にどのようにするか分からないまずjavaプログラムに対して、反コンパイルを行って、プラグインを利用することができて、あるいはDJ java discompiler.javaを反コンパイルして、反コンパイルの後で、私達は1つの原始コードを得ることができます
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 , , 。 。