您好,登錄后才能下訂單哦!
這篇文章主要介紹“反編譯jar實現的方式有哪些”,在日常操作中,相信很多人在反編譯jar實現的方式有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”反編譯jar實現的方式有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
相同大版本的jdk
idea
fernflower.jar
javassist.jar
jd-gui
把要反編譯的.jar
修改成.zip
java -jar fernflower.jar classes.zip zzCode/
即可得到全為java的jar文件,用壓縮軟件解壓后導入idea即可
import javassist.ClassPool; import javassist.CtClass; import javassist.CtMethod; import java.util.Map; import javassist.NotFoundException; public class main { public static void main(String[] args) throws Exception { try { ClassPool pool = ClassPool.getDefault(); //指定class所在的路徑 pool.insertClassPath("C:\\rike.jar"); //指定引入的包,這里不需要,所以注釋掉 //pool.importPackage("dialog.DialogUtils"); //pool.importPackage("common.ListenerUtils"); //pool.importPackage("java.util.Map"); //指定要修改class的完整類名 CtClass cc = pool.get("aggressor.dialogs.WindowsExecutableDialog"); //設置要修改的方法需要的參數,沒有參數可以不設置 CtClass[] param = new CtClass[5]; param[0] = pool.get("java.util.Map"); param[1] = pool.get("dialog.DialogUtils"); param[2] = pool.get("common.ListenerUtils"); //指定要修改的類方法 CtMethod m = cc.getDeclaredMethod("dialogAction"); //如果需要修改參數,使用下面這個 //CtMethod m = cc.getDeclaredMethod("dialogAction",param); //插入新的代碼到最前面 //m.insertBefore("{if(true) return ;}"); //重新設置方法體 m.setBody("{System.out.println(\"hi class1\");}"); //保存到文件里,文件會保持到該工程下 cc.writeFile(); } catch (Exception e) { e.printStackTrace(); } } }
會生成一個class文件,直接復制到jar包就可以
注意,在setBody
包里面,用$0
代表this
$1
代表第一個參數 $2
代表第二個參數
我在測試的時候,因為jar文件比較復雜,前面的方式都會有很多報錯,所以使用這種方法
在你要修改的class文件對應目錄下建立文件夾,例如在idea中,項目的src文件夾下
在里面修改代碼,之后在idea
中使用快捷鍵ctrl
+alt
+shift
+s
引入完整的jar包
在加號處引入即可
新建生成jar
點擊build
生成即可
或者將生成的class文件,直接在jar包中修改
在項目的out\production\文件夾下有生成的class文件,直接拖到原始jar中修改即可
到此,關于“反編譯jar實現的方式有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。