吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1788|回复: 5
收起左侧

[易语言 原创] Java字符串加密插件StringFog编解码易语言源码加成品

[复制链接]
yuren0 发表于 2022-12-4 14:55
本帖最后由 yuren0 于 2022-12-4 14:57 编辑

前言
这几天抓某APP的api_sign时,jadx_gui搜索了一下字符串,发现全部被加密为类似Base64编码了,但经测试,字符串是使用StringFog插件加密后保存的
跟进看了下,是原生StringFog的Base64加XOR,方便调试,就用易还原了一下
作者的github库:https://github.com/MegatronKing/StringFog
截图


关键代码

.版本 2

.子程序 操作字符, 文本型, , 加密和解密都是采用base64加XOR,所以直接一个子程序可以搞定
.参数 待解密字节集, 字节集, , 待操作的字节集数据,不管解码还是加密,都是先转为字节集
.参数 密钥key, 文本型, , 用于加解密时的密钥key值
.参数 解码方式, 逻辑型, , 决定操作方式,为 真 则解码,为 假 则为加密
.局部变量 v3, 整数型
.局部变量 I, 整数型
.局部变量 i2, 整数型
.局部变量 返回字节集, 字节集
.局部变量 len, 整数型

v3 = 1
i2 = 1
len = 取字节集长度 (待解密字节集)
返回字节集 = 取空白字节集 (len)
.计次循环首 (取字节集长度 (待解密字节集), I)
.如果真 (I > 取文本长度 (密钥key))
i2 = I - 取文本长度 (密钥key)
.如果真结束
待解密字节集 [v3] = 位异或 (待解密字节集 [v3], 取代码 (取文本中间 (密钥key, i2, 1), ))
返回字节集 [I] = 待解密字节集 [v3]
v3 = v3 + 1
i2 = i2 + 1
.计次循环尾 ()
.判断开始 (解码方式 = 真)
返回 (字节集_到文本 (返回字节集))
.默认
返回 (编码_BASE64编码 (返回字节集))


使用了精易模块
下载地址
链接:https://yuren0.lanzoue.com/i7BBU0hqrb8f
密码:52pj

免费评分

参与人数 1吾爱币 +7 热心值 +1 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

小众资源 发表于 2022-12-4 15:52
易友路过支持一下
runfog 发表于 2022-12-4 15:58
Tonyha7 发表于 2022-12-4 18:10
lfordch 发表于 2022-12-4 21:04
感谢分享,学习了!
myxiaowang 发表于 2022-12-5 09:40
分项一个java 加密的工具类

[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;

/**
 * [url=home.php?mod=space&uid=1248337]@version[/url] 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
     * [url=home.php?mod=space&uid=952169]@Param[/url] bytes 字节
     * [url=home.php?mod=space&uid=155549]@Return[/url] 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
     * @return  byte[]
     * @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
     * @return  byte[]
     * @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);
    }

}
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-27 01:35

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表