現在手機遊戲可說是一片血海,沒幾天就會迸出一個新的手遊預先登錄
收掉的速度也令人瞠目結舌(尤其是手遊天尊SE社,幾乎是月月推新手遊但多數營運連一年都撐不過)
這些手遊內容大多是複製成功的玩法,例如龍族拼圖LIKE、怪物彈珠LIKE、FGO LIKE、白貓LIKE...等
除了畫風不同外,內容可說是大同小異,毫無新意
甚至許多事前登錄連玩法都不說,遊戲畫面都沒有
只有各種胸部比臉大的美少女騙宅男玩家投錢,轉蛋機率各各跟FGO比低的
不過不得不說日系萌系美少女的確能吸引眼球,可說是打安全牌吧
只是角色再精美,遊戲本身無趣是無法長久留住玩家的
很多遊戲除了角色立繪外,遊戲性本身跟屎一樣
難道為了蒐集老公/老婆就必須連屎都吞下去嗎?不!
本日就介紹如何解包遊戲圖片,也作為自己的紀錄筆記

關於解包,網路上早已有不少同性質的介紹,本文只教初學者一些簡單的觀念
每個遊戲的實際作法都不同,圖片也可能經過加密等
請不要詢問我是否能幫忙解包某某遊戲或某某遊戲無法解包,請自行融會貫通

 

注意:解包對遊戲公司來說通常是違反條約的(進入遊戲時要按下同意的那個)
因此解出來的全部資源請自行蒐藏,勿隨意散播,盡量低調點
例如網頁遊戲Unlight,因為玩家拆出官方的黑資料後多次貼在論壇上,逼官方把資料加密
Sdorica在多次被爆料新角色動作模型後,也把尚未實裝的資料移除
不過解包通常也是玩家間一個炒熱度的話題,不要太過分的話官方通常也是閉一隻眼

 

※APK

把從Google Play安裝的安裝包取出的作法
最簡單的作法應該是安裝「ES檔案瀏覽器」後,選擇[程式]-[備份]

Screenshot_2018-08-01-00-28-28.jpg

程式會放到內部儲存的backups/apps目錄中

Screenshot_2018-08-01-00-36-23.png

 

APK本身是一個壓縮檔,可以直接用WinRAR等解壓縮軟體打開
部分遊戲的音樂跟一部分資源會放在此處

2018-08-01 00_27_58-Sdorica_1.1.5.apk.jpg

 

※資源包

目前大多數手遊為了節省下載時間跟方便替換資源,會在第一次執行時才下載必要資源
這些額外下載的檔案會放到內部儲存空間(internal storage)
由於權限關係可能要root過的裝置才能觀看
所以準備一個模擬器或手機,把檔案複製出來(這邊用夜神模擬器作示範)
建議勾選[開啟Root]

2018-07-31 22_34_13-.jpg

用模擬器下載該遊戲並安裝(可以找APK或用QOO下載)
進入遊戲,通常會再下載大部分資源,等待下載完成
如果無法用模擬器進入遊戲就無法使用
(某些遊戲會在抽到角色的情況下才另外下載檔案,就更加複雜,除非找到下載點否則無法下載未來檔案)

開啟檔案管理APP(最好支援ROOT),在此用ES檔案瀏覽器示範

 

遊戲下載的資料通常在以下兩個位置其一
/data/data/<package-name>
sdcard/Android/data/<package-name>

前者必須有root權限才能訪問,後者不用
要查看前者時,請記得要把超級使用者功能開啟

2018-07-31 22_35_47-Window.jpg

至於在哪一個呢?兩個地方我都看遊戲放過,通常是目錄比較大的那個
如果不清楚安裝包名稱,用修改時間由後至前排序,通常就在前面

Screenshot_2018-07-31-22-37-16.jpg

進入後通常會有files跟cache目錄,前者是APP的資料,後者是快取
把files中需要的檔案複製,貼到模擬器的共享資料夾(對應到實體硬碟位置的目錄)
如果是Unity的遊戲,資源通常放在AssetBundles

Screenshot_2018-07-31-22-39-26.jpg

如果不清楚共享資料夾的路徑,可以開啟模擬器右方的圖示觀看
一般是放在<使用者>/Nox_share

2018-07-31 22_39_45-Window.jpg

用檔案總管就能把這些檔案取出

如果遊戲本身是Unity開發(現在大部分遊戲都是用此開發了)
可以下載高手寫的AssetStudio(原名UnityStudio)(作者blog

2018-07-31 22_43_48-Window.jpg

選擇[File]-[Load folder],開啟AssetBundles目錄,會對所有檔案進行解包
根據檔案多寡會解包一段不短的時間

2018-07-31 22_51_12-AssetStudio - no productName - 2017.2.0p4 - Android.jpg

點選[Asset List],裡面就是全部能拆開的項目,通常會有音樂、圖片素材等(請看Type)
不過蒼空那時也有遇過圖片解析異常,有部分扭曲變形的情況,總之一切隨緣

2018-07-31 22_51_20-.jpg

選擇[Export]-[All assets],可以將全部資料匯出
這裡就不提供解包後的檔案了,自己動手,豐衣足食

如果匯出後是pvr格式的話更複雜(幸好不是每個遊戲都有)
目前我知道批次解包的作法可以參考這篇
下載PowerVR這個程式安裝(只需安裝PVRTexTool即可)
接著撰寫批次檔找到所有pvr檔案並轉換
以下是灰灰撰寫的一套批次檔,留作紀錄

@echo off
path %path%;"C:\Imagination\PowerVR_Graphics\PowerVR_Tools\PVRTexTool\CLI\Windows_x86_32"
for /f "usebackq tokens=*" %%d in ('dir /s /b ExtractedAssets\Texture2D\*.pvr') do (
PVRTexToolCLI.exe -f PVRTC1_4 -i "%%d" -d "%%~dpnd.png"
del "%%~dpnd.pvr"
)

 

※圖片被分成了不太正常的原圖跟只描繪外框的圖片,要如何合併?

Character_Clark_94_Middle.pngCharacter_Clark_94_Middle_Alpha.png

這樣的圖片是為了支援Unity的透明貼圖功能,說明可參考這篇
想得到漂亮的合併圖,比較建議的作法是寫個程式去合併兩者
範例語法如下,產生一個畫布並根據兩張圖片的RGB值組合成新圖片
藍色文字為自訂變數,選擇來源檔名跟儲存檔名

            var alphaBitmap = new Bitmap(alphaFileName);
            var sourceBitmap = new Bitmap(sourceFileName);

            var result = new Bitmap(sourceBitmap.Width, sourceBitmap.Height);
            for (int i = 0; i < result.Width; i++)
            {
                for (int j = 0; j < result.Height; j++)
                {
                    result.SetPixel(i, j, Color.FromArgb(alphaBitmap.GetPixel(i, j).R, sourceBitmap.GetPixel(i, j)));
                }
            }
            result.Save(newFileName, System.Drawing.Imaging.ImageFormat.Png);

clark.png

 

※程式要怎麼解包?

還記得剛剛files目錄中有個il2cpp,這是Unity中使用il2cpp選項編譯出的程式
Unity開發的程式一般都是使用C#,所以可以用ILSpy等.NET反組譯工具打開dll
不過裡面程式都已經被混淆,非常難反組譯
我試過还原使用IL2CPP编译的unity游戏的symbol這篇介紹也是失敗收場
所以...有圖就好

文章標籤
創作者介紹
創作者 蕭雲 的頭像
蕭雲

正因為活著

蕭雲 發表在 痞客邦 留言(0) 人氣()