Java SDK标签和Allatori混淆工具共同使用

使用场景

Allatori是一款强大的Java代码混淆工具,属于第二代混淆器,它具有名称混淆、代码控制流混淆和字符串加密等功能,它可以将类名、方法名和变量名替换为无意义的字符串,增加代码的可读性难度。

Virbox Protector工具是一种强大的代码保护工具,它具有代码虚拟化、字符串加密、调试器检测等功能,可以防止反编译工具直接还原出原始代码。

Virbox Protector工具的Java VME保护方式无法保护类名和方法名,而Allatori工具具有混淆类名和方法名的功能,所以可以将两者工具直接结合使用,既可以保证代码安全也可以混淆类名;

因此本文描述下Java vme方式使用sdk标签和Allatori混淆工具共同使用的操作流程。

使用流程

步骤描述

1.先对java代码添加虚拟化标签;

2.编译成jar包后,使用Allatori混淆工具(比如Allatori-8.5-Demo)对jar包进行混淆;

3.加壳工具解析混淆后的jar包,界面可以显示标记的标签;

4.对该jar包加壳保护,程序可正常运行;

步骤操作

添加虚拟化标签

1.创建一个VBVirtualize.java,调用Allatori-8.5-Demo\lib\allatori-annotations.jar包中DoNotRename类,

该jar包中有个DoNotRename的类,对指定类或方法标记后不会混淆名称,内容如下:

2.在java代码中调用VBVirtualize.java里的内容,比如:

import virbox.VBVirtualize;

@VBVirtualize //可添加到类上面,所有的方法都会默认保护
public class Main {
    public static void main(String[] args) {
        System.out.println("hello");
        test_vir();
    }
    @VBVirtualize //可添加到方法上面,只保护该方法
    public static void test_vir()
    {
        System.out.println("test_vir");
    }
}

3.在所需要的java文件中的类或方法上面添加完虚拟化标签,然后打包成jar包;

4.将该jar包拖入到加壳工具中进行解析,界面上可显示标记的函数。

Allatori工具对jar包进行混淆

1.将添加标签后的jar包(比如Main.jar)放到Allatori-8.5-Demo\tutorial\step01\files目录下;

2.修改congfig.xml文件里的输入文件名称和输出文件名称;

3.在config.xml里keep-names节点中添加包名,让包名不被混淆;

<config>
    <input>
        <jar in="Main.jar" out="obf-Main.jar"/>
        <jar in="mousegestures-1.2.jar" out="obf-mousegestures-1.2.jar"/>
    </input>

<keep-names>
    <class template="class com.aladdin.hasp.test.Test"/>
</keep-names>
<property name="log-file" value="log.xml"/>

</config>

4.执行RunAllatori.bat脚本,生成混淆后的jar包(比如obf-Main.jar);

加壳工具解析混淆后的jar包

1.将混淆后的jar包拖入到加壳工具中解析,则可以看到标记的函数,而且显示的类和方法名都是混淆过的;

保护jar包

1.选中jar包,使用默认显示的标签,点击选中保护项目,默认在protector目录下生成保护后jar包;

2.保护后的jar包可正常运行。

问题现象

问题1:为什么要调用Allatori-8.5-Demo\lib\allatori-annotations.jar包中DoNotRename类?比如以下写法会出现什么现象?

解答1:如果不调用DoNotRename类,则Allatori工具把Virbox和VBVirtualize也给混淆了,导致加壳工具界面无法解析出来,如图所示:

问题2:为什么在config.xml里keep-names节点中添加包名,让包名不被混淆?

解答2:如果包名也混淆,则程序运行会提示错误: 找不到或无法加载主类

问题3:可以对未标记的函数进行选择保护么?

解答3:目前不能对未标记的函数进行虚拟化保护,如果选择未标记的函数进行虚拟化保护,则保护后程序会运行失败,错误如下:

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x0000000067b0a233, pid=29168, tid=0x0000000000006600
#
# JRE version: Java(TM) SE Runtime Environment (8.0_301-b09) (build 1.8.0_301-b09)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.301-b09 mixed mode windows-amd64 compressed oops)
# Problematic frame:
# V  [jvm.dll+0x14a233]
#
# Failed to write core dump. Minidumps are not enabled by default on client versions of Windows
#
# An error report file with more information is saved as:
# D:\download\Allatori-8.5-Demo\tutorial\step01\files\hs_err_pid29168.log
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.java.com/bugreport/crash.jsp
#
滚动至顶部
售前客服
周末值班
电话

电话

13910187371