Apk脫殼聖戰之---如何脫掉“梆梆加固”的保護殼

一、前言

現如今Android用戶的安全意識不是很強,又有一些惡意開發者利用應用的名字吸引眼球,包裝一個惡意鎖機收費的應用,在用戶被騙的安裝應用之後,立馬手機鎖機,需要付費方可解鎖。這樣的惡意軟件是非常讓人痛恨的。所以本文就用一個案例來分析如何破解這類應用,獲取解鎖密碼,讓被騙的用戶可以找回爽快!

 

二、分析軟件鎖機原理

本文用的是一款叫做:安卓性能激活.apk,關於樣本apk文件後面會給出下載地址,從名字可以看到它肯定不會是一個惡意軟件,但是當我們安裝的時候,並且激活它的權限之後就完了。下面不多說了,直接用Jadx工具打開它:

從包名可以看到是梆梆加固的,咋們也看不到他的代碼了,所以第一步咋們得先脫殼了,在這之前我們再看看他的清單文件:

這裏可以看到,他利用了設備管理器權限,來強制修改了系統密碼來做的,我們通過打開軟件也可以確定這點:

看到了,他申請了設備管理器權限,而這個權限用過的同學都知道,當獲取到這個權限之後可以控制這個設備了,包括修改系統密碼。而這個軟件也是利用這個權限來做到鎖機的。

注意:對於這個權限還有一個重要作用,就是可以防止應用被卸載,現在很多應用爲了防止自己被用戶無情的卸載了,就用這個權限,可以看到這個應用申請了這個權限之後,卸載頁面:

是不可以卸載的。從Android系統來說這個也是合乎情理的,因爲這個應用具備了設備管理器權限如果能被卸載那是不可能的。所以有一些應用就利用這個功能來防止被卸載。

 

三、脫殼工具DexExtractor原理分析

上面分析完了這個應用的鎖機原理,下面就需要破解它獲取到鎖機密碼即可,但是從上面代碼可以看到他用到了梆梆加固,所以如果想破解它得先把殼給脫了,關於脫殼文章在前面兩篇文章中介紹了兩篇關於脫殼文章:Apk脫殼聖戰之---脫掉“愛加密”的殼和 Apk脫殼聖戰之---脫掉“360加固”的殼,本文就要先來介紹如何脫掉梆梆的殼,因爲如果這個殼不脫掉,沒法分析他的惡意鎖機的解鎖密碼。

前面的這兩篇文章介紹脫殼主要是通過IDA動態調試下斷點dump出內存的dex數據,但是本文不這麼玩了,而是藉助一個脫殼工具DexExtractor,這個工具是開源的:https://github.com/bunnyblue/DexExtractor,這裏給出了修改源代碼。其實他的原理也很簡單,就是修改系統的DexFile.cpp源碼,在解析dex的函數開頭處加上自己的dumpdex邏輯:

這裏的DexHacker就是他自己定義的,這裏的dexFileParse就是系統解析dex函數,從參數可以看到,有dex文件數據,大小等信息。所以就可以把這個文件dex文件弄出來了。然後修改完了這個系統DexFile文件之後,需要將其編譯到system.img鏡像中,然後刷到手機中即可。

這裏大神給出了一個修改之後的system.img下載地址:https://pan.baidu.com/s/1jG3WQMU,但是需要注意的是,這個文件是Android4.4系統的,如果想在其他系統版本中操作,需要自己找到系統對應的版本找到DexFile源碼,添加上面的代碼,在編譯獲取到system.img文件即可。

所以從上面的原理可以瞭解到,他其實和我們之前用IDA動態調試的原理非常類似,脫殼就是一點:不管之前怎麼對dex加密,最終都是需要解密加載到內存中的。所以只要找到加載dex這個點即可那麼這種方式和之前調試的方式有什麼區別呢?

  • 動態調試方便,無需其他條件限制,但是遇到反調試就會很難受了。得先解決反調試纔可進行下一步脫殼。
  • 刷入system.img這種方式可以不用關心反調試,但是條件太苛刻,使用成本較高。對於不同系統版本還得準備不同版本的system.img文件,然後將其刷到設備中。

1、可以選擇刷入system.img文件

針對於上面的這種條件限制,我們有一種好的方式可以解決,就是藉助於模擬器,這樣就不需要繁瑣的將system.img刷到設備中了,可以將編譯之後的system.img文件替換對應系統版本的模擬器鏡像文件即可。然後啓動模擬器。

2、可以選擇替換系統libdvm.so文件

當然我們不刷機也是可以的,大神給出了編譯之後的libdvm.so文件,其實上面編譯的system.img有點動作太大了,因爲我們就修改了DexFile這個文件,其實只要編譯修改後的libdvm.so文件,然後替換設備的system/lib目錄下libdvm.so文件即可,不過設備需要root,這種方式比上面的刷機system.img方便。

 

四、DexExtractor工具使用條件

上面講解了DexExtractor工具的原理,下面就來詳細介紹他的用法吧,其實他的用法也很簡單,把他的源碼下載下來之後,他還有一個解密工程DexReverse,這個是一個java工程,爲了解密dump出的dex文件的。那爲什麼要解密呢?還有這個工具dump出的dex文件在哪?下面就來詳細介紹:

看到DexHacker這個文件中,會將dex文件保存到sd卡中,而每個應用啓動的時候都是在一個進程中創建一個虛擬機,所以這裏如果想讓這個工具可以dump出應用的dex文件,需要給這個應用添加一個寫sd卡的權限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

這個比較簡單,咋們可以利用apktool反編譯應用,在AndroidManifest.xml中添加這個權限,在回編譯即可。

那麼dump出dex文件之後爲何還要解密呢?這個主要是爲了對抗加固策略:

現在一些加固平臺,比如梆梆加固,會對dex的內存dump脫殼進行檢測,具體的就是hook修改當前進程的read、write讀寫相關的函數,一旦檢測到read,write讀寫相關的函數的操作中有對dex文件的dump行爲會有對抗的處理,防止dex的內存dump,因此呢,DexExtractor脫殼工具的作者爲了過掉這種內存dump的對抗,需要先將原始的dex文件數據進行base64加密然後進行寫文件到sdcard中進行輸出,當pull導出拿到base64加密的dex文件時還需要進行base64的解密才能獲取到原始的dex文件。這個解密工具也在工具目錄下Decode.jar,用法:java -jar Decode.jar dexdir;這裏需要注意的是,dexdir是我們pull出dex之後的目錄,記住是目錄,不是對應的dex文件哦!

 

五、DexExtractor工具使用步驟

到這裏我們就分析完了DexExtractor工具的原理,使用條件,使用步驟了,下面咋們就來實踐一下,把我們在前面說到的那個應用脫個殼。這裏爲了簡單,直接啓動一個4.4版本的模擬器,然後替換他的system.img文件。下面的步驟很簡單了:

第一步:替換system.img文件

用上面修改之後的system.img文件替換4.4的system.img文件,文件目錄:AndroidSDK目錄\system-images\android-19\default\armeabi-v7a\system.img

最好把之前的system.img文件進行改名備份。然後啓動模擬器即可。

第二步:添加寫SD卡權限

上面說到了,因爲這個工具需要將dump出的dex文件寫到SD卡中,所以我們需要檢查脫殼應用是否具備寫SD卡權限,我們用Jadx工具打開這個應用,發現沒有,所以我們需要用apktool工具反編譯,然後在AndroidManifest.xml中添加<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>,然後在回編譯重簽名即可。

第三步:安裝應用觀察日誌

安裝應用到模擬器,因爲是模擬器,可能操作比較麻煩,所以這裏需要藉助兩個命令可以完美的安裝啓動應用即可,一個是adb install xxx.apk,安裝成功之後。

在啓動應用:adb shell am start -n tx.qq898507339.bzy9/tx.qq898507339.bzy9.MainActivity

其中應用的包名和啓動activity的名稱都可以通過AndroidManifest.xml中查看:

無需任何界面操作即可完成啓動應用,然後查看這個包名對應的日誌信息,日誌tag是dalvikvm:

在這些日誌中可以看到脫殼之後的dex文件放在sd中,咋們把這個文件pull出來即可:

adb pull /sdcard/tx.qq898507339.bzy9_classes_927104.dex D:\DexExtractor\

這時候我們離成功就不遠了,得到了脫殼後的dex文件了,但是我們還需要進行解密。

注意:這裏記得觀察"create file end" 字段內容,有的應用可能內部本身有加載dex的邏輯,所以這裏會發現有多個dex文件的產生,不過沒關係,可以把所有的dex文件都導出本地,然後分析即可。

第三步:解密脫殼後的dex文件

前面說過了,爲了應對現在加固平臺的檢測,DexExtractor工具將dex進行加密了,可以利用Decode.jar工具進行解密:java -jar Decode.jar D:\DexEctractor\

注意,這裏的是目錄,不是dex文件哦。然後去目錄查看解密之後的dex文件即可,然後我們用jadx打開這個dex文件,可惜的是打開失敗,所以就用dex2jar工具將其變成jar文件進行查看:

轉化的時候報錯了,說這個dex是odex文件。關於odex格式文件不多解釋了,可自行搜索哈。jadx現在還不能識別odex文件的,這裏好奇用IDA打開一下,發現竟然可以成功,所以IDA還真強大哈!

第四步:odex文件轉化成dex文件

但是咋們用jadx用慣了,所以還是想用jadx打開它,其實我們只需要將odex轉化成dex即可,這裏藉助了smali.jar工具了,我們先用baksmali.jar將odex文件反編譯成smali文件,然後在用smali.jar將smali文件編譯成dex文件即可。這兩個工具用法比較簡單:

把c:\classes.dex反編譯爲smali,輸出到c:\classout目錄

java -jar baksmali-2.0.3.jar -o c:\classout/ c:\classes.dex 

把c:\classout目錄下的smali文件編譯爲c:\classes.dex
java -jar smali-2.0.3.jar c:\classout/ -o c:\classes.dex

就用上面這兩個工具可以把odex文件變成dex文件,然後在用jadx工具打開即可:

在前面查看AndroidManifest.mxl文件中可以找到設備管理器聲明的類jh,這裏直接查看源碼,果然是當獲取到設備管理器權限之後,立馬將鎖屏密碼設置成:>>>qq 898507339 bzy>>> ,然後立即鎖屏。鎖屏之後,你不能通過重啓來解決,因爲這種惡意軟件肯定監聽到了開機廣播:

所以這時候,受害者只能通過提示來進行付費解鎖了。或者自己刷機操作了。付費的邏輯比較簡單,通過加qq,然後惡意者會讓你付費,給完錢之後他會用電話號碼:18258614534,給你發送一條短信,代碼中監聽到有這條短信就自動解鎖,也就是將鎖屏密碼清空即可:

 

六、脫殼流程

看到了這裏我們就把這個軟件給脫殼破解了,下面來總結一下脫殼的流程和現在惡意鎖屏軟件原理:

第一、DexExtractor脫殼原理

通過修改系統DexFile.cpp源碼,添加dump出dex的邏輯,然後將其編譯到system.img和libdvm.so中,對於我們可以使用模擬器將system.img進行替換,或者用真機替換system/lib目錄下的libdvm.so文件,從而讓每個應用啓動的時候使用到DexFile類功能都會執行我們dump出dex的邏輯。

關於這個工具使用的步驟也非常簡單:

第一步:啓動模擬器選擇修改後代碼的system.img文件。

第二步:檢查脫殼程序是否具備寫SD卡權限。

第三步:查看脫殼程序對應的日誌,tag是dalvikvm。發現create file end等信息段。找到脫殼之後的dex文件路徑。

第四步:將sd卡中脫殼之後的dex文件導出到本地,在使用Decode.jar工具進行解密即可。

第五步:解密之後的dex格式odex,所以爲了使用jadx方便查看代碼邏輯,可以使用smali.jar工具將其轉化成dex文件。

第二、鎖機原理

通過本文的案例可以看到,現在一些惡意的收費鎖機軟件,故意利用軟件名稱吸引用戶安裝,安裝之後就引導用戶授權然後進行鎖機,當用戶被鎖機之後只能通過給錢解決,當然也可以自行刷機了。本文中的這個軟件的案例就利用了系統的設備管理器來設置系統的鎖機密碼。關於設備管理器這個權限,其實有很多用途,比如可以擦除設備數據,防止被卸載的功能,感興趣的同學可以自行搜索。

本文資料下載地址:http://download.csdn.net/detail/jiangwei0910410003/9748357

注意:system.img文件是Android4.4版本的,切不可替換錯誤!

 

本文的目的只有一個就是學習更多的逆向技巧和思路,如果有人利用本文技術去進行非法商業獲取利益帶來的法律責任都是操作者自己承擔,和本文以及作者沒關係,本文涉及到的代碼項目可以去編碼美麗小密圈自取,歡迎加入小密圈一起學習探討技術

 

七、總結

本文脫殼其實是藉助了DexExtractor工具進行的,但是原理都是一致的,就是不管之前dex怎麼加密,最終都是需要解密加載到內存中的,所以在這個時刻,進行操作dump出dex即可。對於之前介紹的方式使用IDA動態調試下斷點來dump出dex這個最大的問題就在於如何解決反調試問題,而這個工具操作就可以無需關心反調試了。但是這種方式操作也是比較麻煩的,因爲操作的前提條件比較多。好了到這裏就介紹完了本文的內容,看完的同學記得多多分享擴散哦,如果有打賞那就最好了!

 

《Android應用安全防護和逆向分析》

點擊立即購買:京東  天貓  

更多內容:點擊這裏

關注微信公衆號,最新技術乾貨實時推送

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章