教大家防止Jar包被反编译
2016-03-09 11:07
148 查看
方法就是,向Jar注入无效代码(不合法的,或者根本不是代码的字符串)。
那么无效的代码又怎么能正确运行呢?
答案就是,你要保证你的代码永远不会执行到那一步。
我作一个简单的例子说明:
我们建立一个项目:
很简单,运行结果是 Hello World!
然后我们将Info类输出Jar
现在项目改成这样:
运行结果仍然是 Hello World!
我们用jd-gui反编译看看:
反编译看得清清楚楚。
我们的私有内部类Invalid在程序中是没有用。
现在,我们向Invalid类注入无效代码。
注入方法很简单,用WinRar之类的解压软件打开,修改,然后保存就行了
打开这个Invalid内部类
我们将图中所选择的字符'd'删除
然后保存
刷新一下,程序仍然运行:Hello World!
再用jd-gui打开Info.jar
它反编译到那里就出错了。
注意不能将这个方法运行用Android项目上,Android有另一套规则,它需要把Jar转换成dex的。
那么无效的代码又怎么能正确运行呢?
答案就是,你要保证你的代码永远不会执行到那一步。
我作一个简单的例子说明:
我们建立一个项目:
package com.TestJar; public class Main { public static void main(String[] args){ System.out.println(Info.getMessage()); } }
package com.TestJar; public class Info { public static String getMessage(){ return "Hello World!"; } private class Invalid{ } }
很简单,运行结果是 Hello World!
然后我们将Info类输出Jar
现在项目改成这样:
运行结果仍然是 Hello World!
我们用jd-gui反编译看看:
反编译看得清清楚楚。
我们的私有内部类Invalid在程序中是没有用。
现在,我们向Invalid类注入无效代码。
注入方法很简单,用WinRar之类的解压软件打开,修改,然后保存就行了
打开这个Invalid内部类
我们将图中所选择的字符'd'删除
然后保存
刷新一下,程序仍然运行:Hello World!
再用jd-gui打开Info.jar
它反编译到那里就出错了。
注意不能将这个方法运行用Android项目上,Android有另一套规则,它需要把Jar转换成dex的。
相关文章推荐
- #引导方案(一)#
- iOS项目知识总结
- iOS新建项目架构规范
- echarts引入及应用
- 学习进度条博客
- C++编程中使用设计模式中的policy策略模式的实例讲解
- css3渐变色
- uvaLive 4490 Help Bubu 帮助布布 等价转化+DP
- iOS 动画Animation-2-1: 动画基础:核心动画简介
- UML详解之五——顺序图和协作图
- 数据结构与算法分析-素数计算
- 盘点2016国际八大APP开发网站
- 学习进度条博客
- Android 适配方案
- Java泛型
- 学习进度条
- Java常用修饰符
- 初学习Android--Spinner,DatePicker,AutoCompleteTextView
- 【Unity】关于项目中画线设定
- jQuery Validate 插件