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>--> <!-- <!– 指定脚本路径 –>--> <!-- <executable>>start "JNIC Runner" cmd /k "${basedir}/lib/run.cmd"</executable>--> <!-- <!– 设置工作目录(可选) –>--> <!-- <workingDirectory>${basedir}/lib</workingDirectory>--> <!-- </configuration>--> </execution> </executions> </plugin> </plugins> </build> </profile> </profiles>
xml2.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>
xml2.8KB© 壹影
3.完成如上的配置后 您可还可以在run文件夹的config.xml中配置相关的加密参数
具体参数说明如下
如果你还是看不懂 可以参考官网的文档
文档:点我跳转
做好如上配置之后直接在maven里面打包即可
打包完成后会自动执行cmd命令 弹出如下命令框
当我们看到Writing to file xxxxxxxx的时候 就说明已经有输出内容了 我们看 run目录下会多一个名字后面为_output.jar的文件 这个文件就是加密后的jar了
此时我们可以用反编译工具打开这个output.jar的文件 看看加密的效果
可以看到加密成功了!!!
特别注意!!!上述方法配置的构建行为里面 会将jar的代码和依赖分开打包,在target目录下bin目录下是生成的jar包、lib目录下是所有的依赖包,最后如果要使用的话 务必不要忘记还有依赖包在外面
感谢您能看到这里~ 希望本篇文章对您的开发有所帮助~
by gityyge
发表评论