jar包如何防止反编译_jar包可以反编译成源码吗

jar包如何防止反编译_jar包可以反编译成源码吗方法就是,向Jar注入无效代码(不合法的,或者根本不是代码的字符串)。那么无效的代码又怎么能正确运行呢?答案就是,你要保证你的代码永远不会执行到那一步。我作一个简单的例子说明:我们建立一个项目:packagecom.TestJar;publicclassMain{ publicstaticvoidmain(String[]args){ System.out.println(Info.g…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

(待验证)

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

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

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

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

我们建立一个项目:

jar包如何防止反编译_jar包可以反编译成源码吗

package com.TestJar;
 
public class Main { 
   
 
	public static void main(String[] args){ 
   
		System.out.println(Info.getMessage());
	}
}

Jetbrains全家桶1年46,售后保障稳定

package com.TestJar;
 
public class Info { 
   
 
	public static String getMessage(){ 
   
		return "Hello World!";
	}
	
	private class Invalid{ 
   
		
	}
}

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

然后我们将Info类输出Jar

jar包如何防止反编译_jar包可以反编译成源码吗

现在项目改成这样:

jar包如何防止反编译_jar包可以反编译成源码吗

运行结果仍然是 Hello World!

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

jar包如何防止反编译_jar包可以反编译成源码吗

反编译看得清清楚楚。

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

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

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

打开这个Invalid内部类

jar包如何防止反编译_jar包可以反编译成源码吗

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

jar包如何防止反编译_jar包可以反编译成源码吗

然后保存

jar包如何防止反编译_jar包可以反编译成源码吗

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

jar包如何防止反编译_jar包可以反编译成源码吗

再用jd-gui打开Info.jar

jar包如何防止反编译_jar包可以反编译成源码吗

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/230865.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 多线程(一):创建线程和线程的常用方法

    多线程(一):创建线程和线程的常用方法一:为什么要学多线程应付面试:多线程几乎是面试中必问的题,所以掌握一定的基础知识是必须的。了解并发编程:实际工作中很少写多线程的代码,这部分代码一般都被人封装起来了,在业务中使用多线程的机会也不是很多(看具体项目),但是作为一个高级程序员如果不会多线程是说不过去的。二:进程与线程进程进程是资源(CPU、内存等)分配的基本单位,它是程序执行时的一个实例。程序运行时系统…

    2022年4月28日
    47
  • TCP 四次挥手的过程

    TCP 四次挥手的过程1、四次挥手的过程1、刚开始双方处于ESTABLISHED状态。2、客户端要断开了,向服务器发送FIN报文,在TCP报文中的位置如下图:发送后客户端变成了FIN-WAIT-1状态。注意,这时候客户端同时也变成了half-close(半关闭)状态,即无法向服务端发送报文,只能接收。3、服务端接收后向客户端确认,变成了CLOSED-WAIT状态。4、客户端接收到了服务端的确认,变成了FIN-WAIT2状态。5、随后,服务端向客户端发送FIN,自己进入LAST-AC…

    2022年5月8日
    49
  • python爬虫总是爬不到数据,你需要解决反爬虫了

    python爬虫总是爬不到数据,你需要解决反爬虫了

    2021年11月10日
    99
  • 在java中重载和重写的区别_简述java线程生命周期

    在java中重载和重写的区别_简述java线程生命周期重写(Overriding) 重载(Overloading) 类的数量 父子类、接口与实现类 本类 方法名称 一致 一致 参数列表 一定不能修改 必须修…

    2025年9月6日
    5
  • 数据库课程设计——火车票售票系统「建议收藏」

    数据库课程设计——火车票售票系统「建议收藏」火车票预售系统,为购票用户与卖票管理人员之间搭建平台。让用户能够通过该软件对管理人员发布的车次班进行预购与查询,方便旅客的出行。

    2022年5月19日
    179
  • Centos7部署mysql5.7

    Centos7部署mysql5.7下载mysql源安装包wgethttp://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm如果官网下载地址有问题也可以使用博客地址下载,下载后上传至服务器即可https://download.csdn.net/download/wu2700222/10460468安装mysql源yumlocalinstall…

    2022年7月16日
    15

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号