1. 程式人生 > >Android逆向工程:講解相關逆向工具的配置和使用,帶你快速熟悉逆向操作

Android逆向工程:講解相關逆向工具的配置和使用,帶你快速熟悉逆向操作

有個一週沒有寫部落格了,最近一直都在忙於公司的業務開發,沒有多少時間來和大家分享技術,好不容易逮到一個時間,抽空寫一下部落格,那麼就讓我們趕快開始今天的學習把!

上面的部落格中,我們學習了smali語法的相關知識,以及動態除錯smali程式碼的操作,不知道你是否已經學會了,還不是很熟悉的小夥伴希望你加把勁趕上來,畢竟以後還會繼續給大家講解逆向分析,跟上步伐不要掉隊哦。

今天給大家講解一下逆向工程中所用到的相關工具。主要講解以下工具的配置和使用:dex2jar,jdgui.exe,apktool,Android Killer。下面我們就針對以上經常使用到的工具一一進行講解。

首先我們先講解dex2jar和jdgui.exe。

說到dex2jar就要提到jdgui.exe,這就是兩個兄弟一樣,在平常的逆向工程中,經常需要他們兩個配合使用。dex2jar的功能主要是把classes.dex檔案打包成jar檔案,jar檔案中主要包含的是根據smali程式碼翻譯成的java程式碼,然後打包成的jar檔案就可以在jdgui.exe中開啟,以方便開發者進行相關的逆向分析。

dex2jar的下載地址:dex2jar下載,點選連結進入官網下載,如圖所示:

點選綠色背景的“Download”按鈕跳轉到下載頁面:

等待幾秒後將會開啟下載:

下載的檔名為“dex2jar-2.0.zip”,點選下載,等待下載完成。

下載完成後,在D盤中新建資料夾,或者別的盤也行,資料夾名字隨意, 將壓縮包中的dex2jar-2.0檔案解壓到新建的資料夾內。dex2jar的使用不需要相關的配置,只需要解壓就好了。下面我們開始下載jdgui.exe:

jdgui.exe的下載地址:jdgui.exe下載,點選連結進入下載頁面:

點選:“download”,進入下面的選擇頁面:

點選第一條:“Softpe dia Secure Download(US)” ,進入到下載頁面,等待幾分鐘將會開啟下載:

下載的檔名為:“jd-gui-windows-1.4.0.zip” ,下載完成後,開啟壓縮包:

 將其中的jd-gui-windows-1.4.0資料夾解壓到剛才新建的資料夾內,和dex2jar檔案放在同一目錄。jdgui.exe的使用同樣不需要進行相關的配置,直接執行jd-gui-windows-1.4.0資料夾內的jd-gui.exe即可。

下面講解具體的使用流程:

首先針對需要進行反編譯的Apk檔案,修改後綴名“.apk”為“.zip”,然後對Apk檔案進行解壓處理。博主這裡演示的是百度手機助手:

 我們看到壓縮包裡有一個“classes.dex”檔案,將這個檔案解壓至我們dex2jar-2.0資料夾內,如圖所示:

注意,這裡一定要和d2j-jar2dex.bat在同一目錄下,因為具體的打包jar工具就是“d2j-jar2dex.bat” 。

下面開啟cmd命令提示符,進入到dex2jar-2.0資料夾目錄下,然後輸入命令:

d2j-dex2jar classes.dex

開始執行反編譯和打包操作:

 

打包完成後將會在 dex2jar-2.0資料夾內生成一個jar檔案,名字為“classes-dex2jar.jar”,如圖所示:

dex2jar的工作就到此結束了,下面就輪到jdgui.exe登場了!我們首先開啟 jd-gui-windows-1.4.0資料夾:

直接點選執行“jd-gui.exe”檔案,執行出現下面介面:

 

點選“資料夾”圖示,彈出選擇路徑,這裡選擇的路徑就是剛才生成的jar檔案所在的路徑,如圖所示:

 點選開啟,你就可以看到翻譯過來的java程式碼了,如圖所示:

這裡還要說一下,通過dex2jar反編譯Apk檔案,將不會生成相關的smali程式碼,它這是把生成的smali程式碼有翻譯打包成了jar檔案;jdgui.exe只是一個展示的作用,只提供java程式碼的展示,你將不能對程式碼進行刪減,新增或者修改等操作。

下面我們講解Apktool工具。同過上面dex2jar的學習,我們知道了 dex2jar並不會生成smali程式碼,那麼如果我們需要看smali程式碼怎麼辦呢?別急,這就是我要將的Apktool的功能,它專門負責把Apk檔案反編譯成smali檔案!下面就讓我們趕快去了解它吧~

Apktool下載:首先我們需要填寫apktool.bat檔案,開啟連結:apktool.bat檔案內容,如圖所示:

在桌面上新建一個txt檔案,講這段程式碼複製貼上進去,如圖所示:

 然後儲存檔案,修改檔名為“apktool.bat”。

下面我們下載apktool.jar檔案:Apktool官網 ,開啟連結,向下滑動頁面到如圖所示位置:

 我們下載最新的版本:Apktool v2.3.3。點選“Download”開始下載,如圖所示:

下載的檔案是“apktool_2.3.3.jar”,點選下載。

下載完成後,修改檔名為“apktool.jar”,連同剛才我們建立的“apktool.bat”檔案,一同放入C盤的Windows目錄下:如圖所示

 

下面我們來測試一下Apktool是否正常,開啟cmd命令提示否,直接輸入命令:apktool,如下圖所示:

 

出現上圖就代表著成功了。

下面講解Apktool具體的使用方法,使用很簡單,Apktool並沒有圖形化介面,所以所有的操作都只能通過cmd命令提示符來完成。在cmd中進入你需要反編譯的Apk檔案的目錄下,執行命令:

apktool d xxx.apk

xxx.apk是你想要反編譯的apk檔案,比如,博主這裡需要反編譯QQ,QQ的apk檔案是QQ_884.apk,我把它放在了D盤中的AndroidDecompiling資料夾內,我首先開啟cmd,cd進入到QQ_884.apk檔案所處的目錄下,然後執行命令:apktool d QQ_884.apk,接下來就會進行反編譯QQ的Apk檔案工作,然後等待操作完成,如下圖所示:

這裡說明一下,具體反編譯所用的時長和Apk檔案的大小有關,檔案越大反編譯所需要的時間越長,QQ_884.apk檔案還是蠻大的,這裡反編譯它花費了有一分多鐘的時間。反編譯完成後,會在Apk檔案所處的目錄下生成一個與Apk檔案同名的資料夾,這裡博主反編譯的是QQ_884.apk檔案,那麼也就在QQ_884.apk檔案的同目錄中生成了一個名字為“QQ_884”的資料夾,我們看一下,如圖所示:

 

這個新生成的資料夾內包含的就是反編譯出來所有的Smali檔案,還有這個Apk檔案所包含的相應的資源,xml檔案,圖片,文字等等,這裡我們點開QQ_884資料夾看一下:

 res資料夾內都是資源資訊,我們還看到了Apk的核心配置檔案,剩餘的是Smali檔案,反編譯的效果還是不錯的。

Apktool不僅僅可以對Apk進行反編譯,它還可以對反編譯後的Apk進行重新打包處理,這個也是它最主要的一個功能!例如,你對其中的某處smali程式碼做出了修改,想看看修改後的執行效果,你就需要對修改後的Smali程式碼重新打成一個Apk,放進你的手機內執行一下。具體Apktool打包命令為:

apktool.bat b xxxx

xxx是反編譯生成的那個資料夾,例如博主這裡重新打包QQ檔案,就執行命令:apktool.bat b QQ_884 

這裡說明一下,使用Apktool重新打包生成的Apk檔案是無法直接執行的,你還需要對其進行重新簽名,簽名後才可以正常執行。Apktool只能是重新打個包,具體簽名的操作還需要另請高明,使用簽名工具來為它簽名。這裡也算是Apktool的一個遺憾之處吧。簽名工具這裡不再多說,網上有很多的例子。

還有一點特別提醒,你在使用Apktool重新打包的時候,需要注意重新打包的那個檔案必須是由Apktool反編譯生成的,否則將會報錯失敗,如圖所示:

這裡的報錯意思是找不到apktool.yml檔案。在使用Apktool反編譯時,Apktool會在反編譯生成的資料夾內放入Apktool.yml檔案,以作為相應的標識,在重新打包的時候檢測檔案內是否存在Apktool.yml檔案,不存在該檔案說明這個檔案不是由Apktool反編譯生成的,那麼就停止打包工作報錯。 

下面我們開始學習AndroidKiller工具,這個是一大神器,集齊反編譯,翻譯,打包,簽名於一體,具有良好的操作介面,從它的名字上就可以看出來,這是真正的Android大殺器。實質上AndroidKill工具是把上面我們講到的dex2jar,jdgui.exe,Apktool,還有adb進行了包裝融合處理,使得我們可以更便捷的使用它們的功能。那麼就讓我們趕快學習它是如何使用的吧!

上面的連結來自吾愛破解的愛盤,點選連結即可下載,如圖所示:

這裡我們下載的版本為“AndroidKiller_v1.3.1”,需要告訴一聲,AndroidKiller的作者目前已停止更新了AndroidKiller的版本,這是普遍使用的一版。下載完成後,開啟壓縮包:

 

在D盤內新建一個資料夾,名字為:AndroidKiller,將我們下載的壓縮包解壓至AndroidKiller目錄下。AndroidKiller.exe 就是軟體的啟動程式,我們點選它開啟AndroidKiller介面,這裡會彈出一個警告框,告訴你沒有檢測到JDK路徑,因為我們還沒有在AndroidKiller內配置JDK,所以會彈出來。不用管它,點選確定,開啟後如下圖所示:

 首先第一步我們就要先去配置JDK路徑,點選“配置”,選擇java,如圖所示:

我們在這裡選擇你JDK的安裝路徑,路徑選擇正確,會在下面展示JDK的版本資訊,然後點選確定。例如博主這裡:

 配置裡面我們就只需要配置JDK路徑即可,剩下的不要動,按照預設的形式。下面我們還需要配置一個地方:配置Apktool。這個是重中之重。我們點選最上欄中的“Android”選項,如圖所示:

點選“功能”區域中的“APKTOOL管理器”,開啟後如圖所示:

在這裡我們需要新增Apktool工具,點選最右邊的“新增”,如圖所示:

名稱是隨意填寫,這裡我們填寫“apktool”,路徑選擇的是“apktool.jar” 的路徑,引數不需要寫東西。還有最後一步別忘了!

看見最下面的“選擇預設的Apktool版本”,點選下拉列表:

這裡選擇我們剛才新增的“apktool”,然後關閉即可。這樣就完成了AndroidKiller所有的配置。

下面我們學習使用方法。點選最上欄中的"主頁",點選“開啟”,在這裡選擇你需要反編譯的Apk檔案,如圖所示:

 點選開啟,開始進行反編譯操作,所需要的時間視Apk檔案大小而定,靜靜等待幾分鐘,等待一切操作全部完成,如圖所示:

我們可以很清除的看到,這個App的圖示,標籤,還有它的包名,以及入口主活動,一目瞭然。 我們翻看一下這裡的目錄:

這裡把分割成四個部分,第一個部分為Activity,第二為Receiver,第三為Service,第四為涉及到的許可權。真的很方便,很清晰有木有!我們可以隨意點開一個Activity中的Smali程式碼:

 這裡展示的都是Smali程式碼,如果你想看對應的java程式碼,就點選那個java標誌的小圖示“”,就會展示出相應的Java程式碼,如圖所示:

你會感覺很熟悉,咦,這不就是jdgui.exe的圖示嗎!沒錯,這裡就是jdgui.exe,還記得剛才我說過的麼,AndroidKiller正是集成了上面我們講到的dex2jar,jdgui.exe,Apktool三者的功能。

使用AndroidKiller還是很簡單,點選最上欄中的“Android”,點選最左邊的“編譯”,就可以一鍵打包自動簽名,生成一個全新的Apk啦!這裡博主沒有修改程式碼,就不進行演示了。

好了,一下子講了這麼多,下面小夥伴們就自己好好練習一下吧,接下來我們就要開始正式的App逆向分析實戰了,這些工具能夠助我們一臂之力,提高我們的效率。在接下來的實戰中,我會具體的使用這些工具,給大家講解該如何進行逆向分析,希望大家要好好學習昂!

再見!如果引用本文請標明出處,謝謝!