成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

如何防止Unity3D代碼被反編譯?

voyagelab / 2509人閱讀

摘要:網(wǎng)易云易盾移動(dòng)游戲安全技術(shù)專家陳士留在年技術(shù)路演演講內(nèi)容中對(duì)這個(gè)問題有過比較詳細(xì)的介紹,摘錄如下防止代碼被反編譯其實(shí)就是常見的手游風(fēng)險(xiǎn)中的破解風(fēng)險(xiǎn)。

歡迎訪問網(wǎng)易云社區(qū),了解更多網(wǎng)易技術(shù)產(chǎn)品運(yùn)營(yíng)經(jīng)驗(yàn)。

網(wǎng)易云易盾移動(dòng)游戲安全技術(shù)專家陳士留在2018年Unity技術(shù)路演演講內(nèi)容中對(duì)這個(gè)問題有過比較詳細(xì)的介紹,摘錄如下:

防止Unity3D代碼被反編譯其實(shí)就是常見的Unity手游風(fēng)險(xiǎn)中的破解風(fēng)險(xiǎn)。

一、Unity面臨的破解風(fēng)險(xiǎn)

Unity的破解風(fēng)險(xiǎn)主要有Unity mono腳本解密、Unity il2cpp腳本解析、Assetbundle資源篡改這三項(xiàng)。

1.Unity mono腳本解密:

以下兩張圖為mono腳本文件的二進(jìn)制形式及源碼轉(zhuǎn)換。

2.Unity il2cpp腳本解析:

以libil2cpp.so和global-metadata.dat作為輸入,使用Il2CppDumper即可進(jìn)行解析:

解析出來的效果如下所示,類名、函數(shù)名以及對(duì)應(yīng)的偏移都能夠被解析出來:

目前iOS中還沒有能夠解析為源碼的工具,但是如果可以解密或解析Android腳本,將會(huì)大大方便iOS的破解。因此Android的有效腳本加密非常有必要。

3.Assetbundle資源篡改:

透視功能可讓使用修改版的玩家獲取不對(duì)稱優(yōu)勢(shì)。如下所示的某槍擊游戲,將其中Assetbundle資源里面的材質(zhì)屬性修改為透明,即可達(dá)到透視的效果。

除了資源被篡改的風(fēng)險(xiǎn)外,游戲中還存在資源被競(jìng)品盜取、分析的風(fēng)險(xiǎn)。

4.存檔數(shù)據(jù)被修改

某些游戲存檔數(shù)據(jù)以明文形式存在,如果這些數(shù)據(jù)不去服務(wù)端校驗(yàn),或者是單機(jī)游戲的話,則存在巨大的安全風(fēng)險(xiǎn),游戲的各種屬性可以直接修改。

如何保護(hù)Unity安全?很多開發(fā)團(tuán)隊(duì)可能也有自己開發(fā)加固保護(hù)系統(tǒng)的打算,如果要做好這套保護(hù)系統(tǒng),需要解決很多問題,主要包括以下四個(gè):

第一、保護(hù)方案自研成本比較高,需要不斷調(diào)研、不斷改進(jìn),不但需要了解破解流程,還需要深度掌握Unity引擎的運(yùn)行原理。

第二、安卓的兼容性問題,安卓設(shè)備碎片化嚴(yán)重,系統(tǒng)版本升級(jí)、用戶環(huán)境多樣化。需要不斷完善解決方案。網(wǎng)易在這一塊積累了很長(zhǎng)時(shí)間,才開發(fā)出一套在性能、兼容性和安全強(qiáng)度都滿足的保護(hù)方案。如果游戲開發(fā)團(tuán)隊(duì)自研,兼容性會(huì)占用團(tuán)隊(duì)大量時(shí)間,降低游戲核心邏輯開發(fā)速度。

第三、對(duì)于破解來說,本身保護(hù)工作是一個(gè)矛和盾的過程,是不斷升級(jí)和不斷對(duì)抗的過程。如果游戲開發(fā)團(tuán)隊(duì)要去自研保護(hù)系統(tǒng),需要分析市面上的破解工具,并不斷分析他們破解的方法,然后才能不斷提高整個(gè)保護(hù)系統(tǒng)強(qiáng)度。

第四、第三方服務(wù)的兼容性,游戲現(xiàn)在越來越是一個(gè)精細(xì)化開發(fā)的模式,很多游戲團(tuán)隊(duì)只做一些核心的邏輯玩法的開發(fā),所以保護(hù)就需要兼容支付模塊、熱更新方案及質(zhì)量跟蹤等各種第三方服務(wù)。而兼容這些第三方的服務(wù),又給游戲開發(fā)團(tuán)隊(duì)帶來了很大的挑戰(zhàn)。

綜上所述,如果游戲開發(fā)團(tuán)隊(duì)自主開發(fā)保護(hù)方案肯定會(huì)面臨很大技術(shù)和資金挑戰(zhàn),所以不建議自主開發(fā)保護(hù)方案。

二、那么易盾是怎么防止Unity3D代碼被破解的呢?

網(wǎng)易云易盾能夠提供Unity mono DLL腳本加密、IL2CPP 加密、Assetbundle加密等加密解決方案!

通過修改或者HOOK mono_image_open_from_data_with_name能夠?qū)LL腳本加解密。mono_image_open_from_data_with_name是CSharp 腳本的加載函數(shù),如果CSharpDLL腳本做了加密,需要在這個(gè)函數(shù)執(zhí)行之前解密。因此只要在這個(gè)函數(shù)這里下斷點(diǎn)或者HOOK,就可以解密出原始DLL,而不需要逆向加密算法。需要注意的是,這里有個(gè)memcpy拷貝操作,mono會(huì)把解密后的DLL在內(nèi)存中留存一份拷貝。

Unity mono DLL腳本加密經(jīng)歷了三代的技術(shù)演進(jìn)。

第一代加密直接對(duì)DLL文件進(jìn)行加密,在mono_image_open_from_data_with_name函數(shù)開始處解密。對(duì)于這個(gè)的破解方法很簡(jiǎn)單,PE結(jié)構(gòu)的文件,以4d 5a90 00這四個(gè)字節(jié)為magic head,這可以做為CSharp DLL腳本的特征,只要搜索0x905a4d這個(gè)數(shù)值就可以了,由于燒餅修改器是使用10進(jìn)制數(shù)值,將其轉(zhuǎn)換成10進(jìn)制值:9460301。因此解密門檻很低,只要使用修改器就可以解密。

第二代加密基于第一代加密的明顯弱點(diǎn),針對(duì)解密加強(qiáng)了防護(hù)。解密后,把下圖所示的PE頭抹掉,使得修改器無法定位到腳本位置。因此解密門檻比較高,需要非常強(qiáng)的逆向開發(fā)能力才能破解。

第三代加密針對(duì)Csharp 函數(shù)做了加密,也就是方法級(jí)加密,需動(dòng)態(tài)解密。

原始未加密dnspy函數(shù)解析結(jié)果

函數(shù)加密后dnspy函數(shù)解析報(bào)錯(cuò)

IL2CPP加密

Il2cpp腳本信息以lib2cpp.so形式存在,結(jié)合global-metadata.dat文件內(nèi)的符號(hào)信息,即可進(jìn)行解析,因此需要對(duì)libil2cpp.so做so加殼,如下圖所示,原始libil2cpp.so用IDA可以看到475個(gè)導(dǎo)出函數(shù):

加固后的libil2cpp.so導(dǎo)出函數(shù)則為空:

Assetbundle加密

Assetbundle未加密時(shí),Unity Studio可解析出各種資源:

對(duì)Assetbundle加密后,Unity Studio就無法解析了:

三、易盾保護(hù)方案特點(diǎn)

網(wǎng)易易盾保護(hù)方案具有純Native保護(hù)、對(duì)引擎SO做加殼、兼容性和穩(wěn)定性高、性能影響小、支持Windows、Linux、Mac三平臺(tái)加固等性能特點(diǎn)。

1.純Native保護(hù)

游戲dex內(nèi)部都是第三方SDK以及游戲內(nèi)部不涉及到游戲邏輯的SDK。如果對(duì)DEX加殼的話,一方面容易造成Android碎片化,導(dǎo)致dex加殼會(huì)降低app的兼容性;另外Android存在Dalvik和Art兩種虛擬機(jī),所以dex加殼會(huì)為了兼容2種虛擬機(jī)而增加處理成本,從而導(dǎo)致啟動(dòng)耗時(shí)增加比較厲害。阿里和騰訊都有DEX加殼服務(wù),但是支付寶、微信都沒做DEX加殼。支付寶和微信的安全問題應(yīng)該是所有APP中間最嚴(yán)重的,他們都沒做DEX加殼,這很能說明問題,此外所有騰訊的游戲都沒有做DEX加殼。所以如果手游保護(hù)需要依賴于DEX加殼的話,兼容性和安全性都是很難保證的。因此建議游戲不要使用DEX加殼。

網(wǎng)易易盾可以提供純Native保護(hù),使游戲保護(hù)不依賴DEX加殼。DEX加殼和純Native保護(hù)優(yōu)缺點(diǎn)比較如下:

2.對(duì)引擎SO做加殼

基本上所有的破解都依賴于對(duì)引擎so的逆向分析,如果對(duì)so進(jìn)行了加殼保護(hù),會(huì)大大增加游戲被破解的門檻。除了對(duì)引擎SO加殼,網(wǎng)易易盾還會(huì)對(duì)敏感函數(shù)代碼做校驗(yàn)。

3.兼容性和穩(wěn)定性高

兼容強(qiáng)的原理在于所有保護(hù)都在SO層,不會(huì)對(duì)DEX進(jìn)行修改,有效避免了Android碎片化導(dǎo)致的兼容問題。網(wǎng)易易盾的兼容性極高,可以兼容從Android 2.3到Android 9.0所有版本系統(tǒng)、所有模擬器以及所有游戲引擎使用的指令集。

手游保護(hù)的穩(wěn)定性,需要遵循如下發(fā)布流程:

QA測(cè)試:在200臺(tái)手機(jī)上以及各種模擬器上測(cè)試;

預(yù)線上測(cè)試:將安全模塊集成到日活1000的APP上線測(cè)試2周;

版本發(fā)布:前面2輪都測(cè)試穩(wěn)定后,正式發(fā)布;

線上回歸:先在內(nèi)部比較小的游戲上線測(cè)試,確保穩(wěn)定性。

4.性能影響小

易盾保護(hù)方案還具有性能影響小的特點(diǎn),無論是CPU占用、內(nèi)存占用、啟動(dòng)時(shí)間、電量消耗等方面的影響幾乎都可忽略不計(jì)。

陳士留演講全文請(qǐng)點(diǎn)擊這里查看。

可點(diǎn)擊查看網(wǎng)易云易盾手游加固保護(hù)介紹及免費(fèi)試用。

文章來源: 網(wǎng)易云社區(qū)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/25297.html

相關(guān)文章

  • 一個(gè)激活碼泄露事故的發(fā)現(xiàn)過程和反思

    摘要:發(fā)現(xiàn)分析資源文件的過程中,發(fā)現(xiàn)了一個(gè)數(shù)據(jù)庫(kù)。激活碼明碼保存。激活碼的發(fā)布和驗(yàn)證分開激活碼的發(fā)布由項(xiàng)目負(fù)責(zé)將激活碼明文交由發(fā)布渠道,如印刷或其他銷售渠道。這樣即使激活碼數(shù)據(jù)庫(kù)被泄露也不怕其用來被激活。 本文隱去了公司名、人名、應(yīng)用名、以及應(yīng)用特征等敏感信息。 本文作者@CuGBabyBeaR 0、背景和事先分析 前段時(shí)間看見一個(gè)能夠和現(xiàn)實(shí)進(jìn)行交互的應(yīng)用,覺得挺有意思,恰巧有一個(gè)下午...

    antz 評(píng)論0 收藏0
  • 將 exe 文件反編譯成 Python 腳本

    摘要:打包成單文件所使用的命令為打包成文件夾所使用的命令為不管是哪種打包方式都會(huì)留下一個(gè)文件。這樣我們只需將腳本文件和腳本文件放置到同一文件夾下,運(yùn)行我們的腳本。可以看到已經(jīng)完美的反編譯出其中的腳本好了,相信大家已經(jīng)明白了反編譯的原理。 近期閱讀了一篇很感興趣的文章,為免后續(xù)文章被刪無法再閱讀,現(xiàn)...

    xbynet 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

voyagelab

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<