攻防世界逆向高手题之Guess-the-Number
继续开启全栈梦想之逆向之旅~
这题是攻防世界逆向高手题的Guess-the-Number
下载了一个jar文件,根据题目描述猜个数字然后找到flag.,估计题目类型是flag存储型,满足条件就有flag:
用我之前做安卓逆向下载的jar.gui打开,查看代码逻辑:
逻辑不难,果然是满足条件就有的存储型flag,这里我直接修改截断代码即可,xor是生成存储型flag的代码,要保留:
import java.math.BigInteger;
public class 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 = 349763335;
int my_number = 1545686892;
int flag = 345736730;
String str_one = "4b64ca12ace755516c178f72d05d7061";
String str_two = "ecd44646cfe5994ebeb35bf922e25dba";
my_num += flag;
String answer = XOR(str_one, str_two);
System.out.println("your flag is: " + answer);
}
}
这里截断代码的时候遇到第一个错误,我竟然忘记编译命令是什么了,还傻傻的用java -c,真的是马冬梅啊马冬梅,后来查看了百度才想起编译命令是javac,运行即得flag:
当然还有第二种方法,看输入后处理的判断逻辑,输入正确的数即可:
这里判断逻辑是my_number / 5 == guess_number,一开始不记得前面的guess_number = Integer.parseInt(args[0])是什么意思,所以就没往这里想,后来才发现是简单的获取整数参数而已,所以计算机运算1545686892 / 5再取整数就是我们要输入的数:(PS:参数写在右边)
总结:
1:我竟然忘记编译命令是什么了,还傻傻的用java -c,真的是马冬梅啊马冬梅,后来查看了百度才想起编译命令是javac,运行即得flag。
2:这里判断逻辑是my_number / 5 == guess_number,一开始不记得前面的guess_number =
Integer.parseInt(args[0])是什么意思,所以就没往这里想,后来才发现是简单的获取整数参数而已,所以计算机运算1545686892
/ 5再取整数就是我们要输入的数。
解毕!敬礼!