当前位置: 首页 > news >正文

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

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):     # 这里通过暴力破解来获取flagtemp = x + 64 ^ 0x20    # 每个字符都加上固定的64 ^ 0x20if temp == key[i]:      # 如果相等就表示这是我们要的flag字符flag = flag + chr(x)break
print("flag{"+flag+"}")#flag{This_is_the_flag_!}

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • ArcGIS中怎么合并多个点图层并删除重复点?
  • llms 文本分类的微调
  • seasun测验
  • 机器学习的量子飞跃:推动AI能力的极限
  • 闯关leetcode——13. Roman to Integer
  • python从入门到精通:面向对象
  • 练习:基于TCP协议实现一个网盘系统
  • 在windows下抓空包(monitor网卡+wareshark+MNM)
  • 105页PPT:华为ISC集成供应链变革、模式与方法解析
  • QT如何ui上的QTableWidget控件如何使用
  • 误删文件后的数据救赎实战恢复指南
  • ABB HDS大功率永磁同步伺服电机的创新特性
  • Java stream使用与执行原理
  • 速盾:你知道高防 IP 和高防 CDN 的区别吗?
  • Golang | Leetcode Golang题解之第395题至少有K个重复字符的最长子串
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • Effective Java 笔记(一)
  • iOS 系统授权开发
  • Javascript编码规范
  • Js基础知识(四) - js运行原理与机制
  • Meteor的表单提交:Form
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • Selenium实战教程系列(二)---元素定位
  • Vue 重置组件到初始状态
  • 分类模型——Logistics Regression
  • 简析gRPC client 连接管理
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 区块链将重新定义世界
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 2017年360最后一道编程题
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • 选择阿里云数据库HBase版十大理由
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • # 数论-逆元
  • #pragma data_seg 共享数据区(转)
  • (第30天)二叉树阶段总结
  • (计算机网络)物理层
  • (算法)区间调度问题
  • (原)Matlab的svmtrain和svmclassify
  • ***通过什么方式***网吧
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .NET COER+CONSUL微服务项目在CENTOS环境下的部署实践
  • .NET Micro Framework 4.2 beta 源码探析
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .NET开源、简单、实用的数据库文档生成工具
  • .net专家(张羿专栏)
  • .w文件怎么转成html文件,使用pandoc进行Word与Markdown文件转化
  • @converter 只能用mysql吗_python-MySQLConverter对象没有mysql-connector属性’...
  • @JoinTable会自动删除关联表的数据
  • @property @synthesize @dynamic 及相关属性作用探究
  • @RequestMapping-占位符映射
  • @Tag和@Operation标签失效问题。SpringDoc 2.2.0(OpenApi 3)和Spring Boot 3.1.1集成