安卓逆向--360殼過反調試+dump dex文件以及簡單修復

【安卓逆向】360殼過反調試+dump dex文件以及簡單修復


mmap函數下段,然後F9運行斷下,然後F8往下,一直運行到這裡:

安卓逆向--360殼過反調試+dump dex文件以及簡單修復

F7進來,在R2寄存器這裡打一個斷點:

安卓逆向--360殼過反調試+dump dex文件以及簡單修復

F9運行到這裡,然後F7進來;

安卓逆向--360殼過反調試+dump dex文件以及簡單修復

F8往下走,這裡有比較指令:

安卓逆向--360殼過反調試+dump dex文件以及簡單修復

這個函數的返回值在R0裡面存儲,(可以直接把光標放在cmp那條指令然後F4跳過去 )

安卓逆向--360殼過反調試+dump dex文件以及簡單修復

把R0置零:

安卓逆向--360殼過反調試+dump dex文件以及簡單修復

置零之後呢,F9:

安卓逆向--360殼過反調試+dump dex文件以及簡單修復

再一次F8:繼續在mmap函數末尾斷下,然後繼續F8:來到這裡:

安卓逆向--360殼過反調試+dump dex文件以及簡單修復


緊接著F9,繼續來到mmap


安卓逆向--360殼過反調試+dump dex文件以及簡單修復

然後繼續F8:發現還是libc.so,繼續F9,然後F8,直到來到libjiagu.so:

(注意,這是第二處反調試的點,雖然後邏輯代碼和第一處的一樣,但是是不同的區段,所以還需要進去看看是不是上一次哪兩個下斷的函數,不要直接f9,以為和第一次一樣,不一樣!)

安卓逆向--360殼過反調試+dump dex文件以及簡單修復


繼續F8往下,來到這裡:

安卓逆向--360殼過反調試+dump dex文件以及簡單修復

然後F9在這裡斷下:

然後F7進去,然後F9在這個 LR 處斷下,

安卓逆向--360殼過反調試+dump dex文件以及簡單修復


然後F7進去:進去後一路F8,繼續來到cmp比較指令,

安卓逆向--360殼過反調試+dump dex文件以及簡單修復

繼續修改上面函數的返回值R0寄存器的值;從而過掉反調試

安卓逆向--360殼過反調試+dump dex文件以及簡單修復

直接置零即可;

安卓逆向--360殼過反調試+dump dex文件以及簡單修復

修改後,繼續F9:在mmap函數處斷下:

安卓逆向--360殼過反調試+dump dex文件以及簡單修復

同樣的,繼續往下走,來到libjiagu.so,來時和上面一樣,來到這裡比價的地方:這是第三次修改R0 和cmp處比較:

安卓逆向--360殼過反調試+dump dex文件以及簡單修復

繼續F9,在mmap函數處斷下,然後在函數頭位置下一個斷點;然後ctrl+S,可以看一下各個區段:

安卓逆向--360殼過反調試+dump dex文件以及簡單修復

到這裡,已經三次反調試的點已經過去了,現在要做的,就是找到棧去存放dex文件的地方;

在mmap函數的函數頭和函數尾部分別下斷點,尾部斷下後,直接F9運行,在頭部斷下,然後F8單步,一直單步到函數尾部,時刻觀察棧窗口;

在棧區發現:

安卓逆向--360殼過反調試+dump dex文件以及簡單修復

此時同步R0寄存器,一直單步,知道十六進制彙編窗口出現dex文件;也就是執行完上面這個函數;

安卓逆向--360殼過反調試+dump dex文件以及簡單修復

觀察dex的區域:

安卓逆向--360殼過反調試+dump dex文件以及簡單修復

我們ctrl+s找到該區域跳過來看一下:在zero這個區域裡面;

安卓逆向--360殼過反調試+dump dex文件以及簡單修復

解密後的數據就放在這個區域,也就是R4寄存器存放的值;

安卓逆向--360殼過反調試+dump dex文件以及簡單修復

這個dex文件的大小就是:19837C

安卓逆向--360殼過反調試+dump dex文件以及簡單修復

也就是此時R4和R5寄存器的值;

安卓逆向--360殼過反調試+dump dex文件以及簡單修復

接下來,我們用腳本來dump一下;

修改起始地址和大小

安卓逆向--360殼過反調試+dump dex文件以及簡單修復

然後點擊run運行即可;

安卓逆向--360殼過反調試+dump dex文件以及簡單修復

打開壓縮包,然後丟進去替換;

安卓逆向--360殼過反調試+dump dex文件以及簡單修復

把安裝包使用androidkiller進行反編譯,在xml裡面修改這兩個屬性:

安卓逆向--360殼過反調試+dump dex文件以及簡單修復

然後保存,回編

深入瞭解學習諮詢vx:15772466640


分享到:


相關文章: