1. 程式人生 > >脫殼練習(1)-360加固2,3代脫殼心得簡記

脫殼練習(1)-360加固2,3代脫殼心得簡記

這篇部落格就記一下自己脫360加固2,3代的過程吧。畢竟作為一個android逆向入門小菜完全靠自己脫殼是不大現實,事實上也是借鑑了不少大佬們的部落格,當然碰到了可遇而不可求的一代殼的話那是當然要垂死掙扎,好好搞明白,總要由簡入深,在此基礎當初當然是ida的動態除錯了,詳細請參看上篇部落格脫殼練習(0)-動態除錯1代脫殼

因為是參照網上資料做出來的,所以就簡單寫下心得吧

360二代脫殼

也按照此教程順利脫殼,感謝大大。也簡單說下自己的思路吧 1.360-2代殼子最重要的就是mmap函式,通過mmap函式讀取反除錯檔案,以及對映dex到記憶體,但是此文中一開始就在mmap下斷點,會在剛開始多次斷在該函式下,不如在目標so-libjiagu載入後,也就是一開始斷在linker後再下斷點,可節省時間。 2.在程序正常執行過程中,一般在記憶體中為檔案分配地址後不會輕易改變,這也是在經過mmap函式分配地址後要時刻緊跟目標地址達到脫殼的原因。 3.在查詢反除錯時,應該密切注意BL  CMP指令的組合,當然這也是日常逆向應該格外關注的。 4.在剛開始按照次方法進行脫殼時,在檢測Tracerid的地方下了斷點,也因此不正常退出,這是因為多次檢測Tracerid的位置並不是一成不變的,按照前兩次檢測Tracerid的地方下好斷點,但是進入下一輪之後雖然流程幾乎不變,但是地址稍微變了變,提前下好斷點導致恢復時產生崩潰(這是本菜的理解,有不正確的地方請斧正

360三代脫殼

3代殼子也是最近才開始嘗試進行脫殼的,也是才剛剛可以拿到dex,看到native onCreate 望而卻步,有時間慢慢看吧(大概是有點不自量力吧),但是已經開始為自己能做到這一步有點沾沾自喜,也來簡單總結一下這其中的過程。 在此主要借鑑了 1.第一處當然是過反除錯了,文章中說的很明白了,主要是在case 29 blx lr下斷點。 2.當我們順利過了反除錯,就是進入第二個so,真正dex進行解密的地方。在case 33處呼叫瞭解壓函式uncompress,第一個引數是地址,第二個引數是存放長度的地址,dump下來就是我們的解密so了。新增一下elf檔案的魔術字,就可以借用ThomasKing大神的so修復工具進行section的修復了。
3.拿到了目標so然後ida就可以正常開啟,去分析解密的過程,自然脫殼就不成問題,但是看著都花眼的指令實在是有心無力,看來還是對指令集不夠熟悉,是時候去強化一波,學習嘛,一次不夠就兩次,多多益善。既然如此我們只好先嚐試第一種dump dex的方式。但是。。。我的樣本並不是在最後一個debug段中找到目標dex的,也很合理,版本不同,所執行的實際位置不同,記憶體裡又怎麼如此相同呢,不過肯定在的,在附近debug段找了找,終於順利找到想要的dex。