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