梆梆脫殼分析1 所有執行緒抗gdb技術實現

2021-06-29 05:27:22 字數 1378 閱讀 5939

**

對於目前android平台上的脫殼技術,方法有很多,但對於一名coder而言,如何實現那些「奇技淫巧」,對我而言更加有趣些。

對於梆梆,之前有文章討論可以attach到其binder執行緒上,通過gcore、dd來dump記憶體中的dex。(當然,脫殼方法有很多,不一定非要用這種方法。)

但對於其最新版本,當使用gdb attach到主程序的任一線程上時,要麼permission denied,要麼會退出,本文章會對其實現機理進行一下分析。

1.      主程序fork子程序c1,c1 fork子程序c2;

2.      c1會ptrace attach到主程序的主線程與gc執行緒(其也會操作memory,所以需要用ptrace方法保護),這樣當試圖ptrace attach時,會有permission denied;

3.      主程序為了能讓c1這個子程序跟蹤,需要呼叫prctl,option為set_dumpable。但這個api比較危險,其效果與androidmanifest檔案中debuggable選項設為true等價。如果不呼叫這個api,子程序是不能trace父程序的;

4.      c1也會ptrace到c2程序,來對其進行保護;

5.      這個三個程序間彼此用pipe進行通訊;

6.      c1會向主程序記憶體空間注入大約52位元組的資料,應為金鑰;

7.      之後c1進入pipe讀阻塞sleep;

8.      c2使用inotify監控主程序的每個clone process的mem與pagemap,於是當gdb、dd試圖dump記憶體時,mem的access事件被觸發,三個程序集體退出,導致記憶體dump不完整;

9.      c2並monitor主程序的task目錄,來判斷是否有新的clone process或現有的已消亡,來更新monitor的select loop的fd集合。

愛加密也是使用類似方法來實現其功能。

另外,梆梆還hook了write方法,來阻止在程序內部將header為dex的magic code的內容寫入磁碟。

【原創】梆梆脫殼分析2-依然使用gcore脫殼的方法

**續前文:

前文中可以看出主程序的孫子程序是起到防gdb/gcore的關鍵,那麼如何繞過它,依然使用gdb去dump出完整dex呢?

開始時,我是重新編譯了乙個rom,遮蔽與重定向了相關api,可以dump出來,顯然這個方法相對煩躁一點,下面介紹一種在目前梆梆的版本上,更為簡單粗暴的方法。

1. 首先通過ps找出孫子程序的pid,記為pid3;

2. 檢視/proc//task找出孫子程序所有的thread,通常是3個,並記錄下他們的tid;

3. 使用kill -20 將其子執行緒掛起;

4. gdb 主程序,順利gcore 

Youpk 實戰脫殼 愛加密 梆梆脫殼

下面是我整理的乙份常用的脫殼機的對比 這裡在網上找了梆梆2020 加固過的樣本。這裡加殼前的 比較簡單 只有乙個類mainactivity mainactivity 裡只有簡單的add 和 sub方法。可以看到方法裡面的 也比較簡單,返回相加相減的值。這裡可以看到 加殼後 mainactivity ...

梆梆安全加固企業版分析

我是一名奮戰在安全第一線的程式猿,愛好和平,愛好打包不平,freedom forever 最近移動安全太火,火的我都忍不住玩了一把,最近幾個月在研究各家的安全加固方案,大多dex加密 反除錯等技術,玩著玩著就沒了意思。前段時間,突然發現有的企業客戶端apk的加固方式發生了一些變化,勾起了我的興趣,好...

360脫殼分析1 記憶體dump的時機選擇

360對dex的保護是比較好的,直接去dump記憶體會發現activity類都是有問題的,從dex格式而言,其dexclassdef結構體是有問題的,除了classid的所有成員均為0。那應該怎麼脫呢,當然360對so有加殼,我們可以對其進行脫殼後進行分析 另外,當然也可以修改libdvm來進行脫殼...