首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Java 代码混淆快速上手

Java 代码混淆快速上手

原创
作者头像
花花Binki
发布2024-11-15 23:42:55
发布2024-11-15 23:42:55
6380
举报
文章被收录于专栏:岚的工作随笔岚的工作随笔

引言

如果用 zip 方式打开一个 Jar 包,将会看到一堆配置文件以及class文件。使用一些解码软件可以粗略的逆向出原代码。如果这个jar包的作者再里面加入了一些无用、冗余的指令等代码,逆向出来也完全看不懂。这种方式就是本篇的主题,代码混淆(Obfuscation)

混淆的核心概念

在正式开始实战前,先对代码混淆的核心概念有一些认知。

场景

为什么需要代码混淆呢?经常开发的代码,第三方依赖大多用的是一定协议的开源代码库。有开源就有闭源,闭源通常以在线API,云主机环境预装等手段实现。

还有一种就是提供闭源的Jar包来保护知识产权。

原理

Java 是编译成Class字节码再被JVM所运行的,所以编译和运行阶段都是可以混淆的关键阶段。

字节码工具: ASM、Javassist、Byte Buddy。

最常见的就是字符串加密,对应用程序中的敏感字符串进行加密处理,使得反编译后的代码无法直接获取原始字符串。

为了加大逆向难度,还可以通过插入无用指令、改变指令执行顺序等方式,打乱代码的执行流程等操作。

使用 ProGuard 混淆

一款老牌的开源代码混淆器,截止目前,github上最新版为:v7.6,支持JDK 23。

下载与打开

Github
Github

任意版本都可以,内部自带快捷使用、演示包。

代码语言:txt
复制
├─bin // 脚本
├─docs // 文档
├─examples 工程案例
└─lib // 使用的jar包
        proguard-ant.jar
        proguard.jar
        proguardgui.jar
        retrace.jar

如果电脑配置了 Java 环境,可以直接双击lib/proguardgui.jar来启动,这是一个友好的 Java 构建的桌面版。

启动失败请检查环境或者尝试用java -jar 的命令来打开。

使用说明

首页就是广告,从第一个input / output上手,设置要输入等待混淆的jar包,以及设置输出路径。下图就是我的设置完的效果。

然后点击右下角的 Next,进入下一步。如果没有特殊需求可以一直点击Next,直到出现process,开始正式混淆。下面介绍几个经常用的点。

不出意外的意外

看着飞速划过的并且不懂的英文,以为生效了,最后突然抛出一个找不到依赖。

在input/output中,下面的一览就是这个错误的关键。可是Maven工程Jar包都在本地repo库,该怎样输出到一个路径下,方便添加呢?

Maven 早想到了这一点,你可以在pom文件的build标签下添加如下

代码语言:xml
复制
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-dependency-plugin</artifactId>
                <executions>
					<execution>
					<id>copy</id>
					<phase>package</phase>
					<goals>
						<goal>copy-dependencies</goal>
					</goals>
					<configuration>
						<outputDirectory>${project.build.directory}/lib</outputDirectory>
					</configuration>
					</execution>
				</executions>
            </plugin>
        </plugins>
    </build>

再次输出,就会保存到target/lib中。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引言
  • 混淆的核心概念
    • 场景
    • 原理
  • 使用 ProGuard 混淆
    • 下载与打开
    • 使用说明
    • 不出意外的意外
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档