0x1.統(tǒng)籌看逆向
本文內(nèi)容主要統(tǒng)籌的介紹一下多數(shù)游戲破解及增加驗(yàn)證的流程,,也就是多數(shù)外掛制作及售賣者的制作思路,。
---------------------------------------------(本文不涉及具體方法,只做簡單介紹)
為了方便理解,,我給大家畫了一張圖,,如下:
根據(jù)圖片,,我們將這個逆向到最終的加驗(yàn)證打包分為四大部分,,分別為 反編譯,、解密,、加密、驗(yàn)證,。
1.反編譯
這里的反編譯主要是指的對apk的逆向和修改,,而逆向過程中的解密過程,,由于比較多樣和復(fù)雜,,則單獨(dú)拿了出來,。
apk的修改在這里主要介紹三種層次,JAVA層修改,、SO層修改,、U3D游戲dll腳本修改,。
1.1 JAVA層修改
apk的逆向目前普遍采用的工具是Android Killer,,反編譯完成后,對于java層的修改主要依賴smali語法,,即Dalvik虛擬機(jī)語言,。
1.2 SO層修改
SO層的分析和修改主要依賴的工具是IDA以及16進(jìn)制編輯器,,會用到匯編語法。
1.3 dll修改
U3D的dll為.NET框架,,均為C#語言編寫,,分析和修改主要依賴Reflector等.NET工具,會用到C#語言及其中間語言il,。
2.解密
解密過程其實(shí)同樣也分為上述三種,,不過這里我們暫不把so的解密或者修復(fù)放進(jìn)來,,只介紹另外兩點(diǎn),。
2.1 JAVA層解密
這個就是我們最經(jīng)常聽到和見到的脫殼,主要輔以靜態(tài)分析和動態(tài)調(diào)試來解決,。
2.2 dll解密
dll的解密主要是分析libmono.so文件,如果加密很簡單還可以直接在編輯器中分析dll文件,,如果需處理文件較多,有時需要自己編寫解密工具,。
同時dll文件除了解密,有時還會涉及到文件結(jié)構(gòu)的修復(fù),,比如DOS頭,PE頭,,NT頭,,Metadata Dictionary等等,。
3.加密
加密部分主要針對dll,,因?yàn)槿绻麕Ъ用芎瘮?shù)的libmono.so我們不做修改或者變更的話,,一般情況下,解密修改完后的dll我們需要加密回去才能讓apk正常運(yùn)行。
這個加密過程我們可以根據(jù)解密函數(shù)對應(yīng)的寫出加密工具,,或者針對簡單的加密直接在編輯器中完成。
4.驗(yàn)證
在修改或者有時候必需的加密完成之后,,apk可以正常運(yùn)行了,,這時外掛制作者通常會對apk進(jìn)行加密以及增加驗(yàn)證來保證自己的利益,。
這種驗(yàn)證分為本地驗(yàn)證和網(wǎng)絡(luò)驗(yàn)證。
4.1 本地驗(yàn)證
無論是哪種驗(yàn)證,,都會取apk運(yùn)行設(shè)備的信息或其他可作為唯一識別碼的信息,,然后加以運(yùn)算,得到一個對應(yīng)的碼,,
這個對應(yīng)的碼就是我們熟知的激活碼,,一方面可以保證被惡意傳播,另一方面可以保證自己的某些利益,,這里就不具體解釋了。
4.2 網(wǎng)絡(luò)驗(yàn)證
本地驗(yàn)證固然方便,,但是也有弊端,,就是不可控,所以很多人轉(zhuǎn)為進(jìn)行網(wǎng)絡(luò)驗(yàn)證來控制使用,,可以實(shí)時控制apk的使用情況,。
====>>>>
不管是哪一個過程,修改基本都在java,,so,,dll中進(jìn)行,分析方式也都是靜態(tài)分析和動態(tài)調(diào)試,,本文主要是讓新手對于逆向有個統(tǒng)籌的了解,。