一步一步学习Allatori解密 (三)如何找到加密字符串解密

博客介绍在Java里查找并解密被加密字符串的方法。通过打开混淆类的字节码,利用asm获取特定静态方法,结合判断程序找到加密字符串,执行解密方法得到原始字符串。还测试了修改代码增加字符后的解密情况,后续将讲解如何把解密字符串放回原始位置。

接着之前的,我们今天学习如何找到被加密的字符串,打开混淆的类的字节码,我们发现被加密的字符串是这样的,LDC是加密的字符串,之后INVOKESTATIC是执行解密的方法调用
在这里插入图片描述

我们可以用asm获取到方法描述为(Ljava/lang/String;)Ljava/lang/String;的静态方法,然后结合之前判断是否是加密方法的程序就可以找到这个被加密的字符串,然后我们执行解密方法就可以获取到原始字符串了。
我们编写如下代码,获取加密的字符串。
在这里插入图片描述

执行一下,我们找到了加密的字符串,调用解密方法获得了原始字符串
在这里插入图片描述

我们把原始代码修改一下,多加几个字符试试
在这里插入图片描述
混淆之后
在这里插入图片描述

加密字符串增加了,我们再次运行解密程序
在这里插入图片描述在这里插入图片描述

可以看到解密多个字符串没问题了,但是问题又来了,这么多字符串解密完,我怎么知道这是解密什么地方的字符串?下次我们讲如何把解密之后的字符串放到原始位置。

完整代码如下:

package org.example;

import org.apache.commons.io.IOUtils;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.Opcodes;
import org.objectweb.asm.tree.*;
import org.objectweb.asm.tree.analysis.*;

import java.io.File;
import java.io.IOException;
import java.lang.reflect.Method;
import java.util.Enumeration;
import java.util.ListIterator;
import java.util.jar.JarFile;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

import static org.objectweb.asm.Opcodes.*;

public class FindStringEncryption {
   
   
    public static void main(String[] args) {
   
   
        File jar = new File("D:\\work\\allatoriDecrypt\\obfuscator\\allatoriDecrypt.jar");
        JarFile inputJar = null;
        try {
   
   
            inputJar = new JarFile(jar);
        } catch (IOException e) {
   
   
            throw new RuntimeException(e);
        }
        JarFile finalInputJar = inputJar;
        inputJar.stream().forEach(entry -> {
   
   
            if (entry.isDirectory() || !entry.getName().endsWith(".class")) {
   
   
                return;
            }
            byte[] src = null;
            try {
   
   
                src = IOUtils.toByteArray(finalInputJar.getInputStream(entry));
            } catch (IO
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值