某訊的手遊保護系統用的都是一套,在其官宣的手遊加固功能中有一項宣傳是對比較熱門的Unity3d引擎的手遊保護方案,其中對Dll檔案的保護介紹如下, “Dll加固混淆針對Unity遊戲,對Dll模組的變數名、函式名、類名進行加密混淆處理,有效提高靜態分析門檻”。
通過動態分析了它的保護方法,通過改原始碼刷機的方法繞過了它的保護方案(也可通過hook libc.so中的execve函式繞過保護),接下來就可以直接使用GameGuardain這個神奇附加上去進行各種騷操作了。這裡主要講一下如何去從記憶體中獲取Assembly-CSharp.dll 和 Assembly-CSharp-fristpass.dll檔案。
繞過保護後,先啟動GameGuardian,再啟動相關遊戲,在某訊的Logo剛好出現時附加到遊戲上,待遊戲進入到登入頁面時,通過記憶體搜尋值的方式搜尋9460301(0x4D 5A 90 00)的十進位制表示方式。這也是PE檔案Dos頭的特徵碼。搜尋步驟和結果如下:
記錄下第一個值和最後一個的值,接下來的dump步驟需要(dump時,開始地址儘量比第一個值小,結束地址儘量比最後一個地址大,上下浮動的大小盡量大於遊戲中最大的Dll檔案所佔記憶體大小)。
等待儲存完畢以後就可以從手機上拉取到本地了。獲取到檔案的結果如下:
接下來可直接使用get_dll_from_bin.exe這個工具直接從所有的bin檔案中dump出所有的dll檔案。操作後可用dnSpy直接開啟所有的dll檔案檢視是否存在Assembly-CSharp.dll和Assembly-CSharp-fristpass.dll這兩個檔案。結果下圖(本次獲取到12個dll 檔案):
工具獲取到dll後直接使用數字命名,直接通過dnspy開啟看看是否有最終的目標dll。
獲取到dll如下:
並不存在所需要獲取的dll檔案。後面經過分析可知這套保護方案把Dos頭的前128位元組清空了。接下來就需要單個檔案進行操作和修復了,使用010editor開啟檔案,搜尋PE頭的檔案特徵(50 45 00 00 4c 01 03 00)。然後通過搜尋到的位置往前檢視128位元組是否被清零,如果是先把正常的pe檔案的前128個位元組複製,再往搜尋到的位置的往前128位元組進行貼上修復即可。如圖:
經過反覆操作和修復後,再通過get_dll_from_bin.exe操作修復的bin檔案即可。
經過操作後獲取到如下的Dll:
通過與解包後的資原始檔大小相比較,3.dll大小和Assembly-CSharp.dll相同。
12.dll大小和Assembly-CSharp-firstpass.dll相同。
分別將3.dll 和12.dll檔案拖入dnspy中,如圖所示3.dll是目標檔案Assembly-CSharp.dll:
12.dll是Assembly-CSharp-fristpass.dll:
到此,所有目標檔案已經獲取完畢。
原文作者:nsec(看雪ID)
原文連結:https://bbs.pediy.com/thread-246468.htm
轉載請備註:轉自看雪論壇
看雪推薦閱讀:
1、[原創]小白文——好玩不貴的無線遙控器克隆指南
2、[翻譯]核心模式Rootkits:檔案刪除保護
3、[翻譯]國外2018最新區塊鏈教程英文版,大膽翻譯,助力論壇『區塊鏈安全』開設第四棒!
4、[原創]看雪安全峰會—《從WPA2四次握手看KRACK金鑰重灌攻擊》
5、[原創]2018看雪CTF第十五題WP