android黑科技系列——擷取加固後應用App的所有方法資訊

來源:互聯網
上載者:User

標籤:term   ref   就是   ade   file   告訴   日誌資訊   text   androi   

一、前言

在逆嚮應用的時候,我們有時候希望能夠快速定位到應用的關鍵方法,在之前我已經詳細介紹了一個自己研發的代碼動態注入工具icodetools,來進行動態注入日誌資訊到應用中,不瞭解的同學可以查看這裡:icodetools動態注入代碼解析,看完之後都會發現這個工具對於現在加固的應用是沒有辦法的,所以我們如何能夠得到加固的應用的所有方法資訊呢?再不用複雜的脫殼步驟也可以輕鬆的擷取對應的方法資訊。這個就是本文需要介紹的內容。

二、擷取加固應用方法

在之前瞭解過加固應用原理的同學或者是弄過脫殼的同學都知道,加固其實就是對源apk進行加密,然後進行解密載入運行,所以在這個過程中如果我們想要得到應用的所有方法資訊,必須是在解密載入運行之後進行操作了。這個我們就需要藉助系統的一個重要類DexFile,下面可以查看他的源碼:


看到這三個方法,而這三個方法是一個應用中類載入啟動並執行最終點,不管你怎麼加固,最終都會需要解密,載入dex,載入類然後運行。所以這三個地方是應用啟動並執行必經之地。看到三個方法的參數資訊,可以知道這個類的名稱和類載入器,那麼我們就可以利用這兩個資訊通過反射擷取這個類的所有方法資訊,這裡依然需要藉助神器Xposed來進行hook操作,hook的對象就是系統的dalvik.system.DexFile類的三個方法:


注意:為了防止多dex進行hook發生類找不到的錯誤,這裡做一次attach操作!這裡為了示範加固應用,就選擇了之前我寫過的一個下載今日頭條視頻的小工具,當時沒有開源,並且進行了加固,選擇的是梆梆加固。也有人找我要原始碼。那麼通過本文案例分析之後,就不需要源碼了,你可以窺探這個小工具的所有方法資訊了。這個工具的:https://pan.baidu.com/s/1eR56t94,使用教程在應用中也有。

下面繼續來看看上面hook之後的處理類方法:


在這個方法中,首先我們通過類名和載入器資訊,得到這個類所有的方法資訊,然後開始構造這個方法的簽名資訊:


這個資訊包括:方法的修飾符,傳回型別,方法名,參數類型,大致最終的樣式為:

public final native java.lang.String xxx(java.lang.String, int)

這樣的資訊就能夠把一個方法的所有資訊體現出來,後續如果我們想在外部利用反射調用這個方法來窺探資訊就好辦了,得到這些方法的簽名資訊之後,然後就開始進行每個方法的hook操作了:


在利用Xposed進行hook一個方法的時候,需要知道類名,類載入器,方法名,方法參數類型。正好這些資訊在上面都可以知道,而這裡之所以要進行hook是為了能夠判斷這個方法是否被調用了,方法在被調用的時候的參數值是什麼。因為上面擷取是這個類所有的方法,但是不代表這些方法就是被調用了。只有在次進行hook才可以判斷當前方法被調用了。而這裡有一個問題就是如果一個應用過於龐大,方法較多。在Xposed進行hook那麼多方法就會出現OOM這樣的錯誤。所以本文為了示範就沒有做最佳化,我們可以先擷取類的所有方法,然後分批進行hook操作即可。

三、運行效果

下面我們運行這個Xposed模組,然後重啟裝置運行即可,最後在運行上面已經安裝加固的今日頭條下載器工具,運行看效果日誌:


看到了,我們把這個工具的所有方法都列印出來了,然後再來看看他的調用方法:


從這些資訊可以看到,這些方法被實際調用了,再來看看那些方法被調用時的參數值:


看到了,方法調用的參數值我們也可以把它列印出來。

四、如何處理擷取到的方法

到這裡我們達到了我們的目的,可以dump出一個加固應用的所有方法,以及被實際調用方法,同時還可以把參數值列印處理,本文用的是梆梆加固的案例,其實其他家的加固都是可以的。感興趣的同學可以嘗試一下。下面繼續來看,上面擷取到了應用的所有方法資訊,有的同學可以會想這麼幹,用反射調用某個可疑方法,看看方法的傳回值是啥?所謂可以,可能需要通過經驗,結合方法的參數資訊類型得知這個方法的可疑程度,反射調用很簡單:


可以自己隨便寫一個應用然後得到根據包名得到其對應的Context變數,然後得到其類載入器,開始載入這個可以方法,不過可惜的是,這個運行應該是報錯的:


提示找不到這個類,原因想一下就通了:因為現在的應用是加固的,加固最終解密dex運行肯定用的是自己的類載入器,而上面的這種方式擷取到的Context只是外層殼的類載入器也就是應用預設的PathClassLoader載入器,所以理論上肯定是找不到這個類的,所以如果想不報錯,就需要找到這個類載入器。但是這個因為沒有源碼所以很難找到。所以通過這個簡單的代碼想告訴一些同學,這種想法是好的,但是其實是錯誤的。

取而代之的是我們可以利用Xposed來進行hook這個方法,因為Xposed中我們可以解決類載入器的問題:


先hook系統的Application類的attach方法,然後在擷取他的Context值,得到類載入器,來載入指定類,如果載入成功了,所以找到了對應的類載入器,那麼就可以進行後續的hook操作了。這種方法和思想是對的。

五、解答疑惑

有的同學又好奇了,上面我們在進行擷取類的所有方法資訊的同時不是已經進行hook方法了,還得到方法運行時的參數值了,的確那裡是做了,但是我也說了,Xposed一次性hook太多方法是會報錯的,因為本文案例的應用方法數不是很多,所以看起來很正常,如果進行hook大的應用的時候會出現問題的。所以為瞭解決這樣的問題,我們可以先擷取應用的所有方法,此時可以不進行hook操作,然後有了類的所有方法資訊之後,在進行方法分析,然後對可以方法單獨進行hook操作來進行驗證即可。

有的同學又有疑問了?這個對於大型的app來說感覺沒什麼用?的確,比如像WX這樣的應用,如果用作本文案例,可以看到日誌刷屏了,沒有一會就出現ANR了,這個問題在之前說到用icodetools工具進行操作的時候也出現過。當時的解決方案是通過開關進行控制,這裡其實也可以用開關進行控制的。但是這裡想說的是,現在加固的應用並不是大型應用,原因很簡單,因為加固是有崩潰率的,現在沒有任何一個加固平台可以保證零崩潰率的,因為加固現在都涉及到了native層,而Android機型複雜,相容性肯定不好。所以對於那些使用者量非常龐大的應用是不會進行加固的,比如BAT的主流產品都沒有進行加固。但是有的應用必須進行加固,那就是涉及到金融方面的,對於他們來說安全比崩潰率更重要。也有的大部分收費和內購的遊戲也是選擇加固的。而這種應用現在大部分屬於中型應用,本文還是可以進行操作的。

項目:https://github.com/fourbrother/XposedHookAllMethod

六、總結

本文主要講解了如何hook系統類別資訊,然後擷取到加固應用之後的所有方法資訊,同時還可以擷取到哪些方法被執行了,以及執行的過程中參數資訊,而這些資訊是分析一個應用最為重要的資訊。當然我們也可以通過分析方法的參數資訊來判斷這個方法的可以程度,然後在用Xposed進一步進行hook來驗證結果都是可以的。

android黑科技系列——擷取加固後應用App的所有方法資訊

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.