1. 程式人生 > >Android中java和smali轉化一鍵化操作工具java2smali原理分析

Android中java和smali轉化一鍵化操作工具java2smali原理分析

最近在小密圈中,有同學諮詢到如何快速的將java檔案轉化成smali檔案,因為我們知道在反編譯之後都是smali程式碼,如果我們想進行程式碼插入,需要將java程式碼弄成smali程式碼,然後放進去,但是在這個過程中,比較麻煩,一般都是新建一個Android工程,然後編寫需要插入的功能程式碼,然後再反編譯得到smali程式碼。直接複製過去即可。

而在這個過程中,發現操作有點繁瑣,比如我只想插入兩個類,結果還得搞一個工程,自己純手寫smali程式碼也是不理智的,所以本文就來開發一款直接將java檔案轉化成smali程式碼的工具,主要原理思路也很簡單:

  • 第一步:javac命令編譯java檔案為class檔案

  • 第二步:dx命令將class檔案轉化成dex檔案

  • 第三步:使用baksmali工具將dex檔案轉化成smali檔案

可以看到,其實沒什麼難度這個工具,但是對於後續操作是必須的。其中javac命令是java環境的,所有這個工具是必須依賴於java虛擬機器環境的。dx命令其實是Android SDK自帶的工具,但是為了方便,這裡把dx命令的核心jar拷貝過來,直接執行dx.jar即可。baksmali工具是開源的,直接將dex檔案轉化成smali檔案的。

上面說了大致的步驟,但是在每一步有一些問題需要解決,下面就來一一分析:

第一個問題:javac編譯java檔案的時候,有可能依賴於第三方jar包,而這裡最為基礎的就是系統包android.jar,所以這個必不可少,又因為可能有多個java檔案,每個java檔案之間會相互引用,為了避免編譯錯誤,所以直接一次性編譯所有的java檔案,命令大致如下:

javac -classpath android.jar \java\*.java 

這個就是表示依賴android.jar包,來編譯java目錄下所有的java檔案了。

所以我們可以把需要編譯的java檔案都放在一個指定目錄下,然後使用這個命令編譯出class檔案即可。但是還需要注意一個問題,就是編譯出來的class檔案必須要在指定包名對應的目錄下,不然後面使用dx命令編譯會出問題,所以這裡還需要解讀每個java檔案獲取其對應的包名,然後根據包名新建對應的檔案目錄,最後再把對應的class檔案拷貝過去即可。

第二個問題:dx命令轉化dex檔案的時候,因為我們直接引用了dx.jar檔案的,而dx命令支援多個class檔案編譯成dex檔案的,所以命令如下:

java -jar dx.jar --dex --output=D:\classes.dex classes 

這個表示編譯出的dex檔案儲存在D盤的classes.dex,然後需要編譯的所有class檔案放在classes目錄下。

第三個問題:baksmali命令轉化smali檔案,因為直接引用baksmali.jar檔案的,所以命令很簡單如下:

java -jar baksmali.jar smalidir D:\classes.dex 

這個就是把D盤的classes.dex檔案反編譯成smali檔案放在smalidir目錄中。

解決了這三個問題,那麼工具程式碼就比較簡單了,我們需要引用android.jar,dx.jar,baksmali.jar,可以把這三個jar工具包放在工具的lib目錄下,然後所有的java原始碼儲存在java目錄下。下面來看一下大致程式碼實現:

第一步:編譯java檔案,然後進行拷貝

0?wx_fmt=png

第二步:將class檔案變成dex檔案

0?wx_fmt=png

第三步:將dex檔案變成smali檔案

0?wx_fmt=png

工具真的非常簡單,就是這三步即可,然後我們把工具打包成java2smali.jar放到指定目錄下:

0?wx_fmt=png

然後檢視執行結果:

0?wx_fmt=png

這個是對應的class檔案目錄結構,必須是其包名,而轉化之後的smali目錄結構也是如此:

0?wx_fmt=png

這樣我們就很輕鬆的獲取到Utils.java對應的smali程式碼了,然後直接把這個smali程式碼拷貝到需要插入程式碼的app中即可,注意這裡拷貝過去一定要包含包名目錄,這裡已經生成好了,所以直接從smali這級目錄拷貝即可。

工具下載地址:

https://github.com/fourbrother/java2smali

到這裡我們的工具就開發完成了,是不是很簡單,但是對於我們後面再進行插樁程式碼就很簡單了,還記得之前我們使用靜態方式破解app的時候,需要插入日誌資訊,那個時候我們需要新加幾個類資訊,當時的操作還是挺麻煩的,現在有了這個工具就非常簡單了。

手機檢視文章不方便,可以網頁看

http://www.wjdiankong.cn

長按下面??二維碼,關注編碼美麗

0?wx_fmt=jpeg

編碼美麗小密圈

小密圈中彙集眾神分享技術,所有原始碼、工具、破解樣本、外掛都彙集在小密圈中