防止Jar包被反编译

方法就是,向Jar注入无效代码(不合法的,或者根本不是代码的字符串)。

 

那么无效的代码又怎么能正确运行呢?

 

答案就是,你要保证你的代码永远不会执行到那一步。

 

我作一个简单的例子说明:

我们建立一个项目:

 

[java] view plain copy
 
 
 
 
  1. package com.TestJar;  
  2.   
  3. public class Main {  
  4.   
  5.     public static void main(String[] args){  
  6.         System.out.println(Info.getMessage());  
  7.     }  
  8. }  

[java] view plain copy
 
 
 
 
  1. package com.TestJar;  
  2.   
  3. public class Info {  
  4.   
  5.     public static String getMessage(){  
  6.         return "Hello World!";  
  7.     }  
  8.       
  9.     private class Invalid{  
  10.           
  11.     }  
  12. }  

 

很简单,运行结果是 Hello World!


然后我们将Info类输出Jar

 

现在项目改成这样:

 

运行结果仍然是 Hello World!

 

我们用jd-gui反编译看看:

 

反编译看得清清楚楚。

 

我们的私有内部类Invalid在程序中是没有用。

 

现在,我们向Invalid类注入无效代码。

注入方法很简单,用WinRar之类的解压软件打开,修改,然后保存就行了

 

打开这个Invalid内部类

 

我们将图中所选择的字符'd'删除

 

然后保存

 

刷新一下,程序仍然运行:Hello World!

 

再用jd-gui打开Info.jar

它反编译到那里就出错了。

 

注意不能将这个方法运行用Android项目上,Android有另一套规则,它需要把Jar转换成dex的。

 

原文:https://blog.csdn.net/u013938484/article/details/80399242

posted @   peachlf  阅读(4272)  评论(1编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
点击右上角即可分享
微信分享提示