【安卓逆向】360殼分析,手把手教你操作

【安卓逆向】360殼分析,手把手教你操作

先直接看這個so庫:

【安卓逆向】360殼分析,手把手教你操作

拖入IDA靜態看一下:發現看不到什麼信息,原因很簡單,因為被處理了;

【安卓逆向】360殼分析,手把手教你操作

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

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

【安卓逆向】360殼分析,手把手教你操作

識別效果:

【安卓逆向】360殼分析,手把手教你操作

頭裡面描述了有關節的信息:

【安卓逆向】360殼分析,手把手教你操作

先修改節的偏移:

【安卓逆向】360殼分析,手把手教你操作

這個三個:

【安卓逆向】360殼分析,手把手教你操作

保存之後,然後繼續拖入IDA:發現沒報異常,可以識別一些東西:

【安卓逆向】360殼分析,手把手教你操作

為什麼這樣就能成功呢?因為我們把節有關的信息去除之後,他開始解析段的信息;

看導出函數列表,發現函數名稱也是被處理過的,但是JNI_Load還是可以看到的:

【安卓逆向】360殼分析,手把手教你操作

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

【安卓逆向】360殼分析,手把手教你操作

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

【安卓逆向】360殼分析,手把手教你操作

點擊sub_1AD8:發現也沒什麼信息~

【安卓逆向】360殼分析,手把手教你操作

直接F5,看JNI_Load的信息:

【安卓逆向】360殼分析,手把手教你操作

修改一下參數:

【安卓逆向】360殼分析,手把手教你操作

點進去看一下下面的那個函數也看不出來什麼;

回到彙編窗口:

【安卓逆向】360殼分析,手把手教你操作

雙擊進去後:

【安卓逆向】360殼分析,手把手教你操作

繼續跟:

【安卓逆向】360殼分析,手把手教你操作

過來後:

【安卓逆向】360殼分析,手把手教你操作

發現是一個switch循環;

【安卓逆向】360殼分析,手把手教你操作

F5一下:

【安卓逆向】360殼分析,手把手教你操作

分支挺長的,看不出來啥;直接動態分析;

這個函數的分析,同樣的在open函數下斷:

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

【安卓逆向】360殼分析,手把手教你操作

linker處下斷:

【安卓逆向】360殼分析,手把手教你操作

libdvm下斷:

【安卓逆向】360殼分析,手把手教你操作

F9後,linker處斷下:

【安卓逆向】360殼分析,手把手教你操作

F7進去,發現沒什麼;

【安卓逆向】360殼分析,手把手教你操作

繼續F9linker斷下,然後F7:

【安卓逆向】360殼分析,手把手教你操作

F7往下走,發現有個函數:

【安卓逆向】360殼分析,手把手教你操作

進入後來到libdvm.so,與getenv有關;

【安卓逆向】360殼分析,手把手教你操作

回來後,繼續F7,這裡有個函數:

【安卓逆向】360殼分析,手把手教你操作

F7進去:往下跟:

【安卓逆向】360殼分析,手把手教你操作

過來後:

【安卓逆向】360殼分析,手把手教你操作

F7往下,這裡有個函數,

【安卓逆向】360殼分析,手把手教你操作

進去:F7往下,發現這裡是一個循環:一直比較R2和R3的值;

【安卓逆向】360殼分析,手把手教你操作

F4後F7往下走,來到了跳轉表這裡:

【安卓逆向】360殼分析,手把手教你操作

繼續F7往下,來到了case26分支:

【安卓逆向】360殼分析,手把手教你操作

一路F7往下,這裡有一個BLX函數:

【安卓逆向】360殼分析,手把手教你操作

F7往下,同步R1寄存器;發現有關鍵字眼;

【安卓逆向】360殼分析,手把手教你操作

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

【安卓逆向】360殼分析,手把手教你操作

再往下,又一個亦或循環:通過R2寄存器

【安卓逆向】360殼分析,手把手教你操作

繼續F7,

【安卓逆向】360殼分析,手把手教你操作

繼續F8往下:來到這裡:

【安卓逆向】360殼分析,手把手教你操作

繼續F7往下;這裡是一個循環,一直在讀取,然後一直比較R0的值;

【安卓逆向】360殼分析,手把手教你操作

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

【安卓逆向】360殼分析,手把手教你操作

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

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

跳到open函數, 然後F2下斷,然後F9運行,然後Ctrl+F7回溯:

同步R0窗口,出現這個,說明在遍歷tracepid,

【安卓逆向】360殼分析,手把手教你操作

繼續回溯:

【安卓逆向】360殼分析,手把手教你操作

繼續回溯:

【安卓逆向】360殼分析,手把手教你操作

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

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

【安卓逆向】360殼分析,手把手教你操作

這個值什麼意思?

我們先把4A24轉化成10進制:‭18980‬

執行一個adb命令:這個就是當前as的進程;說明他當前已經檢測到我們在調試該程序;

【安卓逆向】360殼分析,手把手教你操作

所以我們需要把這個反調試幹掉:

【安卓逆向】360殼分析,手把手教你操作

也就是說,case26就是反調試的分支;

【安卓逆向】360殼分析,手把手教你操作

改了之後繼續往上回溯:

【安卓逆向】360殼分析,手把手教你操作

繼續回溯,此時來到這個位置;

【安卓逆向】360殼分析,手把手教你操作

繼續 往上回溯:

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

【安卓逆向】360殼分析,手把手教你操作

如果不相等,就跳轉到這裡

【安卓逆向】360殼分析,手把手教你操作

點進去,發現是kill:

【安卓逆向】360殼分析,手把手教你操作

會來,往上p一下,是一個函數,

【安卓逆向】360殼分析,手把手教你操作

進去:p一下:

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

【安卓逆向】360殼分析,手把手教你操作

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

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

【安卓逆向】360殼分析,手把手教你操作

同步一下反彙編窗口,點擊前面的這裡會顯示下面對應的十六進制:

【安卓逆向】360殼分析,手把手教你操作

這個是arm指令,

執修改指令:第一條:

【安卓逆向】360殼分析,手把手教你操作

選取後8位,F2進行修改:

【安卓逆向】360殼分析,手把手教你操作

繼續修改第二條:

【安卓逆向】360殼分析,手把手教你操作

修改後效果:

【安卓逆向】360殼分析,手把手教你操作

過掉反調試後,在mmap處下斷:mmap尾部處也下一個斷點;

【安卓逆向】360殼分析,手把手教你操作

好,F9運行程序:使其在mmap處函數段下來;

【安卓逆向】360殼分析,手把手教你操作

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

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

繼續執行上面操作首先會在這裡出現apk信息:

【安卓逆向】360殼分析,手把手教你操作

繼續操作,出現了這個:


【安卓逆向】360殼分析,手把手教你操作

繼續:下面R0窗口出現了dey036;


【安卓逆向】360殼分析,手把手教你操作

繼續操作,這裡出現了與dex有關的信息:


【安卓逆向】360殼分析,手把手教你操作

看他地址,我們來到他的區間:


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

【安卓逆向】360殼分析,手把手教你操作

這裡是這個dex文件的大小:

【安卓逆向】360殼分析,手把手教你操作

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

【安卓逆向】360殼分析,手把手教你操作

dump可能需要時間;

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

一般會把解密後的dex放到內存裡面,比如這個是放在debug裡面:

【安卓逆向】360殼分析,手把手教你操作

好,找到dump出來的文件;

【安卓逆向】360殼分析,手把手教你操作

拖入jdax,這就是一些相關的代碼;

【安卓逆向】360殼分析,手把手教你操作

點看看一下相關的邏輯,發現都有,說明脫殼挺成功的;

標籤: Android逆向



分享到:


相關文章: