[BUUCTF]Reverse-Java逆向解密
在buuctf上下载题目
用jd-gui打开
通过百度等等搜索引擎知道:
import java.util.ArrayList; 表示导入了Java标准库中的ArrayList类,用于动态地创建和操作数组列表。
import java.util.Scanner; 表示导入了Java标准库中的Scanner类,用于从标准输入流(System.in)中读取用户输入。
public class Reverse { 表示定义了一个名为Reverse的公共类。Java中,一个程序必须至少包含一个公共类,并且文件名必须与公共类名相同。
public static void main(String[] args) { 表示定义了一个名为main的公共静态方法,用于程序的入口点。
Scanner s = new Scanner(System.in); 表示创建一个Scanner对象,用于从标准输入流(System.in)中读取用户输入。
System.out.println("Please input the flag :"); 表示输出一个提示信息,要求用户输入一个标志(flag)。
String str = s.next(); 表示从Scanner对象中读取用户输入,并将其存储到一个名为str的字符串变量中。
System.out.println("Your input is :"); 表示输出一个提示信息,告诉用户刚刚输入的是什么。
System.out.println(str); 表示输出用户刚刚输入的字符串。
char[] stringArr = str.toCharArray(); 表示将字符串转换为字符数组,存储到一个名为stringArr的字符数组变量中。
最后:
在 Encrypt 函数中,我们创建了一个空的 ArrayList 对象 Resultlist,用于存储字符数组 arr 中每个字符经过加密后的结果。
接着,我们使用 for 循环来遍历字符数组 arr 中的每个字符。在每次循环中,我们将当前字符加上 64,然后异或上十六进制数 0x20,并将结果存储到 Resultlist 中。
意思就是说:
将我们每个输入的字符串加上64再与32异或,那么我们想要得到flag,直接反推与32异或再减去64即可。
key=[180, 136, 137, 147, 191, 137, 147, 191, 148, 136, 133, 191, 134, 140, 129, 135, 191, 65]
flag=""
for i in range(len(key)):
flag+=chr((key[i]^32)-ord('@'))
print ('flag{'+flag+'}')
这样就能得到flag了,主要是没有接触过JAVA的人需要理解一下这段代码,不然属实难绷。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端