Java字符串加密插件StringFog编解码易语言源码加成品
本帖最后由 yuren0 于 2022-12-4 14:57 编辑前言
这几天抓某APP的api_sign时,jadx_gui搜索了一下字符串,发现全部被加密为类似Base64编码了,但经测试,字符串是使用StringFog插件加密后保存的
跟进看了下,是原生StringFog的Base64加XOR,方便调试,就用易还原了一下
作者的github库:https://github.com/MegatronKing/StringFog
截图
https://cdnpic.wuxiu0.cn/uploads/2022/12/Snipaste_2022_12_04_14_40_44.jpghttps://cdnpic.wuxiu0.cn/uploads/2022/12/Snipaste_2022_12_04_14_41_26.jpg
https://cdnpic.wuxiu0.cn/uploads/2022/12/yuanshidaima.jpghttps://cdnpic.wuxiu0.cn/uploads/2022/12/Snipaste_2022_12_04_14_56_11.jpg
关键代码
.版本 2
.子程序 操作字符, 文本型, , 加密和解密都是采用base64加XOR,所以直接一个子程序可以搞定
.参数 待解密字节集, 字节集, , 待操作的字节集数据,不管解码还是加密,都是先转为字节集
.参数 密钥key, 文本型, , 用于加解密时的密钥key值
.参数 解码方式, 逻辑型, , 决定操作方式,为 真 则解码,为 假 则为加密
.局部变量 v3, 整数型
.局部变量 I, 整数型
.局部变量 i2, 整数型
.局部变量 返回字节集, 字节集
.局部变量 len, 整数型
v3 = 1
i2 = 1
len = 取字节集长度 (待解密字节集)
返回字节集 = 取空白字节集 (len)
.计次循环首 (取字节集长度 (待解密字节集), I)
.如果真 (I > 取文本长度 (密钥key))
i2 = I - 取文本长度 (密钥key)
.如果真结束
待解密字节集 = 位异或 (待解密字节集 , 取代码 (取文本中间 (密钥key, i2, 1), ))
返回字节集 = 待解密字节集
v3 = v3 + 1
i2 = i2 + 1
.计次循环尾 ()
.判断开始 (解码方式 = 真)
返回 (字节集_到文本 (返回字节集))
.默认
返回 (编码_BASE64编码 (返回字节集))
使用了精易模块
下载地址
链接:https://yuren0.lanzoue.com/i7BBU0hqrb8f
密码:52pj 易友路过支持一下 使用了精易模块 可以用mt的dex字符串解密 老方便了{:301_978:} 感谢分享,学习了!{:301_975:} 分项一个java 加密的工具类
package com.gisdata.demoepidemic.util;
import org.apache.tomcat.util.codec.binary.Base64;
import sun.misc.BASE64Decoder;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
/**
* @version 1.0.0
* @Description
* @createTime 2022年12月01日 17:55:00
*/
public class EncrypyUtil {
/**
* 加密key 可替换 长度16
*/
private static final String KEY = "abcdefgabcdefg12";
/**
* 加密方式 可替换 具体百度 PKCS7 等加密方式 java这个不需要额外插件
*/
private static final String ALGORITHM = "AES/ECB/PKCS5Padding";
/**
* 先加密成base64
* @Param bytes 字节
* @Return String
*/
public static String base64Encode(byte[] bytes){
return Base64.encodeBase64String(bytes);
}
/**
* 解密base64
* @param base64Code base64
* @return 字节数组
* @throws Exception ex
*/
public static byte[] base64Decode(String base64Code) throws Exception{
return new BASE64Decoder().decodeBuffer(base64Code);
}
/**
* 对字符串的字节数组进行Aes加密
* @param content 加密字符串
* @param encryptKey 加密key
* @returnbyte[]
* @throws Exception ex
*/
public static byte[] aesEncryptToBytes(String content, String encryptKey) throws Exception {
// AES加密
KeyGenerator kgen = KeyGenerator.getInstance("AES");
// 初始长度128
kgen.init(128);
Cipher cipher = Cipher.getInstance(ALGORITHM);
// 密钥加密
cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(encryptKey.getBytes(), "AES"));
return cipher.doFinal(content.getBytes(StandardCharsets.UTF_8));
}
/**
* 对字符串的字节数组进行Aes加密
* @param content 加密字符串
* @param encryptKey 加密key
* @returnbyte[]
* @throws Exception ex
*/
public static String aesEncrypt(String content, String encryptKey) throws Exception {
// 加密后 在base64 转一下
return base64Encode(aesEncryptToBytes(content, encryptKey));
}
/**
* aes的解密
* @param encryptBytes 加密字节
* @param decryptKey key
* @return 字符串
* @throws Exception ex
*/
public static String aesDecryptByBytes(byte[] encryptBytes, String decryptKey) throws Exception {
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128);
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(decryptKey.getBytes(), "AES"));
byte[] decryptBytes = cipher.doFinal(encryptBytes);
return new String(decryptBytes);
}
/**
* 解密
* @param encryptStr 需要解密的对象
* @param decryptKey 解密的key
* @return String
* @throws Exception ex
*/
public static String aesDecrypt(String encryptStr, String decryptKey) throws Exception {
return aesDecryptByBytes(base64Decode(encryptStr), decryptKey);
}
/**
* 对外使用的加密
* @param object 加密对象 需要对象重写ToString()方法
* @return String
* @throws Exception 异常
*/
public static String encode(Object object) throws Exception {
String content = object.toString();
return aesEncrypt(content, KEY);
}
/**
* 对外使用的解密
* @param encrypt 需要解密的字符串
* @return String
* @throws Exception ex
*/
public static String decode(String encrypt) throws Exception {
return aesDecrypt(encrypt, KEY);
}
}
页:
[1]