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
既然修改了代碼,出現了錯誤,動態調試從何談起?
作為工程師,你能夠改變世界的那一點,就在於你可以按照需要,來造輪子。
這個時候,我們有兩種辦法:
還是從靜態環境中,來搜索錯誤提示
自己造輪子,來搜索錯誤提示.
為什么需要自己造輪子呢?
靜態環境的搭建極其耗時
逆向目標復雜,靜態分析容易遺漏
方便后續的補丁操作
看看我們這個時候需要的輪子:
沒錯,我們需要在jar包中、zip包中、文件夾中、class文件中:
找到我們感興趣的文件格式
查找字節指紋
打印我們需要的各類信息
如下:
這個時候,我們的檢索能力如下:
verbose信息.
靜態環境提供的路徑、符號、文件搜索.
提供文件指紋、字節特征碼搜索的finder.
ServiceAbility Agent提供的運行時信息.
要學會注入自己的代碼,給軟件打patch。
參加博文:http://www.cnblogs.com/foreach-break/