攻防世界逆向高手题之Guess-the-Number

攻防世界逆向高手题之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再取整数就是我们要输入的数。

解毕!敬礼!

### 关于 '攻防世界' 的 CTF 活动 #### 背景介绍 “攻防世界”是一个专注于网络安全竞赛的平台,提供多种类型的挑战供参赛者练习和提升技能。这些挑战通常分为多个类别,例如 Web 安全、密码学(Crypto)、逆向工程(Reverse Engineering)、取证分析(Forensics)以及杂项(Miscellaneous)。其中,“Test-flag-please-ignore” 是属于 MISC 类别的一个经典目。 --- #### 杂项类目概述 MISC 类型的目往往涉及一些基础的信息处理技术,比如编码转换、数据解析等。对于 “Test-flag-please-ignore”,其核心在于 **十六进制字符串解码** 和最终 Flag 的提取过程[^1]。 --- #### 目描述与已知条件 根据参考资料中的描述,该目的主要操作流程如下: 1. 下载并解压缩 `misc10.zip` 文件后获得了一个 `.txt` 文本文件。 2. 文件内容显示为一段十六进制表示形式的字符串: ```plaintext 666c61677b68656c6c6f5f776f726c647d ``` 3. 初步提交此原始字符串作为 Flag 后验证失败,因此推测需要进一步处理。 4. 经过观察得知上述字符由标准 ASCII 编码范围内的数值构成 (即包含字母 A-F 及数字),可确认这是一个典型的十六进制编码格式[^2]。 --- #### 解决方案详解 为了成功获取目标 Flag,需执行以下具体步骤: 1. 使用工具或者编程手段完成从十六进制到明文字符串的转换工作。以下是 Python 实现方式的一个例子: ```python hex_string = "666c61677b68656c6c6f5f776f726c647d" decoded_flag = bytes.fromhex(hex_string).decode('utf-8') print(decoded_flag) ``` 输出结果应为预期的 Flag 值:`flag{hello_world}`[^3]。 2. 将转化后的正确答案按照指定格式输入至答界面即可得分。 --- #### 技术要点总结 此类问的关键点在于识别给定数据的实际含义及其可能存在的隐藏模式。在此案例中,掌握基本的数据编码知识尤为重要,尤其是熟悉如何在不同进制之间相互切换的能力。此外,利用现有的在线资源和服务也可以极大地简化手动计算的过程^。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沐一 · 林

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值