一種常規Android脫殼技術的拓展(附工具)

AracelyGuyt 8年前發布 | 24K 次閱讀 安卓開發 Android開發 移動開發

最近在做移動安全測試的項目時,遇到了最新的某數字殼,好久都沒脫殼了,記得上次脫殼還是zjdroid通殺的時候。秉著安全研究的精神,趁此機會,又把最新的加固與脫殼技術過了一遍,然而并沒有成功脫掉。

郁悶之際,我索性沉下心來,好好看看當前脫殼技術的原理,就這樣我在Github上看了幾個脫殼工具的代碼。其中一個我感覺很有趣, 正是 strazzere 大神的 android-unpacker ,這是一款ndk寫的動態Android脫殼的工具,原理簡單來說就是ptrace,然后在內存中匹配特征碼和odex的magic,最后dump到文件。我當然自己編譯測試了,但發現是對于最新的殼,貌似還是不管用,總是dump下來一個空文件。

后來我在分析代碼,自己邊看邊改邊測試。慢慢結構和代碼基本上面目全非了,順便改了個代碼錯誤( 這個錯誤就是之前dump結果為空的真兇 -_- ),到最后按照 strazzere 大神的基本思路 索性自己重新寫了一個工具(復用了大神的部分代碼)。

下面說下幾個最重要的和大神方法不一樣的地方:

1. android-unpacker 基本上就是匹配odex magic的函數時(下圖), 而我不管odex了,專心匹配dex的magic。

2. android-unpacker 用pread(下圖),而我換了read和lseek,具體就不說為啥了,這是非常重要的一點。

3. 我直接拋棄了 android-unpacker中的殼的特征匹配這一整塊兒內容。

4. android-unpacker只匹配和dump一次,而 我引入了雙循環機制,這點對我的脫殼成功也非常重要。

5. android-unpacker在 peek_memory(下圖)中進行magic匹配,我改了邏輯,換了一種匹配方式。

6.另外我還增加了一匹配種方法,來增強匹配的成功率。

7.引入了wait_times機制(很無奈)

7.其他..

我找了三家公司的殼試了下,下面直接上效果圖順便說說工具怎么用:

1.這個工具就是ndk程序,所以要在Root后的Android環境下運行(虛擬機和實體機都可以)

2.一般來說,先讓工具跑起來等著,第一個參數是包名,第二個參數是等待時間。

3.等待時間有兩重含義,第一是當工具發現APP進程后,等待多久才開始第一次Scan;第二是每次Scan的時間間隔。(因為每種殼機制都不太一樣,所以dex在內存中出現和留存的時間也不同,所以這個wait_time可以靈活配置,具體大家自己琢磨吧。)

4.實際dump成功的例子(我就不把殼廠商和APP名字寫出來了,大家應該都能看出來):

(1)某些殼需要把參數wait_times設置1~3秒,然后打開APP,不然APP會退。

(2)等待時機支持小數秒,呵呵。

(3)這個dump下來的是缺失的dex,接著向下看。

(4)還是上個APP,這次成功了,沒關系,多試幾次就好了,呵呵。

(5)不寫wait_times的話也可以,默認0秒。

(6)某數字公司的殼,dex內存里一直有,所以先啟動APP,然后再開工具也是可以的。

(7)再來一個

就不貼dex2jar的圖了。

說明

1.工具僅用于安全研究及安全測試,如用于非法用途,后果自負。

2.除了arm版,我還編譯了個x86的,方便使用虛擬機的童鞋。

3.本來是準備要再研究更多廠商的,但是這段時間實在是忙,想了想還是先發出來吧。

4.這工具并不是萬能的,甚至可以說是不健全的。我僅測試了三家的殼,有兩家都可以穩脫,還有一家一部分可以,一部分不行。歡迎大家測試其他的殼,你們脫不了可不要怨我。

5.別跟我要代碼了,我的代碼太丑陋,直接參考 android-unpacker的思路就可以。

下載地址

鏈接: http://pan.baidu.com/s/1hr49HBI 密碼: 6bgv

 

來自: http://www.freebuf.com/sectool/105147.html

 

 本文由用戶 AracelyGuyt 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!