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

Android逆向题解攻防世界-easy-apk

Jeb反编译apk

题目比较简单,就是一个改了码表的base64编码。

    protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);this.setContentView(0x7F04001B);  // layout:activity_main((Button)this.findViewById(0x7F0B0076)).setOnClickListener(new View.OnClickListener() {  // id:button@Override  // android.view.View$OnClickListenerpublic void onClick(View view) {String s = ((EditText)MainActivity.this.findViewById(0x7F0B0075)).getText().toString();  // id:editTextif(new Base64New().Base64Encode(s.getBytes()).equals("5rFf7E2K6rqN7Hpiyush7E6S5fJg6rsi5NBf6NGT5rs=")) {Toast.makeText(MainActivity.this, "验证通过!", 1).show();return;}Toast.makeText(MainActivity.this, "验证失败!", 1).show();}});}
public class Base64New {private static final char[] Base64ByteToStr = null;private static final int RANGE = 0xFF;private static byte[] StrToBase64Byte;static {Base64New.Base64ByteToStr = new char[]{'v', 'w', 'x', 'r', 's', 't', 'u', 'o', 'p', 'q', '3', '4', '5', '6', '7', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'y', 'z', '0', '1', '2', 'P', 'Q', 'R', 'S', 'T', 'K', 'L', 'M', 'N', 'O', 'Z', 'a', 'b', 'c', 'd', 'U', 'V', 'W', 'X', 'Y', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', '8', '9', '+', '/'};Base64New.StrToBase64Byte = new byte[0x80];}public String Base64Encode(byte[] bytes) {StringBuilder res = new StringBuilder();for(int i = 0; i <= bytes.length - 1; i += 3) {byte[] enBytes = new byte[4];byte tmp = 0;for(int k = 0; k <= 2; ++k) {if(i + k <= bytes.length - 1) {enBytes[k] = (byte)((bytes[i + k] & 0xFF) >>> k * 2 + 2 | tmp);tmp = (byte)(((bytes[i + k] & 0xFF) << (2 - k) * 2 + 2 & 0xFF) >>> 2);}else {enBytes[k] = tmp;tmp = 0x40;}}enBytes[3] = tmp;for(int k = 0; k <= 3; ++k) {if(enBytes[k] <= 0x3F) {res.append(Base64New.Base64ByteToStr[enBytes[k]]);}else {res.append('=');}}}return res.toString();}
}

解密

魔改码表与标准码表参照对比,将加密字符串还原成标准码表编码的字符串,再标准base64解码即可。

        String newBase64 = "vwxrstuopq34567ABCDEFGHIJyz012PQRSTKLMNOZabcdUVWXYefghijklmn89+/";String oldBase64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";String target = "5rFf7E2K6rqN7Hpiyush7E6S5fJg6rsi5NBf6NGT5rs=";StringBuilder stringBuilder = new StringBuilder();for (int i = 0; i < target.length(); i++) {char ch = target.charAt(i);if (ch == '=') {stringBuilder.append('=');continue;}int index = newBase64.indexOf(ch);stringBuilder.append(oldBase64.charAt(index));}System.out.println(stringBuilder);System.out.println(new String(Base64.getDecoder().decode(stringBuilder.toString()), StandardCharsets.UTF_8));

运行结果:flag{05397c42f9b6da593a3644162d36eb01}
在这里插入图片描述

http://www.lryc.cn/news/425310.html

相关文章:

  • Linux系统使用Typecho搭建个人网站并一键发布公网远程管理本地站点
  • 机器学习速成第三集——无监督学习之聚类(理论部分)!
  • 【机器学习】CNN的基本架构模块
  • 第八节AWK报告生成器(2)
  • Linux 进程间通信之管道
  • IDEA 无法启动,点击之后没有任何提示或者界面
  • ctf 堆栈结构
  • sqlserver的openquery配置
  • Spring boot logback日志框架加载初始化源码
  • qt-11基本对话框(消息框)
  • Windows11下wsl闪退的解决
  • 通过调整JVM的默认内存配置来解决内存溢出(‌OutOfMemoryError)‌或栈溢出(‌StackOverflowError)‌等错误
  • RCE---eval长度限制绕过技巧
  • C++11标准模板(STL)- 算法库 - 类似 std::accumulate,但不依序执行 -(std::reduce)
  • 反射机制的介绍
  • AI图文带货,手把手教学,傻瓜操作,轻松日入500+,小白教程
  • java:实现简单的验证码功能
  • MybatisPlus使用指南
  • 5. MongoDB 集合创建、更新、删除
  • PHP中如何将变量从函数传递给acf_add_filter
  • KNN算法的使用
  • java文件上传
  • MySQL 数据库经验总结
  • Python环境安装及PIP安装(Mac OS版)
  • 2024自动驾驶(多模态)大模型综述:从DriveGPT4、DriveMLM到DriveLM、DriveVLM
  • 晨控CK-GW08-EC与汇川AC801系列PLC的EtherCAT通讯连接说明手册
  • 向上or向下调整建堆 的时间复杂度的本质区别的讲解
  • 阿一网络安全实战演练之利用 REST URL 中的服务器端参数污染
  • [游戏开发] LuaTable转string存读二进制文件
  • 光伏业务管理系统的一些妙用功能