防止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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM