方法就是,向Jar注入无效代码(不合法的,或者根本不是代码的字符串)。
那么无效的代码又怎么能正确运行呢?
答案就是,你要保证你的代码永远不会执行到那一步。
我作一个简单的例子说明:
我们建立一个项目:
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的。
 
                   
                   
                   
                   
                             本文介绍了一种方法,即向Jar文件注入无效代码,即使这些代码不可执行,程序仍能正常运行。通过一个简单的例子,展示了如何在Java项目中实现这一过程,并解释了其原理。反编译后发现,私有内部类并未实际使用,但程序依然能正确输出预期结果。通过修改内部类中的无效代码,程序依然能够正常运行,直至反编译时才会出现错误。此方法对于了解类加载和Jar文件工作原理有重要意义。
本文介绍了一种方法,即向Jar文件注入无效代码,即使这些代码不可执行,程序仍能正常运行。通过一个简单的例子,展示了如何在Java项目中实现这一过程,并解释了其原理。反编译后发现,私有内部类并未实际使用,但程序依然能正确输出预期结果。通过修改内部类中的无效代码,程序依然能够正常运行,直至反编译时才会出现错误。此方法对于了解类加载和Jar文件工作原理有重要意义。
           
       
           
                 
                 
                 
                 
                 
                
               
                 
                 
                 
                 
                
               
                 
                 扫一扫
扫一扫
                     
              
             
                   1万+
					1万+
					
 被折叠的  条评论
		 为什么被折叠?
被折叠的  条评论
		 为什么被折叠?
		 
		  到【灌水乐园】发言
到【灌水乐园】发言                                
		 
		 
    
   
    
   
             
            


 
            