如何在IntelliJ IDEA上使用Proguard?

6

我正在使用Intellij IDEA开发Java桌面应用程序,并希望使用ProGuard混淆我的源代码。如何在Intellij IDEA 2016.1.14中集成/使用ProGuard?


4
添加Maven或Gradle插件即可使用。实际上,Proguard的唯一优点是可以使代码包变小 - 删除未使用的内容。忘记混淆给你带来的任何优势 - 任何半个能力的开发者都可以反编译和分析混淆的Java代码。我建议看看Graal AOT映像以获取更好的大小/启动性能,不要再考虑混淆了。 - Boris the Spider
2
@Yonatan 我建议你在没有成功的情况下继续搜索。我已经反编译了JAR文件,并且我的分析是,一个人必须足够擅长才能自己编写代码才能从反编译中获得任何用处。这本身就是为什么没有人会反编译代码,因为他们实际上无法利用代码中的任何内容。实现混淆很困难,但反向工程要难十倍。我挑战所有阅读此消息的人来证明我错了。在这里放下你的链接。 - Hypersoft Systems
2个回答

4

1. 添加Intellijguar2插件

enter image description here

2. 在 "项目结构 -> 模块 -> 混淆" 中按提示下载 yguard。它会带您到一个html页面,在页面的右侧放置了yguard。解压并获取jar文件。浏览至该jar文件,设置其路径。取消勾选 pedantic error-checking (可选),定义项目的MainClass。确定。

3. 构建 -> 构建项目 -> 构建artifacts并获取普通可执行jar。 (如果您在运行菜单中看不到启用artifacts,请转至文件-> 项目结构 -> artfact,并通过+新项创建与主类依赖关系)

4. 构建 -> 混淆***模块

enter image description here

5. 添加包含项目* .class 文件的YourProject/out/production/YourProject/firstfolder_of_packagename(我的是'uz',例如)。

6. 删除模块编译输出,为要混淆的jar分配路径并按“构建”按钮。

7. 使用zip程序打开混淆后的jar文件。确保JD-GUI应用程序已对所有类文件进行了混淆。

8. 切掉META-INF文件夹,并从未混淆的可执行jar中手动添加META-INF和像libs或assets这样的文件夹(或在之前设置的artifacts中找到它们)。 依次您将获得一个混淆的可执行jar。 例如,对于json库,最终我在zip编辑器中得到了以下结果视图: enter image description here


我尽可能地按照你的步骤操作了,但是现在卡住了。混淆选项(在“构建”下)被禁用了。 - pulancheck1988
@pulancheck1988,你的意思是它没有被混淆还是你无法确定它是否被混淆了? - CodeToLife

2

我没有尝试过这个方法(我喜欢先找到简单的方法),但是如果你按照步骤操作,应该可以实现。我会尝试并报告结果。

  1. 进入这个链接并学习如何为IntelliJ IDEA创建Ant构建文件

  2. 在这里下载yGuard

  3. 解压yGuard存档并导航到doc目录。

  4. 有一个html“how to”文件。阅读并理解后,即可准备发布缩小的代码。

  5. 可选:在网上搜索yGuard技巧和诀窍,以获得最大的构建效益。

--- 工作笔记 ---

[1.0] 在IntelliJ 2017中,有一个选项可以在构建菜单上生成Ant构建文件。 Build->Generate Ant Build File 对于我来说,适用的设置是单个构建文件,勾选所有其他选项,并使用提供的项目名称。

[1.1] View->Tool Windows->Ant Build 这应该会让你得到需要的知识,来自于步骤5和步骤1 的链接和答案中的步骤4

这是我的工作yGuard任务:

<target depends="artifact.project" name="yguard">
<taskdef name="yguard"
         classname="com.yworks.yguard.YGuardTask"
         classpath="yguard.jar"/>
<yguard>

  <inoutpair in="${temp.jar.path.project.jar}"
             out="${artifact.output.project}/project-release.jar"/>

    <shrink
            logfile="shrinklog.xml">
        <keep>
            <class classes="protected"
                   methods="protected"
                   fields="protected"/>
        </keep>
    </shrink>

</yguard>

然后你需要将你的 "all" 修改为以下内容:
  <target name="all" depends="build.modules, build.all.artifacts, yguard"
          description="build all">
      <!-- Delete temporary files -->
      <delete dir="${artifacts.temp.dir}"/>

  </target>

你需要从build.all.artifacts目标中删除delete temporary files操作,这样当你到达all目标时,文件仍然可用。

就像在yGuard的html文档底部所说的那样,IntelliJ会抱怨你的yGuard语法,但yGuard仍然可以工作。

如果有人能整理一下这个内容,那就随便来吧。对我来说它很有效,但你可能会有不同的情况。此外,在添加了你的“小型”ant构建后,你将能够创建一个非常小的ant构建xml,并使用Project Structure->Artifacts->Post Processing。在WORKING-NOTES: [1.1] "5th step"中指出,这需要一些手动修改。


这绝对有效。语法确实很奇怪,但一旦你掌握了它,它绝对是非常出色的。我建议你使用后处理方法,在项目标签之间包含除yguard之外的任何内容的构建文件。默认生成器与标准IntelliJ项目不兼容。生成器甚至没有包括我的清单。此外,您可以在构建文件中使用原始字符串而不是变量,或者您可以从后处理对话框中设置变量。如果您正在使用大量反射,则需要处理选择性定位问题;干杯。 - Hypersoft Systems
标准的ProGuard点击即用配置与这个宝贝相比,简直是小巫见大巫!你需要这个插件来帮助你调试你的设置:Archive Browser。该插件可以让你浏览JAR文件,以便你可以看到其他人反编译时看到的内容;然后你可以回到你的构建文件,删除所有不使用反射的过于描述性的内容。 - Hypersoft Systems
@M2E67 很不幸。但是我按照这些步骤一丝不苟地得到了一个可工作的系统。文中提到的任何内容都不是可选项。你也必须理解你正在使用的构建工具。结果因人而异。 - Hypersoft Systems
如果你不知道如何管理项目构建过程,可以从一个空项目开始,这样在学习工具包/IDE构建系统时就不必与任何生产代码混淆。开始破坏和检查它们,如果你想的话,你会成功的。 - Hypersoft Systems
你可能已经删除了你的文件,或者你没有使用IDE:Project Structure->Artifacts->Post Processing。对于@M2E67来说,最好的猜测是你可以练习使用ant构建目标来测试你的配置是否正常。顺便说一下,ant有它自己的构建窗口... - Hypersoft Systems
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接