一、 殼是什么東西
Android上的應用安裝文件是apk格式的,這個apk文件其實就是個歸檔文件壓縮包,把應用相關的源碼、資源文件、配置文件等等亂七八糟的東西都簡單粗暴的歸檔打包,直接解壓之后就能得到app的dalvik指令集dex文件,然后再反編譯為smali,還可以再反編譯為Java,這樣就幾乎等同於拿到了app就能拿到可讀性還蠻清晰的源碼,導致逆向破解的門檻幾乎很低,有手點點鼠標就行,門檻之低像我這樣的阿貓阿狗都可以搗鼓逆向了 :)
沒有做防范措施的app幾乎等同於在裸奔,因此后來演變出來一些保護措施,這是從PC端的逆向攻防中得到的啟示方案,就是在apk外面再套一層殼,在運行的時候這層殼才會把真正的apk的dalvik指令集釋放出來,為apk加殼是目前主流的防護方案。
為了培養開發者的安全意識,現在很多應用平台都是要求開發者在上傳應用之前要先加固,很多應用平台也提供了自己的加固方案,開發者也可以自行研究加殼方案,對於開發者來說,為apk文件加殼是一件非常簡單的事情,所以現在市面上的應用大部分都是被加過殼的,但是對於逆向者來說,真正的源碼是隱藏在殼之下的,要想拿到源碼研究其邏輯就要先想辦法將殼脫掉,所以我們拿到一個apk要逆向的第一步就是用查殼工具看下這個apk文件是否加殼,以及加了什么殼,然后想辦法把殼脫掉,拿到dex文件再去分析。查殼工具其實是有很多的,知道原理我們自己也可以寫,只是沒什么必要,本篇文章就是介紹一個查殼工具PKID。
二、 PKID的下載
PKID有兩個版本,最開始是只有Windows版本的,后來有位大佬用Mac,覺得每次用的時候都要開虛擬機太麻煩了於是寫了個Java版的,讀者請根據自己的情況下載不同的版本。
https://www.secpulse.com/archives/68886.html
Windows版下載地址:https://www.jb51.net/softs/603472.html#downintro2
Java版的看雪論壇下載地址:https://bbs.pediy.com/thread-225120.htm
三、 PKID的使用
Windows版的:
直接拖動apk文件到窗口上松開:
PKID的使用非常簡單,只需要將apk拖放到窗口上松開即可,比如下面是查殼識別結果,這個游戲app用了360的殼:
查殼是我們破解一個app的第一步,通常情況下我們要先知道一個app有沒有加殼,加了什么殼要找到對應的脫殼方法,想辦法得到真正的源碼之后才開始分析源碼開始破解。
四、 識別原理簡介
對於加了殼的apk,包里面會有一些符合特定特征的文件,比較簡單的方式就是通過檢測apk是否符合這些特征,當然隨着各大加固平台不斷的迭代,其特征也可能會不斷的迭代。
我們只需要知道大概原理就可以了,常見的特征判斷是判斷lib下是否存在特定的so文件,比如看雪上有人總結過的:
https://bbs.pediy.com/thread-223248.htm