close

本文為看雪論壇優秀文章

看雪論壇作者ID:Jtian



總述


對於java破解,直接反編譯出java代碼,然後改代碼邏輯,再重新打包,這套流程固然清晰直接,但常常會遇到缺少依賴庫、編譯環境複雜等問題。還有兩個思路可以處理這個問題:1、class文件爆破;2、javaagent。


java反編譯


使用jd-gui、IDEA 等工具可以反編譯jar包或者class文件。



jar包解壓


jar包本身就是個zip文件,這裡直接用7zip解壓。
同樣的,直接用7zip打包成zip即可完成打包,只要注意目錄結構即可。


爆破class文件


使用JavaByte.exe工具爆破class文件
爆破點一:改check函數的返回值
添加class文件

選中Methods里的check方法
雙擊iconst_0,將其改為iconst_1,並保存class文件。測試效果,You win!使用jd-gui驗證爆破效果
爆破點二:改if判斷
把0008到0016的代碼直接nop掉。(注意:使用JavaByte.exe進行nop的時候可能會使字節碼變短,比如3個字節的「B8001E」變成一個字節的「00」,這裡沒有自動填充剩餘的nop指令,有點不方便。可以通過「Add Instruction」補足剩餘的nop,也可以直接通過WinHex等二進制編輯工具進行修改。)
測試效果,You win!使用jd-gui驗證爆破效果


重新打包


jar包就是個zip文件,爆破class文件之後,直接使用7zip壓縮成zip文件,只要保證目錄結構正確即可。是否把後綴名.zip改成.jar也不會影響jar包的執行,為了保持習慣上的一致性,可以改一下。測試打包效果


其他說明

1、爆破的地方不要改變其餘原始字節碼的偏移
如果修改後字節碼長度變短,會導致報錯,所以要保證修改後的字節碼長度不變,以使其餘的原始字節碼不發生偏移,避免報錯。
2、注意棧參數的平衡3、使用recaf爆破class文件
(這是補充的內容,感謝guduzhe指點)

以「改if判斷」舉例
軟件用的recaf-2.21.7-J8-jar-with-dependencies.jar,把hello.jar包拖拽進去即可反編譯。
在反編譯窗口選中要修改的函數main-> 右鍵選擇"Edit with assembler"刪除if判斷Ctrl+S保存修改(保存成功後,反編譯窗口的內容也會跟着修改)導出jar包,File-> Export program測試效果,You win!
參考:
https://bbs.pediy.com/thread-217703.htm
https://github.com/ingokegel/jclasslib
https://docs.oracle.com/javase/specs/jvms/se11/html/jvms-6.html
https://github.com/Col-E/Recaf
http://autp.cn/archives/java字節碼編輯器文檔說明

利用javaagent動態修改方法Main.check
利用javaagent動態修改方法Main.check,直接返回true
cd src_PreMainAgentjavac -cp .;javassist.jar PreMainAgent.java

...if(!"Main".equals(className)){ return null;}try{ CtClass ctClass = pool.get("Main"); CtMethod check = ctClass.getDeclaredMethod("check"); check.setBody("{return true;}"); return ctClass.toBytecode();} catch(Exception e) { e.printStackTrace();}...

打包
vim MANIFEST.MFManifest-Version: 1.0Can-Redefine-Classes: trueCan-Retransform-Classes: truePremain-Class: PreMainAgent

需要注意的就一個MANIFEST.MF,然後仿照一個jar包結構用7zip壓縮即可(可以直接通過拖拽的方式替換zip包里的內容)。或者直接使用maven、gradle對工程進行管理。

測試效果,You win!
java -javaagent:PreMainAgent.jar -jar hello.jar

參考:

https://www.bilibili.com/video/BV1NC4y1a7P2?p=2

https://www.cnblogs.com/rickiyang/p/11368932.html

https://blog.csdn.net/weixin_45492007/article/details/118052979

https://www.javassist.org/tutorial/tutorial.html

https://www.cnblogs.com/Gandy/p/7290069.html


看雪ID:Jtian

https://bbs.pediy.com/user-home-598931.htm

*本文由看雪論壇 Jtian原創,轉載請註明來自看雪社區


#往期推薦

1.某應用sign簽名算法還原

2.海蓮花APT組織樣本分析

3.詳解七句匯編獲取Kernel32模塊地址

4.保護模式學習筆記之分頁機制

5.非華為電腦安裝華為電腦管家分析

6.某DEX_VMP安全分析與還原




球分享

球點讚

球在看

點擊「閱讀原文」,了解更多!

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 鑽石舞台 的頭像
    鑽石舞台

    鑽石舞台

    鑽石舞台 發表在 痞客邦 留言(0) 人氣()