java混淆打包(混淆后的java代码能还原吗)

华为云服务器特价优惠火热进行中!

2核2G2兆仅需 38 元;4核4G3兆仅需 79 元。购买时间越长越优惠!更多配置及优惠价格请咨询客服。

合作流程:
1、点击链接注册/关联华为云账号:点击跳转
2、添加客服微信号:cloud7591,确定产品方案、价格方案、服务支持方案等;
3、客服协助购买,并拉微信技术服务群,享受一对一免费技术支持服务;
技术专家在金蝶、华为、腾讯原厂有多年工作经验,并已从事云计算服务8年,可对域名、备案、网站搭建、系统部署、AI人工智能、云资源规划等上云常见问题提供更专业靠谱的服务,对相应产品提供更优惠的报价和方案,欢迎咨询。

今天给各位分享java混淆打包的知识,其中也会对混淆后的java代码能还原吗进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

微信号:cloud7591
如需了解更多,欢迎添加客服微信咨询。
复制微信号

本文目录一览:

如何使用Android Studio打包混淆的Jar

使用AS打包混淆Jar包,百度一下,一片一片的,但是很多都是零零散散的写得不是很详细或是直接拷贝,按照他们的教程测试总不是很顺利,所以这里我就把我个人学习AS打包混淆Jar的成果总结出来,希望对大家有帮助。个人觉得写得还是比较详细的

使用gradle混淆打包Jar

使用AS开发项目,引入第三方库是非常方便的,我们只需要在build.gradle中配置一行代码就可以轻松引入我们需要的开发库。那么gradle可以帮我们混淆打包Jar吗?答案是当然可以!

那么我们如何打包Jar呢?其实我们在编译项目的时候,AS已经帮我们在目录build/intermediates/bundles/release/classes.jar打好了Jar。那么我们需要做的就是把Jar进行混淆的工作了。这里以个人项目bannerDemo 为例,混淆步骤如下:

在你的library的build.gradle文件中加入如下代码:

task makeJar(type: proguard.gradle.ProGuardTask, dependsOn: "build") {

// 未混淆的jar路径

injars 'build/intermediates/bundles/release/classes.jar'

// 混淆后的jar输出路径

outjars 'build/outputs/cocolove2-banner-1.1.0.jar'

// 混淆协议

configuration 'proguard-rules.pro'}

配置混淆协议

1.我们先把AS自带的协议配置进来中文注释,笔者添加

# This is a configuration file for ProGuard.# Starting with version 2.2 of the Android plugin for Gradle, these files are no longer used. Newer# versions are distributed with the plugin and unpacked at build time. Files in this directory are# no longer maintained.#表示混淆时不使用大小写混合类名-dontusemixedcaseclassnames#表示不跳过library中的非public的类-dontskipnonpubliclibraryclasses#打印混淆的详细信息-verbose# Optimization is turned off by default. Dex does not like code run# through the ProGuard optimize and preverify steps (and performs some# of these optimizations on its own).-dontoptimize##表示不进行校验,这个校验作用 在java平台上的-dontpreverify# Note that if you want to enable optimization, you cannot just# include optimization flags in your own project configuration file;# instead you will need to point to the# "proguard-android-optimize.txt" file instead of this one from your# project.properties file.-keepattributes *Annotation*

-keep public class com.google.vending.licensing.ILicensingService-keep public class com.android.vending.licensing.ILicensingService# For native methods, see class * {

native methods;

}# keep setters in Views so that animations can still work.# see public class * extends android.view.View {

void set*(***);

*** get*();

}# We want to keep methods in Activity that could be used in the XML attribute onClick-keepclassmembers class * extends android.app.Activity {

public void *(android.view.View);

}# For enumeration classes, see enum * {

public static **[] values();

public static ** valueOf(java.lang.String);

}

-keepclassmembers class * implements android.os.Parcelable {

public static final android.os.Parcelable$Creator CREATOR;

}

-keepclassmembers class **.R$* {

public static fields;

}# The support library contains references to newer platform versions.# Don't warn about those in case this app is linking against an older# platform version.  We know about them, and they are safe.-dontwarn android.support.**# Understand the @Keep support annotation.-keep class android.support.annotation.Keep-keep @android.support.annotation.Keep class * {*;}-keepclasseswithmembers class * {

@android.support.annotation.Keep methods;

}

-keepclasseswithmembers class * {

@android.support.annotation.Keep fields;

}

-keepclasseswithmembers class * {

@android.support.annotation.Keep init(...);

}

2.AS自带的配置文档还是不够的,我们还需要加入如下配置

这里只展示基本操作,在实际开发中可能需要更多依赖,要根据具体情况引入自己需要的依赖包

#下面代码中的xx是指我个人的配置路径,涉及个人信息,这里以xx代替

#引入依赖包rt.jar(jdk路径)

-libraryjars /xxx/xx/xx/jdk1.8.0_77.jdk/Contents/Home/jre/lib/rt.jar

#引入依赖包android.jar(android SDK路径)

-libraryjars /xx/xx/xx/Android/sdk/platforms/android-24/android.jar

#如果用到Appcompat包,需要引入

-libraryjars /xxx/xxx/xx/xxx/MyApplication/library-banner/build/intermediates/exploded-aar/com.android.support/appcompat-v7/24.1.1/jars/classes.jar

-libraryjars /xx/xx/xx/xx/MyApplication/library-banner/build/intermediates/exploded-aar/com.android.support/support-v4/24.1.1/jars/classes.jar

#忽略警告

-ignorewarnings

#保证是独立的jar,没有任何项目引用,如果不写就会认为我们所有的代码是无用的,从而把所有的代码压缩掉,导出一个空的jar

-dontshrink

#保护泛型

-keepattributes Signature

3.加入自己不想混淆的配置根据实际需求配置

-keep class com.cocolove2.library_banner.view.**{*;}

在命令行执行命令混淆Jar,提示BUILD SUCCESFUL表示成功!

//mac./gradlew makeJar//windowsgradlew makeJar

示例展示

我这里以混淆library-banner 库为例

1.首先我们要看看下我们的buildTool的配置,如下图:

buildTools#Gradle

如果你的项目的buildTool#Gradle配置如上图,那你打包混淆的第一步已经完成了,而如果选择的是本地的gradle,当你执行./gradlew

makeJar时,系统会先下载gradle,不知是网络不好还是被墙掉了,我每次尝试下载都是等了很久,最终也没成功。

2.在项目目录下执行./gradlew makeJar打包输出混淆的Jar,如下图

QQ20160827-0@2x.png

QQ20160827-1@2x.png

3.查看混淆结果.

QQ20160827-2@2x.png

混淆报错解决办法个人遇到的

#log提示缺少依赖Jar,或者路径不对

解决办法:乖乖的引入缺少的依赖jar和修改路径

#提示如下异常[INFO] java.io.IOException: Can't read [D:\Program

Files\Java\jdk1.8.0_91\jre\lib\rt.jar] (Can't process class [com/oracle/net/Sdp$1.class] (Unsupported class version number

[52.0] (maximum 51.0, Java 1.7)))

解决办法:

下载最新proguard(支持Java 8的版本),然后将下载的文件解压。

将andorid sdk/tools/proguard/lib中的jar包,替换为刚下载解压文件中的lib包。

proguard5.2.1下载地址

阅读

求教Java web项目一般怎样做代码混淆或加密

一、java web项目混淆

proguard4.8工具,说是支持war的,可混淆过后少了classes目录了,自然成功不了。网上搜的过程不详说了,最后找着--“J2EE-web工程ProGuard代码混淆07_28”,网址:

根据提示一步步完成。

把web项目打成jar包后用proguard进行混淆,然后把混淆过后的class目录替换发布包war中的对应目录,启动运行是正常的。

主要注意利用proguard生成xxx.pro文件,然后手动加工-keep class WebRoot.WEB-INFO.lib.* 等项目中不需要混淆的包和类。

二、java web项目打成.exe

没找到免费的,这搜到个收费的--Jinstall,试了下功能挺好,

可以加密、集成jdk、tomcat,如果数据库是mysql也集成,其他数据库的话要设置数据库的url.

如何把一个java程序打包成exe文件,运行在没有java虚拟机的机器上?

首先,将编译好的程序打包成jar文件,然后做出exe,这样代码就不可见了;但是exe文件在没有安装jre的电脑上不能运行,如果要求客户再去安装jre 设置环境变量 就不雅了。我们需要将jre打包。

这几步操作网上介绍的插件和方法很多,但有的好用有的不好用,而且有的还需要注册。经过尝试比较,在“千里冰封”的博客上得到了很大的帮助。整理一下。使用这几个工具,您也可以顺利的发布您的java程序!

1 打包成双击可执行的jar文件。

推荐插件:fatJar(Eclipse使用)

下载地址 ;package_id=125924

我用的是Eclipse,它自带的打包方法在打包一些图片等资源时不是很爽。可以使用这个插件。

安装方法解压后将plugins文件夹下的net.sf.fjep.fatjar_0.0.24文件夹拷到eclipse安装目录的plugins 下。

用此工具可以方便的将eclipse中的工程打包成jar文件。如果是要打成可执行的jar请注意选取主类。

你的项目=〉Export..=向导里有fat jar =...

2 将jar文件转换成exe文件。

推荐工具:exe4j

用exe4j把java打包成exe

在我们写程序的时候,有时会有一种需求,那就是希望我们的程序是一个可执行文件,而不是一个 jar文件,其实大部份时候,可执行的jar文件都可以满足要求,但是如果我们的程序是需要保护的,那么打包成jar文件就不太安全了,因为jar文件就是一个解压缩文件,一解压就什么都能看到了,当然也可以选择混淆,但是混淆了以后排错就没那么容易了,因为混淆的时候,把一些类的信息都混淆了。如何既保证代码的安全又容易排错呢?那么打包成exe就是一种很好的办法了,其实我今天介绍这个方法并不是希望大家去打包成exe文件,因为exe文件毕竟不是跨平台的,用了exe的格式就失去了java的初衷了。

exe4j可以打包成各种格式的exe,可以把jar打包进exe,也可以引用一个外部的 jar文件,还可以打包成windows服务的程序,并且可以设置最低jre的版本,还可以设定启动画面,虽然java6.0已经实现了这一点,但是还是没有exe4j生成的启动画面快。

3 将exe文件并jre打包成安装文件,可以在没有安装java虚拟机的电脑上运行

推荐工具:install4j

Install4j介绍

install4j是一个功能强大的,多平台Java安装文件生成工具,用于生成Java应用程序本地化的安装及应用程序发布。 install4j 的优异性在于它易于使用,紧密的集成到目标平台,以及灵活的JRE 管理与部署选项。

创建发布树

install4j的图形用户界面允许你:

* 完全自定义发布树

在发布树的每一个目录中,你能设置整个目录内容或是磁盘上任何目录的单个文件。定义的视图与结果视图让你能完全控制安装程序将发布的文件。

* 处理特定平台的差异

install4j提供方便的“包含/排除”机制,使其适应平台方式来进行发布。

* 针对Unix, Linux 及Mac OS X所定义的文件权限

对发布树的每一个元素,当其安装在类似于Unix这样的平台上时,你能自定义用户访问的权限。

* 定义优良的卸载策略

对发布树的每一个元素,你能决定在卸载时是否删除它。

* 定义覆盖策略

对发布树的每一个元素,你能配置不同的覆盖策略,当安装过程中需要覆盖文件时,这些覆盖策略会指示nstall4j进行相应的操作。

* 定义安装的组件

你能定义文件及目录的分组,形成分离的安装组件,这样你就可提供给用户来选择只安装一定的组件。

其实一个好的应用如果不太好布署,那么别人也只能对它望而兴叹了,现在有了 install4j,很多布署的问题几乎全部解决了.我们可以用exe4j打包java应用,然后用install4j发布java应用,以前java程序布署难的问题,现在几乎都解决了.install4j不但用于打包很合适,并且它还提供了一组很强大很实用的与平台相关的api.这些对于扩展我们的程序也是有很大的帮助的.

eclipse 混淆打包报错,以前好使,突然不好使的。错误见图

eclipse 混淆打包报错,以前好使,突然不好使的

情况1:

Proguard returned with error code 1. See console

Error: C:/Documents (系统找不到指定文件)

后来发现是因为将整个工程放到了桌面上,而桌面的目录是C:/Documents and Settings/Administrator/桌面,在这里面有空格,而proguard进行发编译的时候是不允许有空格的

如果换了正确路径还不好用的话,直接删除proguard就好了

注意:SDK和程序路径最好不要有空格符

情况2:

Proguard returned with error code 1. See console

异常:

java.lang.ArrayIndexOutOfBoundsException

解决办法:将proguard.cfg中的"-dontpreverify"改成“-dontoptimize”

如何打包JAVA游戏文件

第一种:在jbuilder中:

首先你要保证Run菜单--Run Project能顺利运行

然后Wizards菜单--Native Executable Builder

选中Compress the contents of the archive(产生jar文件的话)

Next--Next--选中Always include all classes and resources再Next--Next--Next

选中Windows GUI"exe"(产生EXE文件的话)--Finish

再在项目的文件列表中的Native Executable右击--Make就可以了

第二种:在cmd 下生成jar文件

abc.txt内容如下:

Manifest-Version: 1.0

Main-Class: main-class-name(回车)

在cmd下:

javac *.java

jar cvfm abc.jar abc.txt *.class

示例——生成能通过鼠标双击就执行的.jar文件

一、 编写Java源程序Test.java如下:

// Test.java

import javax.swing.*;

/**

* @(#) Test.java

* Copyleft (c) 2002 RatKing

* @author a href="ratking@ynet.com"RatKing/a

* @version 0.1, 2002-11-7

* 描述:一个测试用的Java Application

*/

public class Test extends JFrame {

public Test(String title) {

super(title);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.getContentPane().add(new JLabel("测试!", JLabel.CENTER), SwingConstants.CENTER);

this.pack();

}

public static void main(String[] args) {

try {

//UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

} catch(Exception e) {

e.printStackTrace();

}

Test t = new Test("Test - 测试");

t.setVisible(true);

}

}

二、编译Test.java为Test.class(当然假设你事先已经设置好了JDK的环境变量PATH和CLASSPATH)

在命令行执行编译命令:

javac Test.java

三、用文本编辑器(比如记事本/UltraEdit等 - 甚至用ECHO命令加管道“”)编写如下manifest文件,并保存为abc.txt

Manifest-Version: 1.0

Main-Class: Test

【注意】文件abc.txt内必须是3行文本:

第一行的内容依次是:“Manifest”、英文减号、“Version”、英文冒号、英文空格、数字“1”、英文句号、数字“0”

第二行的英文冒号与Test之间必须要有一个英文空格!!!

第三行是一个空行,也就是说,你要在Test之后键入一个回车,然后才可以存盘退出!!!

如果冒号后面没有空格,可以生成jar文件但不能执行;如果Test后没有回车符,则生成jar文件时会报错。

四、将Test.class打包成.jar文件,并使用abc.txt指明哪一个是带有public static void main()的“主函数”

在命令行执行编译命令:

jar cvfm Test.jar abc.txt *.class

你可以使用WinZip之类的解压软件看一看刚刚生成的Test.jar文件里到底有什么。

五、用鼠标双击Test.jar的图标,应该可以看到Test执行后的窗口。

〖说明〗如果你正确地安装了Java运行环境(JRE),那么.jar的图标应该是象一页纸并有一个A的形状,就如同写字板的图标。

如果你的.jar文件默认的打开关联不对,可以重新设置:

我的电脑-查看(Win9x)或工具(Win2k)-文件夹选项-文件类型-选择JAR文件-编辑该类型文件的属性-操作栏填入[ open ](不填引号和中括号[]),并在“执行操作的应用程序”栏填入[ "C:\Program Files\Java\j2re1.4.1\bin\javaw.exe" -jar "%1" %* ](填两对英文引号,不填[])

并按“确定”、“关闭”退出对.jar文件关联的编辑。

(你的javaw.exe文件是不是位于C:\Program Files\Java\j2re1.4.1\bin\路径下,视你自己电脑的情况而定) 另外,可以下一个第三方软件

eclipse混淆打包发生错误

这是因为你混淆的代码没有一个入口,也就是说,这个程序或者jar包被全部混淆了,外部没有任何一个地方可以正常调用到它,换句话说就是“你混淆出来的东西没法用”。假如你混淆的是apk,参考

假如你混淆的是jar包:

依赖其它的库使用类似下述语句

-libraryjars D:/developApp/androidsource/xxx.jar

混淆的java代码里有标签,加上

-keepattributes *Annotation*

最后就是把对外接口给keep住

java混淆打包的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于混淆后的java代码能还原吗、java混淆打包的信息别忘了在本站进行查找喔。

发布于 2023-04-08 15:04:57
收藏
分享
海报
28
目录

    忘记密码?

    图形验证码

    复制成功
    微信号: cloud7591
    如需了解更多,欢迎添加客服微信咨询。
    我知道了