Java逆向工程需要的技能和工具


Java逆向分析技術可用於了解第三方軟件的運行機制、破解注冊碼、尋找安全漏洞等。



  • java -verbose

  • HotSpot™ Serviceability Agent

  • jetBrains intellij IDEA 14.3

  • jetBrains CLion 1.0.4

  • jd-gui 1.2

  • jinfo

  • dump運行時的class信息

  • 帶混淆調試

  • ClassPath和vm options修復

  • ClassFinder:在一大堆的jar中搜索需要的信息

  • 字節碼修改工具


RSA加密,CRC校驗


  • step in/over/out (單步 步入/步過/跳出)

  • evaluate expressions (表達式計算)

  • stack frame in/out (棧幀切換)

  • break point (斷點啊親)


為了取得更好的反編譯效果,我們這次不使用jd來做,在博主安裝的Intellij IDEA的lib下,有一個fern flower的反編譯工具,這也是IDEA的默認反編譯器,我們就用它了,有興趣的東西可以搜索下,貌似跟mine craft有很大淵源。


為了能夠充分掌握某個關鍵類、方法的調用路徑,以方便我們進行回溯或者探索重要信息,通常我們采用如下幾種方法:

  • 反編譯源代碼,在關鍵點處充分修改,打印調用棧.

  • 利用靜態AOP或者hook,插入我們的調試器.

  • 將代碼當作文本處理,以利用sed/grep/less等工具,以及文件索引能力,方便大批量的進行關鍵代碼搜索.

  • 直接用調試器附加目標進程,要顯示源碼的話,往往需要我們加-g以產生調試信息,這一點在My Eclipse的保護機制下受到限制,但這也是我們需要突破的地方.

  • 利用IDE提供的查找使用/正向依賴/反向依賴分析技術.

  • 利用dump,將關鍵代碼段或者類信息從目標進程中dump出來並還原為源代碼.

總之,靈活結合上述幾種手段,目的是為了充分在My Eclipse這頭大象身上輾轉騰挪,取我所需.


自己造輪子,精准搜索:finder

既然修改了代碼,出現了錯誤,動態調試從何談起?

作為工程師,你能夠改變世界的那一點,就在於你可以按照需要,來造輪子。

這個時候,我們有兩種辦法:

  1. 還是從靜態環境中,來搜索錯誤提示

  2. 自己造輪子,來搜索錯誤提示.

為什么需要自己造輪子呢?

  • 靜態環境的搭建極其耗時

  • 逆向目標復雜,靜態分析容易遺漏

  • 方便后續的補丁操作

看看我們這個時候需要的輪子:

這里寫圖片描述

沒錯,我們需要在jar包中、zip包中、文件夾中、class文件中:

  • 找到我們感興趣的文件格式

  • 查找字節指紋

  • 打印我們需要的各類信息

如下:

這里寫圖片描述

這個時候,我們的檢索能力如下:

  1. verbose信息.

  2. 靜態環境提供的路徑、符號、文件搜索.

  3. 提供文件指紋、字節特征碼搜索的finder.

  4. ServiceAbility Agent提供的運行時信息.


要學會注入自己的代碼,給軟件打patch。


參加博文:http://www.cnblogs.com/foreach-break/




免責聲明!

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



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