1. 程式人生 > >Android脫殼聖戰之---脫掉360加固殼(破解約火包神器的鑽石充值功能)

Android脫殼聖戰之---脫掉360加固殼(破解約火包神器的鑽石充值功能)

一、情景分析

程式猿一般都很孤獨,特別是總是和程式碼相伴,比如像我這種窮屌絲,一到週末就閒著沒事刷各種應用,看看想看的,無意中發現一款封面看著挺誘人的約友神器,下來來看看,迫不及待的點開:

我尼瑪我只是想視訊通話,竟然還要讓老子衝鑽石,我這暴脾氣可不答應,可是誰叫我們那麼窮呢?只能靠著自己的左手和右手開始搞了?不多解釋,直接上手破解這個app。

 

二、逆向脫殼分析

這種app找入口就太簡單了。直接使用Jadx開啟app,或者使用apktools反編譯apk,不過可惜的是,這種花錢的app內部都做了很強的防護,反編譯是失敗的:

 

當然這個錯誤是可以修復的,但是不是本文重點。我們接著用Jadx開啟app檢視:

很可惜,用了360加固了,所以如果想一探究竟只能先脫殼了。那麼問題來了?這裡會手動去脫殼嗎?說句實話我沒這個精力了,動態除錯脫殼很費腦的。所以就另闢捷徑。發現了脫殼神器drizzleDumper工具,這個工具是開源的,大家想看原始碼可以去下載:https://github.com/DrizzleRisk/drizzleDumper;當然這個工具網上有人已經分析了原理,這裡就大致在說一下,他的原理就是:root裝置之後,通過ptrace附加需要脫殼的apk程序,然後在脫殼的apk程序的記憶體中進行dex檔案的特徵搜尋,當搜尋到dex檔案時,進行dex檔案的記憶體dump。

 

其實這個思路和之前介紹的脫殼工具ZjDroid,DexExtractor等原理不太一樣,之前的脫殼工具都是基於hook攔截系統的載入dex函式進行dump出dex的。但是這個工具是基於附加目標程式,尋找記憶體段具備dex檔案頭部資訊進行dump的操作。這個思路也是非常好的。我們知道dex的長度是儲存在頭部資訊中的,所以只要在記憶體段中找到dex的頭部資訊,然後解析長度。有了起始地址和長度,那麼就可以獲取記憶體中的完整dex檔案了。比如這裡我們簡單看一下這個程式執行之後的記憶體資訊:

找到包名之後,直接檢視其對應的maps檔案即可:

因為之前也說過,不管之前怎麼加固,最終都是需要自動脫殼載入dex到記憶體中,那麼這裡就是直接在記憶體中找到已經脫殼的程式開始進行操作了。下面來簡單分析他的原始碼:

脫殼原理是基於root裝置的程序附加操作,只有附加到目標程序才能操作他的記憶體段資訊:

當然這裡工具用法非常簡單,直接輸入想要脫殼的應用包名,內部會通過這個包名找到對應的程序id值,然後在克隆出一個id進行附加操作:

在記憶體中查詢dex檔案的特殊格式:

這裡通過magic值進行查詢即可:

查詢比較簡單,通過讀取maps檔案獲取記憶體段開始和結束地址,然後開始操作這段記憶體地址:

找到了對應的dex頭部資訊,就開始dump出記憶體資料了。我們去github上可以下載已經編譯好的工具,直接拷貝到裝置的/data/local/tmp目錄下,記得修改一下執行許可權chmod 777 drizzbleDumper。然後直接執行即可:

工具兩個引數:一個是需要脫殼的程式包名,一個是等到超時時間。看到脫殼成功,脫殼之後的dex檔案儲存到了該目錄下。我們使用adb pull命令在弄到本地即可。

 

這裡就簡單使用了drizzleDumper工具進行了脫殼,這裡操作的是360的加固,感興趣的同學可以用這個工具去嘗試其他加固廠商的保護殼,不過最好的方式還是手動脫殼,那樣才能更加的提升技術,但是那樣腦細胞也會損失很多。不過有現成的工具能用就用。不能用在考慮手動脫。我們這時候在用Jadx開啟上面已經脫殼成功的dex檔案,之前說到了,使用apktools反編譯apk失敗的。那麼這裡入口想通過字串來查詢:

這裡想通過查詢"鑽石餘額"來進行突破,所以這時候會發現Jadx厲害之處,直接開啟原始apk,檢視他的編譯之後的資原始檔resource.arsc:

看到了吧,也是可以直接找到的,直接用id值進行全域性搜尋,這裡一定要去脫殼的dex檔案中搜,需要在用一個Jadx開啟脫殼的dex檔案即可:

這時候會發現在R.string中定義了,而且會發現這個欄位名是沒有被混淆的。然後在全域性搜這個欄位名:

這樣就找到入口了,直接點選進入即可:

這裡就很清晰的發現,獲取鑽石的方法了。繼續點選進入檢視:

那麼這時候就需要hook大法了,直接使用Xposed進行hook這個獲取鑽石的方法:

直接執行模組,看列印日誌資訊:

在看看能否視訊通話了:

看到了,我們充值了1個億的鑽石,可以視訊到對方妹子到老:

 

嚴重說明

本文的意圖只有一個,就是通過分析app學習更多的逆向技術,如果有人利用本文知識和技術進行非法操作進行牟利,帶來的任何法律責任都將由操作者本人承擔,和本文作者無任何關係,最終還是希望大家能夠秉著學習的心態閱讀此文。鑑於安全問題,樣本和原始碼都去編碼美麗小密圈自取!

 

三、總結

怕文章被和諧,後面的視訊內容不能在展現了,少兒不宜。大家懂得,而且我們的目的不是真的視訊而是破解。雖然我們窮但是我們一定要有道德素質,沒事別刷這些app沒什麼意思,多出去走走會發現還是這些app刷著有意思。本文主要藉助了一個脫殼工具drizzleDumper來進行脫掉360殼。然後繼續後面的破解操作。感興趣的同學可以使用這個工具去嘗試其他加固廠商的操作。