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

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>

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>

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