【安卓逆向】手把手教你!360殼分析

先直接看這個so庫:

拖入IDA靜態(tài)看一下:發(fā)現(xiàn)看不到什么信息,原因很簡單,因為被處理了;

怎么辦呢?通過010進行對so簡單修改:

拖入IDA,使用ELF.b進行識別:

識別效果:

頭里面描述了有關(guān)節(jié)的信息:

先修改節(jié)的偏移:

這個三個:

保存之后,然后繼續(xù)拖入IDA:發(fā)現(xiàn)沒報異常,可以識別一些東西:

為什么這樣就能成功呢?因為我們把節(jié)有關(guān)的信息去除之后,他開始解析段的信息;

看導(dǎo)出函數(shù)列表,發(fā)現(xiàn)函數(shù)名稱也是被處理過的,但是JNI_Load還是可以看到的:

雙擊過來,還是可以看到一些信息的;

ctrl+S ,來到這里,看一下:

點擊sub_1AD8:發(fā)現(xiàn)也沒什么信息~

直接F5,看JNI_Load的信息:

修改一下參數(shù):

點進去看一下下面的那個函數(shù)也看不出來什么;

回到匯編窗口:

雙擊進去后:

繼續(xù)跟:

過來后:

發(fā)現(xiàn)是一個switch循環(huán);

F5一下:

分支挺長的,看不出來啥;直接動態(tài)分析;


這個函數(shù)的分析,同樣的在open函數(shù)下斷:

F9之后,加載進來這個so:

linker處下斷:

libdvm下斷:

F9后,linker處斷下:

F7進去,發(fā)現(xiàn)沒什么;

繼續(xù)F9linker斷下,然后F7:

F7往下走,發(fā)現(xiàn)有個函數(shù):

進入后來到libdvm.so,與getenv有關(guān);

回來后,繼續(xù)F7,這里有個函數(shù):

F7進去:往下跟:

過來后:

F7往下,這里有個函數(shù),

進去:F7往下,發(fā)現(xiàn)這里是一個循環(huán):一直比較R2和R3的值;

F4后F7往下走,來到了跳轉(zhuǎn)表這里:

繼續(xù)F7往下,來到了case26分支:

一路F7往下,這里有一個BLX函數(shù):

F7往下,同步R1寄存器;發(fā)現(xiàn)有關(guān)鍵字眼;

再往下是一個循環(huán),同時同步R3寄存器,是在解密字符串:

再往下,又一個亦或循環(huán):通過R2寄存器

繼續(xù)F7,

繼續(xù)F8往下:來到這里:

繼續(xù)F7往下;這里是一個循環(huán),一直在讀取,然后一直比較R0的值;

如果這里BEQ相等的話,就會直接跳到這里:

上面的是從linker到JNI_Load,說明在linker里面沒有進行操作,所以,可以換一種,直接在libdvm哪里找到JNI_onload也行;


重新使用一種方法,使用open函數(shù),往上回溯;

跳到open函數(shù),?然后F2下斷,然后F9運行,然后Ctrl+F7回溯:

同步R0窗口,出現(xiàn)這個,說明在遍歷tracepid,

繼續(xù)回溯:

繼續(xù)回溯:

為什么之前又一次運行道這里程序就崩潰了?

原因是程序此時R1寄存器的值:

這個值什么意思?

我們先把4A24轉(zhuǎn)化成10進制:18980

執(zhí)行一個adb命令:這個就是當(dāng)前as的進程;說明他當(dāng)前已經(jīng)檢測到我們在調(diào)試該程序;

所以我們需要把這個反調(diào)試干掉:

也就是說,case26就是反調(diào)試的分支;

改了之后繼續(xù)往上回溯:

繼續(xù)回溯,此時來到這個位置;

繼續(xù)?往上回溯:

此時R0和0進行比較,此時R0的值依然是as的進程號;

如果不相等,就跳轉(zhuǎn)到這里

點進去,發(fā)現(xiàn)是kill:

會來,往上p一下,是一個函數(shù),

進去:p一下:

明顯和這個就是反調(diào)試的邏輯,這個分支代碼比較多;

我們怎么修改呢,只需要讓這個函數(shù)返回固定的值即可;

修改代碼之前,先把這里置零;

同步一下反匯編窗口,點擊前面的這里會顯示下面對應(yīng)的十六進制:

這個是arm指令,

執(zhí)修改指令:第一條:

選取后8位,F(xiàn)2進行修改:

繼續(xù)修改第二條:

修改后效果:

過掉反調(diào)試后,在mmap處下斷:mmap尾部處也下一個斷點;

好,F(xiàn)9運行程序:使其在mmap處函數(shù)段下來;

這里mmap如何查看呢?至二級F9運行到mmap函數(shù)尾部,然后F7進去下一步,就是不同的函數(shù)調(diào)用的地方、遇到libdvm.so的不用管,h直接F9繼續(xù)在mmap處蹲下,只觀察jiagu.so;


注意在mmap處的操作:不能直接F9從頭部執(zhí)行尾部斷下,要單步跟一下,即將進去的so也要單步跟一半,然后在F9;

繼續(xù)執(zhí)行上面操作首先會在這里出現(xiàn)apk信息:

繼續(xù)操作,出現(xiàn)了這個:

繼續(xù):下面R0窗口出現(xiàn)了dey036;

繼續(xù)操作,這里出現(xiàn)了與dex有關(guān)的信息:

看他地址,我們來到他的區(qū)間:



過來后,這幾就是他解密后的dex

這里是這個dex文件的大?。?/p>

知道起始地址和大小后,使用腳本:

dump可能需要時間;


也就是說,出現(xiàn)相關(guān)dex文件的時候,如果沒有出現(xiàn)太多信息,我們可以ctrl+s查看模塊信息,一般他會把dex相關(guān)信息放到其他區(qū)域;


一般會把解密后的dex放到內(nèi)存里面,比如這個是放在debug里面:

好,找到dump出來的文件;

拖入jdax,這就是一些相關(guān)的代碼;

點看看一下相關(guān)的邏輯,發(fā)現(xiàn)都有,說明脫殼挺成功的

轉(zhuǎn)載請注明出處,或+3526762131

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容