jar包混淆操作

1.下载混淆工具
2.设置混淆配置
3.开始混淆,得到混淆后的jar包

遇到的问题:
1.提示:Warning: can’t find referenced class xxx
解决:
-dontwarn javax.crypto.**
-keep class javax.crypto.** 其他类似警告也如此处理

2.提示 there were 4 unresolved references to classes or interfaces. You may need to add missing …
解决:
如果jar包没有问题,则 在proe文件中,加一行
-ignorewarnings

原文:https://my.oschina.net/u/3705740/blog/1561030

1.混淆工具版本

本文使用的是ProGuard这一款Java代码混淆工具。 因为在我们实际的开发工作中,有些程序包含了公司核心产品的代码,所以为了保护自身的知识产权,避免程序包不小心外流出去,我们有必要进行一些保护措施,在程序开发完之后,需要将程序代码进行混淆。

本文使用的是ProGuard v5.3.3版本。 下载地址:http://www.jb51.net/softs/242707.html

2.混淆工具安装步骤

2.1下载后的文件是一个压缩包:

输入图片说明

2.2 解压压缩包

输入图片说明

3.混淆工具使用步骤

3.1 解压后,执行 bin目录下的proguardgui.bat

输入图片说明

执行proguardgui.bat后如图:

输入图片说明

注意:执行proguardgui.bat后会出现一个cmd命令框,不要关闭,最小化即可。

3.2 点击左侧菜单栏中的“Input/Output”按钮:

输入图片说明

3.4 点击右侧菜单栏中的“Add input...”按钮,导入需要被混淆的jar包:

输入图片说明

输入图片说明

3.5 点击右侧菜单栏中的“Add Output...”按钮,填写配置我们需要混淆后输出的jar包,输出的jar包需要自己手动填写,jar包名称可以自定义:

输入图片说明

配置好jar包输入输出后,如图:

输入图片说明

3.6 添加支持库,即eclipse里java project里的libraries所有Library的jar包,点击下方“Library jars,aara,wars,wars,zips,apks,and directories”框右侧“Add”按钮:

输入图片说明

添加完毕后,如图所示:

输入图片说明

3.7 设置Shrinking,设置如图所示:

输入图片说明

3.8 设置Obfuscation,设置如图所示:

输入图片说明

3.9 设置Optimization,设置如图所示:

输入图片说明

3.10 设置Information,注意Target的jdk版本,设置如图所示:

输入图片说明

3.11点击“process”,再点击“save configuration”,在弹出的对话框中,输入要保存的配置文件(首先在指定文件夹下创建一个空test.pro文件,选中test.pro),最后点击“保存”:

输入图片说明

3.12 保存完test.pro文件之后,关闭ProGuard,开始手动修改配置文件test.pro,test.pro文件内容在保存时已自动生成内容,我们只需添加自定义的修改即可,内容如下:

-injars angora_test.jar
-outjars angora_test_mix.jar

-libraryjars ‘C:\Program Files\Java\jre1.8.0_131\lib\rt.jar’
-libraryjars ‘D:\proguardlib\JavaEWAH-0.3.2.jar’
-libraryjars ‘D:\proguardlib\RoaringBitmap-0.4.5.jar’
#…略
#以上均为之前载入的支持库jar包,此处略

-dontshrink
-keeppackagenames
-flattenpackagehierarchy ‘’
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,LocalVariable*Table,Annotation,Synthetic,EnclosingMethod
-keepparameternames

#不优化 代码/配置/变量
-optimizations !code/allocation/variable

#忽略警告
-ignorewarnings

#忽略泛型
-keepattributes Signature

#忽略注解
-keepattributes Annotation

#不要警告找不到com.alibaba.fastjson.这个包里面的类的相关引用
-dontwarn com.alibaba.fastjson.

#保持com.alibaba.fastjson.这个包里面的所有类和所有方法而不混淆
-keep class com.alibaba.fastjson.{*;}

-dontwarn com.groovy.util.**
-keep class com.groovy.util.**{*;}

-dontwarn com.apache.common.**
-keep class com.apache.common.**{*;}

-dontwarn com.codehaus.groovy.**
-keep class com.codehaus.groovy.**{*;}

-keep class com.bynear.main.{*;}
-keep class com.bynear.main.dispatcher.{*;}

# Keep names - Native method names. Keep all native class/method names.
-keepclasseswithmembers,includedescriptorclasses,allowshrinking class * {
native <methods>;
}

# Keep names - _class method names. Keep all .class method names. This may be
# useful for libraries that will be obfuscated again with different obfuscators.
-keepclassmembers,allowshrinking class * {
java.lang.Class class &lt; / s p a n &gt; ( &lt; s p a n c l a s s = &quot; h l j s − t i t l e &quot; &gt; j a v a &lt; / s p a n &gt; . &lt; s p a n c l a s s = &quot; h l j s − t i t l e &quot; &gt; l a n g &lt; / s p a n &gt; . &lt; s p a n c l a s s = &quot; h l j s − t i t l e &quot; &gt; S t r i n g &lt; / s p a n &gt; ) ; &lt; / s p a n &gt; j a v a . l a n g . C l a s s &lt; s p a n c l a s s = &quot; h l j s − c l a s s &quot; &gt; &lt; s p a n c l a s s = &quot; h l j s − k e y w o r d &quot; &gt; c l a s s &lt; / s p a n &gt; &lt; s p a n c l a s s = &quot; h l j s − t i t l e &quot; &gt; &lt;/span&gt;(&lt;span class=&quot;hljs-title&quot;&gt;java&lt;/span&gt;.&lt;span class=&quot;hljs-title&quot;&gt;lang&lt;/span&gt;.&lt;span class=&quot;hljs-title&quot;&gt;String&lt;/span&gt;);&lt;/span&gt; java.lang.Class &lt;span class=&quot;hljs-class&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;hljs-title&quot;&gt; </span>(<spanclass="hljstitle">java</span>.<spanclass="hljstitle">lang</span>.<spanclass="hljstitle">String</span>);</span>java.lang.Class<spanclass="hljsclass"><spanclass="hljskeyword">class</span><spanclass="hljstitle">(java.lang.String,boolean);
}

# Remove - System method calls. Remove all invocations of System
# methods without side effects whose return values are not used.
-assumenosideeffects public class java.lang.System {
public static long currentTimeMillis();
static java.lang.Class getCallerClass();
#…略
}

# Remove - Math method calls. Remove all invocations of Math
# methods without side effects whose return values are not used.
-assumenosideeffects public class java.lang.Math {
public static double sin(double);
public static double cos(double);
#…略
}

# Remove - Number method calls. Remove all invocations of Number
# methods without side effects whose return values are not used.
-assumenosideeffects public class java.lang.* extends java.lang.Number {
public static java.lang.String toString(byte);
public static java.lang.Byte valueOf(byte);
#…略
}

# Remove - String method calls. Remove all invocations of String
# methods without side effects whose return values are not used.
-assumenosideeffects public class java.lang.String {
public static java.lang.String copyValueOf(char[]);
public static java.lang.String copyValueOf(char[],int,int);
#…略
}

# Remove - StringBuffer method calls. Remove all invocations of StringBuffer
# methods without side effects whose return values are not used.
-assumenosideeffects public class java.lang.StringBuffer {
public java.lang.String toString();
public char charAt(int);
#…略
}

# Remove - StringBuilder method calls. Remove all invocations of StringBuilder
# methods without side effects whose return values are not used.
-assumenosideeffects public class java.lang.StringBuilder {
public java.lang.String toString();
public char charAt(int);
#…略
}

3.13 自定义配置文件说明:

3.13.1 这里是列表文本解决Proguard的bug:“java.lang.ClassFormatError: LVTT entry for 'clazz' in class file ** does not match any LVT entry”,需要配置以下参数:

#不优化 代码/配置/变量
-optimizations !code/allocation/variable

#忽略警告
-ignorewarnings

#忽略泛型
-keepattributes Signature

#忽略注解
-keepattributes *Annotation*

3.13.2 解决找不到引用的类是第三方包里面的情况,因为这种情况会在混淆过程中报错,导致不能混淆代码,需要配置以下参数:

#不要警告找不到com.alibaba.fastjson.**这个包里面的类的相关引用
-dontwarn com.alibaba.fastjson.**

#保持com.alibaba.fastjson.**这个包里面的所有类和所有方法而不混淆
-keep class com.alibaba.fastjson.**{*;}

3.13.3 为了保证jar包的正常运行,我们不混淆main函数所在的类,需要配置以下参数:

#保持com.bynear.main.**这个包里面的所有类和所有方法而不混淆
-keep class com.bynear.main.**{*;}
#保持com.bynear.main.dispatcher.**这个包里面的所有类和所有方法而不混淆
-keep class com.bynear.main.dispatcher.**{*;}

3.14 重新启动ProGuard,加载配置文件test.pro,点击左菜单“ProGuard”,然后点击“Load configuration”,选择之前配置好的pro文件,打开即可,如图:

输入图片说明

3.15 选择做菜单“Process”,点击下方“View configuration”,查看配置文件内容是否正确,最后点击下方右侧“Porcess!”,程序开始进行混淆,如图:

输入图片说明

3.16 出现“Processing completed successfully”,代表混淆成功!如图:

输入图片说明

本文只是一个简单的ProGuard入手操作的示例,方便大家快速上手使用,其实ProGuard还有许多自定义的内容,大家可以在网上搜索更多关于ProGuard的内容进行了解。

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ProGuard是一种用于保护Java代码的工具,可以对代码进行混淆、优化和压缩,以减少代码的大小并增强代码的安全性。当使用ProGuard混淆Java代码后,生成的jar包并不能直接使用,需要重新进行打包。 在混淆后的代码存储到D:/proguard/target后,需要进行重新打包。可以使用命令行或ProGuard的GUI进行操作。 如果选择使用命令行,可以输入以下命令进行重新打包:java -jar proguard.jar @proguard.pro。其中,proguard.pro是ProGuard的配置文件,可以通过GUI进行配置文件的设置并保存到D:/proguard/config/proguard-for-jar。 重新打包后,生成的jar包就可以直接使用了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [使用Proguard对FAT JAR包进行代码混淆](https://blog.csdn.net/ttyy1112/article/details/90300445)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [ProGuard对java jar包实现混淆加密](https://blog.csdn.net/u010142437/article/details/72819771)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值