🗒️Java常见加密方式

常见的Java混淆汇总
Java常见加密方式
status
Published
type
Post
category
技术分享
date
Jul 2, 2023
slug
Jconvert_top
summary
常见的Java混淆汇总
tags
混淆集
password
icon
😀
探讨Java常见加密方式
 

📝 主旨内容

本文提供一些Java加密混淆转换python的一些解决方案,如有纰漏可指正!

1、字符串与字节

在我们通过frida hook app某个结果的某个类的某个函数返回的结果后,有时候得到一串经过混淆的Java字节数组,那么我们如何把这个Java字节数组转换成python的字节数组的呢,Java和Python的字节数组表达方式有有什么异同呢
如果 Java 字节数组包含负数,这意味着这些字节实际上是有符号的字节。由于 Python 中的字节是无符号的,我们需要先将 Java 字节数组中的每个有符号字节转换为相应的无符号字节值。在 Java 中,字节(byte)是 8 位的,有符号的,范围是 -128 到 127要将其转换为 Python 中 0 到 255 范围的无符号字节。

0xFF处理

我们可以对 Java 字节的每个元素执行与 0xFF 的位与操作

负数相加处理

由于对于符号的Java字节,我们可以通过+256来转换为正的因为Java字节数组范围是[-128: 127]
 

2、UUID

UUID(通用唯一识别码,Universally Unique Identifier)在 Java 中是一种标准的类,用于生成唯一的标识符。UUID 的常见用途包括在分布式系统中标识信息,确保每个元素都有一个唯一的标识符,从而避免重复。
在 Java 中,java.util.UUID 类用于生成和处理 UUID。Java 的 UUID 类能生成几种类型的 UUID,但最常用的是基于随机数和基于时间的 UUID(分别对应于 UUID 的版本 4 和 1)。

UUID 的结构

UUID 是一个 128 位的值,通常表示为 32 个十六进制数字,分为五组,形式如 8-4-4-4-12,例如 123e4567-e89b-12d3-a456-426655440000
notion image

Java 中生成 UUID

 

Python 中生成UUID

 

3、随机

notion image
  1. 随机数生成
      • BigInteger 类用于处理大整数(超过 Java 基本数据类型 long 的范围)。
      • new BigInteger(80, new SecureRandom()) 创建了一个 80 位的随机正整数。这里,80 位是指二进制位数。
      • new SecureRandom() 生成一个强随机数生成器,确保随机性的质量。
  1. 转换为 16 进制字符串
      • v4.toString(16) 将生成的 BigInteger 值转换为 16 进制表示。参数 16 表示采用 16 进制。
 
 

4、时间戳

notion image
 

5、十六进制的字符串

  • 将数据转换为十六进制格式的表示。这在不同编程语言中是一个常见的操作
在 Java 中,将十进制数字转换成十六进制字符串是一个简单的过程,可以使用内置的方法来实现。当你想要将一个十六进制的字符串表示形式转换为它对应的十进制数值时,你也可以使用 Java 的标准库方法。
notion image
 

将十进制数转换为十六进制字符串

你可以使用 Integer.toHexString(int i) 方法来将一个十进制整数转换为十六进制字符串:
在这个例子中,整数 255 被转换成了十六进制表示的字符串 "ff"。

将十六进制字符串转换为十进制数

相反,如果你有一个十六进制的字符串,并想将它转换为十进制数,你可以使用 Integer.parseInt(String s, int radix) 方法:
这里,字符串 "ff" 被解析为基数为 16 的整数(即十六进制),结果是十进制数 255。

 
将字符串 'pengyuyan' 转换为 UTF-8 编码的十六进制表示后,对于每个字节的十六进制表示,如果不足两位,则在前面补零,以确保每个表示形式都是两个十六进制数字。得到的列表是 ['70', '65', '6e', '67', '79', '75', '79', '61', '6e']。这个列表中的每个元素都是原始字符串中对应字符的 UTF-8 编码的十六进制表示
字符串 "pengyuyan" 的 UTF-8 编码的十六进制表示。
 

6、md5

MD5(Message-Digest Algorithm 5)是一种广泛使用的加密哈希函数,它可以产生一个 128 位(16 字节)的哈希值。通常,这个哈希值表示为 32 位的十六进制数。MD5 主要用于确保数据完整性,但由于安全性问题(容易受到碰撞攻击),它不再建议用于加密或安全认证等场合。
在 Java 和 Python 中,都可以使用内置的库来生成字符串的 MD5 哈希。

Java 中生成 MD5 哈希

在 Java 中,你可以使用 java.security.MessageDigest 类来生成 MD5 哈希值:

Python 中生成 MD5 哈希

在 Python 中,你可以使用 hashlib 模块来生成 MD5 哈希值:
notion image
 

7、base64编码

Base64 编码是一种广泛使用的二进制到文本编码方案,通过将二进制数据转换为 ASCII 字符串来实现。这种编码常用于在不支持二进制数据的环境中传输数据,例如在网页或电子邮件中。Base64 编码将每三个字节的二进制数据转换为四个字节的文本数据,从而增加了约 33% 的数据量。
在 Java 和 Python 中,都可以使用内置的库来进行 Base64 编码和解码。

Java 中的 Base64 编码和解码

在 Java 8 及更高版本中,java.util.Base64 类提供了 Base64 编码和解码的实现:
或:

Python 中的 Base64 编码和解码

在 Python 中,可以使用 base64 模块来进行 Base64 编码和解码:
或:
 

注意事项

  • Base64 不是一种加密方法,它不应该用于安全或隐私目的。它只是一种编码方案,用于数据表示。
  • Base64 编码常用于处理如图片、音频文件等大型二进制数据的情况,以及在需要将二进制数据嵌入文本格式(如 JSON、XML)的场景中。
  • Base64 编码的结果仅包含 ASCII 字符,因此在大多数文本传输和存储系统中是安全的。

🤗 总结归纳

慢慢查缺补漏

📎 参考文章

  • 一些引用
  • 引用文章
 
💡
有关Notion安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
上一篇
常见frida hook 方案
下一篇
macos 终端
Loading...