|
@@ -166,7 +166,15 @@
|
|
|
</td>
|
|
</td>
|
|
|
<td>includePrefix=com?cca=true&cma=true&cfa=true&caPrefix=com.xx.anno.MyAnnotation|com.bb.anno.MyAnnotation</td>
|
|
<td>includePrefix=com?cca=true&cma=true&cfa=true&caPrefix=com.xx.anno.MyAnnotation|com.bb.anno.MyAnnotation</td>
|
|
|
</tr>
|
|
</tr>
|
|
|
- <tr align="center">
|
|
|
|
|
|
|
+<tr align="center">
|
|
|
|
|
+ <td>keepArgName(依托于includePrefix)</td>
|
|
|
|
|
+ <td>否</td>
|
|
|
|
|
+ <td>作为includePrefix的附加设置,设置清空方法时,是否保留原始参数名,默认为true(写法同url后面设置参数)
|
|
|
|
|
+ <br/> 注:keepArgName设置为false时,加密后方法的原始参数名信息将被擦除(不保证一定成功),反编译后查看到的将是形如var0, var1...之类的参数名(不同反编译工具的默认参数名可能不一样)
|
|
|
|
|
+ </td>
|
|
|
|
|
+ <td>includePrefix=com?keepArgName=false</td>
|
|
|
|
|
+ </tr>
|
|
|
|
|
+ <tr align="center">
|
|
|
<td>excludePrefix</td>
|
|
<td>excludePrefix</td>
|
|
|
<td>否</td>
|
|
<td>否</td>
|
|
|
<td>通过前缀匹配的形式排除class,不对其加密
|
|
<td>通过前缀匹配的形式排除class,不对其加密
|
|
@@ -312,6 +320,7 @@ linux示例:tips='请不要直接使用混淆后的jar/war'</td>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+
|
|
|
## 解密(启动)
|
|
## 解密(启动)
|
|
|
|
|
|
|
|
> `class-winter`支持`JVM`参数校验,通过在JVM参数中加入`-XX:+DisableAttachMechanism`来防止其他工具连接到你的Java程序。这样可以阻止运行至dump class。
|
|
> `class-winter`支持`JVM`参数校验,通过在JVM参数中加入`-XX:+DisableAttachMechanism`来防止其他工具连接到你的Java程序。这样可以阻止运行至dump class。
|
|
@@ -672,6 +681,16 @@ linux示例:tips='请不要直接使用混淆后的jar/war'</td>
|
|
|
- 如果你是jar包(all-in-one),那么无需指定此参数
|
|
- 如果你是jar包(all-in-one),那么无需指定此参数
|
|
|
- 如果你是jar包(lib外置),那么直接指定对应需要解密的lib文件即可
|
|
- 如果你是jar包(lib外置),那么直接指定对应需要解密的lib文件即可
|
|
|
- 如果你没有任何头绪,那么你可以先不指定decryptProjectPathPrefix,直接debug启动项目,当因解密失败启动报错时,会debug输出形如**Exist projectPath -> xxx**的信息,该`xxx`即为当前解密失败的文件路径,你可以根据这个路径去反推你的decryptProjectPathPrefix值,然后配置该decryptProjectPathPrefix值再启动即可
|
|
- 如果你没有任何头绪,那么你可以先不指定decryptProjectPathPrefix,直接debug启动项目,当因解密失败启动报错时,会debug输出形如**Exist projectPath -> xxx**的信息,该`xxx`即为当前解密失败的文件路径,你可以根据这个路径去反推你的decryptProjectPathPrefix值,然后配置该decryptProjectPathPrefix值再启动即可
|
|
|
|
|
+
|
|
|
|
|
+- **10. 不解密,直接调用加密包中类的方法时,部分类会有报错形如`java.lang.ClassFormatError: Illegal local variable table start_pc 33 in method 'int xxx.yyy.zzz.IOUtil.copy(java.lang.String)'`?**
|
|
|
|
|
+
|
|
|
|
|
+ - 代码表象:class-winter使用javassist在保留方法原始参数名的情况下加密方法(清空方法体)时,处理不足
|
|
|
|
|
+ - 原因猜测1:javassist加密后字节码的本地变量表、字面量和jvm优化后的本地变量表、字面量存在差异,进而导致此问题
|
|
|
|
|
+ - 原因猜测2:class-winter中的保留原始参数名清空方法体`JavassistUtil#clearMethodBodyKeepOriginArgName`方法存在问题(P.S.本人水平有限,没有从这个方法中找到问题)
|
|
|
|
|
+
|
|
|
|
|
+ - 解决方案1:设置加密参数`keepArgName=false`,加密清空方法体时不保留方法原参数名(即:不保留方法原参数名)
|
|
|
|
|
+ - 解决方案2:根据报错信息,找到对应的方法;1. 检查该方法,去掉多余的局部变量; 2.将该方法中的复杂写法改为简单写法
|
|
|
|
|
+ - 解决方案3:根据报错信息,找到对应的方法;将该方法单独提取到其它类中,这样虽然该方法会报错,但是调用原类中的其它方法就不会报错了
|
|
|
|
|
|
|
|
## QQ群
|
|
## QQ群
|
|
|
|
|
|