壹影博客.
我在下午4点钟开始想你
Java混淆-Native化-利用JINC将你的Java代码本地化
  • 2025-3-22日
  • 0评论
  • 47围观

Java混淆-Native化-利用JINC将你的Java代码本地化

什么是Java代码本地化?

是指通过某些技术将编译后的Java方法(包括经过混淆处理的代码)转换为C语言程序。生成的C文件经编译后,通过Java本地接口(JNI)重新链接回原Java程序。该过程完成后,原始.class文件中将彻底清除被转换方法的执行痕迹,实现代码层面的无痕替换。

特点:
1、通过C语言中间层进行代码转换
2、最终二进制文件通过JNI集成
3、彻底移除原始.class文件中的目标方法 (适用于需要加强代码保护、防止逆向工程的场景)

看看混淆的最终效果吧!

JNIC

官网:点我跳转

介绍:JNIC能够将已编译的Java方法(包括经过混淆处理的代码)转换为C语言程序。生成的C文件经编译后,通过Java本地接口(JNI)将生成的二进制文件重新链接回原始Java程序。该过程完成后,原始.class文件中将彻底清除被转换方法的执行痕迹,实现代码层面的无痕替换。

(技术路径:Java字节码 → C代码 → 本地二进制 → JNI集成 → 字节码痕迹擦除)

【!!!多维度逆向防护!!!】

完全抵御Java反编译工具(如JD-GUI、FernFlower)
免疫字节码修改工具(如Bytecode Viewer)
突破传统混淆器限制,防御反混淆攻击

【!!!混合加固体系!!!】

可与ProGuard、Allatori等混淆器叠加使用
双重保护机制产生高度复杂的本地机器码
原生代码层防护与传统Java层混淆形成纵深防御

【!!!深度代码改造技术!!!】

字符串加密:保护硬编码敏感信息
引用混淆:破坏API/方法调用链可读性
控制流扁平化:制造非结构化执行路径
本地指令级混淆:基于处理器架构的混淆方案

(形成从字节码到机器码的全链路保护,适用于金融、DRM等安全敏感领域)

下载

本文小编自己动手封装了JNIC,让其能够更好的整合SpringBoot项目,需要的老铁可以直接回复获取

百度云:点我跳转(194.04M)

提取码:

此处内容已隐藏,评论后刷新即可查看!

使用教程

试用前注意事项

!!!JDK必须是11
!!!必须是Maven项目(因为我目前只封装了SpringBoot的web包)

将下载的JNIC的包解压到自己的SpringBoot中如下图所示
 

其中config目录为参考的pom文件配置 可以直接复制粘贴到自己项目的pom文件中主要复制的内容有如下

1.pom文件的 profiles部分

壹影博客
<!-- 打包完毕后执行cmd命令 -->
<profiles>
<profile>
<id>post-package-script</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>3.5.0</version>
<executions>
<execution>
<id>run-script</id>
<phase>package</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<executable>cmd</executable>
<!-- 启动新窗口并执行脚本 -->
<arguments>
<argument>/c</argument>
<argument>start "JNIC Runner" cmd /k "${basedir}/run/run.cmd"</argument>
</arguments>
<workingDirectory>${basedir}/run</workingDirectory>
</configuration>
<!-- <configuration>-->
<!-- &lt;!&ndash; 指定脚本路径 &ndash;&gt;-->
<!-- <executable>>start "JNIC Runner" cmd /k "${basedir}/lib/run.cmd"</executable>-->
<!-- &lt;!&ndash; 设置工作目录(可选) &ndash;&gt;-->
<!-- <workingDirectory>${basedir}/lib</workingDirectory>-->
<!-- </configuration>-->
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
xml
2.1KB

2.pom文件的几个plugin 如下

壹影博客
<!-- 1. 主Jar打包 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<outputDirectory>${project.build.directory}/bin</outputDirectory>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>../lib/</classpathPrefix>
<mainClass>com.yyge.bootstart.Application</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<!-- 2. 复制依赖到lib目录 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<!-- 3. 可选:禁用SpringBoot默认打包 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<!-- 4. 复制文件到指定目录下 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<id>copy-jar</id>
<phase>package</phase>
<goals><goal>run</goal></goals>
<configuration>
<target>
<!-- 复制 JAR 到 D:/target-jars -->
<copy
file="${project.build.directory}/bin/${project.artifactId}-${project.version}.jar"
tofile="${basedir}/run/${project.artifactId}-${project.version}.jar"
overwrite="true"
/>
</target>
</configuration>
</execution>
</executions>
</plugin>
xml
2.8KB

3.完成如上的配置后 您可还可以在run文件夹的config.xml中配置相关的加密参数

具体参数说明如下

如果你还是看不懂 可以参考官网的文档

文档:点我跳转

做好如上配置之后直接在maven里面打包即可

打包完成后会自动执行cmd命令 弹出如下命令框

当我们看到Writing to file xxxxxxxx的时候 就说明已经有输出内容了 我们看 run目录下会多一个名字后面为_output.jar的文件 这个文件就是加密后的jar了

此时我们可以用反编译工具打开这个output.jar的文件 看看加密的效果

可以看到加密成功了!!!

特别注意!!!上述方法配置的构建行为里面 会将jar的代码和依赖分开打包,在target目录下bin目录下是生成的jar包、lib目录下是所有的依赖包,最后如果要使用的话 务必不要忘记还有依赖包在外面

感谢您能看到这里~ 希望本篇文章对您的开发有所帮助~

by gityyge

发表评论

渝ICP备19011465号 | 渝ICP备19011465号-1