re题(16)BUUCTF-Java逆向解密

news2024/12/27 0:41:31

BUUCTF在线评测 (buuoj.cn)BUUCTF在线评测 (buuoj.cn)

jadx 1.4.4安装:jadx-gui-1.4.4 反编译工具使用教程 - 莫贞俊晗 - 博客园 (cnblogs.com)

 认识.class:

Java-初识 .class 文件_class文件怎么打开-CSDN博客

用查壳工具也可以知道是java写的

放到jadx里,在源代码里找到main()函数

这里有两步,第一步:是在主函数main上输入flag,再调用Encrypt()来进行加密

public static void main(String[] args) {
    Scanner s = new Scanner(System.in);
    System.out.println("Please input the flag );
    String str = s.next();
    System.out.println("Your input is );
    System.out.println(str);
    char[] stringArr = str.toCharArray();
    Encrypt(stringArr);
  }

 第二步就是通过逆向Encrypt()函数来获取flag 

public static void Encrypt(char[] arr) {
    ArrayList<Integer> Resultlist = new ArrayList<>();
    for (int i = 0; i < arr.length; i++) {
      int result = arr[i] + 64 ^ 0x20;
      Resultlist.add(Integer.valueOf(result));
    } 
    int[] KEY = { 
        180, 136, 137, 147, 191, 137, 147, 191, 148, 136, 
        133, 191, 134, 140, 129, 135, 191, 65 };
    ArrayList<Integer> KEYList = new ArrayList<>();
    for (int j = 0; j < KEY.length; j++)
      KEYList.add(Integer.valueOf(KEY[j])); 
    System.out.println("Result:");
    if (Resultlist.equals(KEYList)) {
      System.out.println("Congratulations);
    } else {
      System.err.println("Error);
    } 
  }

public static void Encrypt(char[] arr) {
    ArrayList<Integer> Resultlist = new ArrayList<>();
    for (int i = 0; i < arr.length; i++) {
      int result = arr[i] + 64 ^ 0x20;
      Resultlist.add(Integer.valueOf(result));
    } 
    int[] KEY = { 
        180, 136, 137, 147, 191, 137, 147, 191, 148, 136, 
        133, 191, 134, 140, 129, 135, 191, 65 };
    ArrayList<Integer> KEYList = new ArrayList<>();
    for (int j = 0; j < KEY.length; j++)
      KEYList.add(Integer.valueOf(KEY[j])); 
    System.out.println("Result:");
    if (Resultlist.equals(KEYList)) {
      System.out.println("Congratulations);
    } else {
      System.err.println("Error);
    } 
  }
for (int i = 0; i < arr.length; i++) 
      int result = arr[i] + 64 ^ 0x20;

 然后再和KEY进行比较,相等就是我们要求的flag了 

if (Resultlist.equals(KEYList)) 
      System.out.println("Congratulations);

  这里放上Python的求解代码:

key = [ 180, 136, 137, 147, 191, 137, 147, 191, 148, 136, 133, 191, 134, 140, 129, 135, 191, 65 ]
flag = ""

for i in range(0,len(key)):
    for x in range(0,1024):     # 这里通过暴力破解来获取flag
        temp = x + 64 ^ 0x20    # 每个字符都加上固定的64 ^ 0x20
        if temp == key[i]:      # 如果相等就表示这是我们要的flag字符
            flag = flag + chr(x)
            break
print("flag{"+flag+"}")


#flag{This_is_the_flag_!}

 本题考查了Java逆向,用jadx打开java编写的.class文件,找到关键函数,本题只用普通的异或,写个脚本爆破就可以

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2124133.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ocelot + Consul 无法转发IP问题

现象 Ocelot Concul 进行访问 Ocelot Concul 服务都部署在同一台机器上时&#xff0c;访问正常 服务部署在另外一台机器上时&#xff0c;无法访问 显示 102 (unknown) status code of request URI: 发现Ocelot 日志显示是 hostname/api 所有 换了一台电脑就无法访问了 Ocel…

LabVIEW回转马达试验系统

基于LabVIEW的回转马达试验台通过高度集成的硬件与软件配合&#xff0c;实现对回转马达的各项性能测试&#xff0c;包括空载排量、跑合试验和冲击试验等&#xff0c;以满足出厂测试的严格标准和要求。 项目背景 回转马达作为多种机械设备的核心动力源&#xff0c;其性能的可靠…

一文搞定高并发编程:CompletableFuture的supplyAsync与runAsync

CompletableFuture是Java 8中引入的一个类&#xff0c;用于简化异步编程和并发操作。它提供了一种方便的方式来处理异步任务的结果&#xff0c;以及将多个异步任务组合在一起执行。CompletableFuture支持链式操作&#xff0c;使得异步编程更加直观和灵活。 在引入CompletableFu…

Python(TensorFlow和PyTorch)及C++注意力网络导图

&#x1f3af;要点 谱图神经网络计算注意力分数对比图神经网络、卷积网络和图注意力网络药物靶标建模学习和预测相互作用腹侧和背侧皮质下结构手写字体字符序列文本识别组织病理学图像分析长短期记忆财务模式预测相关性生物医学图像特征学习和迭代纠正 Python注意力机制 对…

Java面试篇基础部分-Java 实现的I/O方式

Java I/O 在整个的java.io包中提供了5个重要的I/O类和1个接口类。5个类分别是File、OutputStream、InputStream、Writer、Reader ,1个接口是指Serializable序列化接口。具体的使用方式可以查看JDK的参考文档。 Java NIO 实现 Java NIO的实现内容主要有如下的三个核心内容 Sel…

使用Vue3.5的onWatcherCleanup封装自动cancel的fetch函数

前言 在欧阳的上一篇 这应该是全网最详细的Vue3.5版本解读文章中有不少同学对Vue3.5新增的onWatcherCleanup有点疑惑&#xff0c;这个新增的API好像和watch API回调的第三个参数onCleanup功能好像重复了。今天这篇文章来讲讲新增的onWatcherCleanup函数的使用场景&#xff1a;…

《 C++ 容器全景指南:五 》深入探索 C++ 标准库中的 stack 与 queue 容器适配器

1、引言 1.1、容器适配器的概念与应用 容器适配器&#xff08;Container Adapters&#xff09;是 C 标准库提供的一种特殊容器&#xff0c;它不是一种独立的容器&#xff0c;而是对其他标准容器的封装&#xff0c;用来实现特定的数据结构如栈&#xff08;stack&#xff09;和…

【信创】麒麟KOS上安装使用网络抓包工具Wireshark

原文链接&#xff1a;【信创】麒麟KOS上安装使用网络抓包工具Wireshark Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于如何在麒麟桌面操作系统上安装和使用Wireshark的文章。Wireshark是一款强大的网络协议分析工具&#xff0c;广泛应用于网络故障排查、网络流…

Makefile学习总结

Makefile学习总结 目录 Makefile学习总结1. Makefile介绍2. Makefile规则3. Makefile文件里的赋值方法4. Makefile常用函数4.1 字符串替换和分析函数4.2 文件名函数4.3 其他函数 5. Makefile使用示例6、多级目录通用Makefile Demo6.1 一般通用Makefile的设计思想6.2 Demo分析 参…

DAY73

作业 pro文件&#xff1a; QT texttospeech 头文件&#xff1a; #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPushButton> //按钮类 #include <QLabel> //标签类 #include <QLineEdit> //行编译器类 #include…

【delphi】判断多显示器下,程序在那个显示器中

在 Delphi 中&#xff0c;如果你的电脑连接了多个显示器&#xff0c;可以通过以下步骤判断某个程序在哪个显示器上运行。 方法概述&#xff1a; 获取程序窗口的位置&#xff08;例如窗体的 Left、Top 坐标&#xff09;。使用 Screen.MonitorFromWindow 函数来确定该窗口所属的…

Hibernate QueryPlanCache 查询计划缓存引发的内存溢出

目录 1.排查方式2.结论3.解决办法 前言&#xff1a;在生产环境中有一个后端程序多次报oom然后导致程序中断。 1.排查方式 通过下载后端程序产生的oom文件&#xff0c;将oom文件导入MemoryAnalyzer程序分析程序堆内存使用情况。 1、将oom文件导入MemoryAnalyzer后可以看到概览信…

在银河麒麟服务器操作系统中设置SSH登录限制

在银河麒麟服务器操作系统中设置SSH登录限制 1、引言2、 步骤一&#xff1a;检查MaxStartups选项3、步骤二&#xff1a;修改MaxStartups选项4、步骤三&#xff1a;重启SSH服务 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1、引言 在服务…

flask旧衣物捐赠系统—计算机毕业设计源码26577

摘要 科技进步的飞速发展引起人们日常生活的巨大变化&#xff0c;电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流&#xff0c;人类发展的历史正进入一个新时代。在现实运用中&#xff0c;应用软件的工作规…

【干货分享】Ftrans安全数据交换系统 搭建跨网数据传输通道

安全数据交换系统是一种专门设计用于在不同的网络、系统或组织之间安全地传输数据的软件或硬件解决方案。这种系统通常包含多种安全特性&#xff0c;以确保数据在传输过程中的保密性、完整性和可用性。 安全数据交换系统可以解决哪些问题&#xff1f; 安全数据交换系统主要解…

神经网络卷积层和最大池化

文章目录 一、卷积层原理二、相关函数的概念三、卷积层的应用四、最大池化原理五、最大池化案例 一、卷积层原理 ./ 当前目录&#xff1b;…/ 上级目录 父类&#xff08;也称为基类或超类&#xff09;是指在类继承体系中被其他类继承的类。也就是被其他子类进行调用的类 当In_…

「豆包 Marscode 体验官」AI 加持的云端 IDE——三种方法高效开发前后端聊天交互功能

以下是「豆包 MarsCode 体验官」优秀文章&#xff0c;作者努力的小雨。 豆包 MarsCode 豆包MarsCode 编程助手支持的 IDE: 支持 Visual Studio Code 1.67.0 及以上版本&#xff0c;以及 JetBrains 系列 IDE&#xff0c;如 IntelliJ IDEA、Pycharm 等&#xff0c;版本要求为 22…

016.PL-SQL编程—过程

我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448; 入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448; 虚 拟 环 境 搭 建 &#xff1a;&#x1f449;&…

服务器测试之GPU基础汇总

GPU基础汇总 1.GPU简介 1.1.什么是GPU GPU英文全称Graphic Processing Unit&#xff0c;中文翻译为“图形处理器”。一个专门的图形核心处理器。GPU是显示卡的“大脑”&#xff0c;决定了该显卡的档次和大部分性能&#xff0c;同时也是2D显示卡和3D显示卡的区别依据。可以形…

Flask 第三课 -- 第一个应用

上一章节我们已经成功安装了 Flask&#xff0c;接下来我们可以创建一个简单的 Flask 应用。 首先&#xff0c;创建一个名为 app.py 的文件&#xff0c;并添加以下内容&#xff1a; from flask import Flaskapp Flask(__name__)app.route(/) def hello_world():return Hello,…