0x1.統(tǒng)籌看逆向

0x1.統(tǒng)籌看逆向


本文內(nèi)容主要統(tǒng)籌的介紹一下多數(shù)游戲破解及增加驗(yàn)證的流程,也就是多數(shù)外掛制作及售賣(mài)者的制作思路。
                                                                                                                 ---------------------------------------------(本文不涉及具體方法,只做簡(jiǎn)單介紹)
為了方便理解,我給大家畫(huà)了一張圖,如下:

根據(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層的修改主要依賴(lài)smali語(yǔ)法,即Dalvik虛擬機(jī)語(yǔ)言。
1.2 SO層修改
SO層的分析和修改主要依賴(lài)的工具是IDA以及16進(jìn)制編輯器,會(huì)用到匯編語(yǔ)法。
1.3 dll修改
U3D的dll為.NET框架,均為C#語(yǔ)言編寫(xiě),分析和修改主要依賴(lài)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īng)到和見(jiàn)到的脫殼,主要輔以靜態(tài)分析和動(dòng)態(tài)調(diào)試來(lái)解決。
2.2 dll解密
dll的解密主要是分析libmono.so文件,如果加密很簡(jiǎn)單還可以直接在編輯器中分析dll文件,如果需處理文件較多,有時(shí)需要自己編寫(xiě)解密工具。
同時(shí)dll文件除了解密,有時(shí)還會(huì)涉及到文件結(jié)構(gòu)的修復(fù),比如DOS頭,PE頭,NT頭,Metadata Dictionary等等。

3.加密
加密部分主要針對(duì)dll,因?yàn)槿绻麕Ъ用芎瘮?shù)的libmono.so我們不做修改或者變更的話(huà),一般情況下,解密修改完后的dll我們需要加密回去才能讓apk正常運(yùn)行。
這個(gè)加密過(guò)程我們可以根據(jù)解密函數(shù)對(duì)應(yīng)的寫(xiě)出加密工具,或者針對(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)籌的了解。
?