1. 程式人生 > >提取手機遊戲資源 特效 顯存分析工具 無視任何加密

提取手機遊戲資源 特效 顯存分析工具 無視任何加密

參考 手機助手 save pan 貼圖 plist 技術 -s and

step.1 準備工具

1.adb連接工具(我用的cofface adb )

【cofface】adb基於最新安卓源碼編譯修改,兼容其它助手,增加參數,支持識別所有機型

工具詳情:http://blog.cofface.com/archives/569.html

下載地址:http://pan.baidu.com/s/1qX3XQDA

2.Adreno Profiler 基於硬件層面查看內存貼圖

所有有些團隊為了避免別人提取所以對資源進行了加密,最近又發現了一個神器基於硬件層面查看內存貼圖,這樣就直接無視對方加密了

工具詳情:https://developer.qualcomm.com/software/adreno-gpu-profiler

下載地址:https://developer.qualcomm.com/software/adreno-gpu-sdk/tools

3.TexturePacket和還原工具

Anti_TexturePacker 或者 unpack_plist.py

step.2 鏈接手機

利用adb來連接手機有兩種方式: 1, wifi, 2, usb.

1. 通過wifi, 利用adb來連接手機。在pc的cmd中輸入命令: adb connect 192.168.1.100 如果電腦連不上安卓手機可以試試這個【cofface】adb基於最新安卓源碼編譯修改,兼容其它助手,增加參數,支持識別所有機型

ps:使用adb devices命令,老是報error:device offline的錯誤。

剛開始報error:devices not found

重新安裝adb 驅動。

解決方法:

adb kill-server

adb start-server
 
adb remount

再使用adb devices和adb shell就可以使用android adb功能了。

step.3 查看顯存貼圖

Adreno Profiler分析任意安卓遊戲特效抓取資源,可以用來分析安卓手機上OpenGL ES繪制過程。這個東西牛的地方在於可以抓取任何可以運行的App,而且使用起來非常方便、沒有額外限制。這個工具本質上是一個OpenGL ES Draw Call Replay;如果你用過PIX或者GPA,就會感到很非常熟悉了。

由於這個工具是高通提供的,所以只能運行在高通芯片的安卓機上。為什麽要強調這一點呢?其實其他廠商也有類似工具,但是從使用限制、方便程度上來說差太多了: iOS可以用XCode自帶的Frame Capture,但是這貨用起來很不順手,而且沒法抓取第三方應用。其他安卓廠商也有類似的工具,例如Mali Graphics Debugger,但是使用起來比較麻煩,譬如需要越獄、上傳so到系統目錄之類的。下面將具體介紹其使用

最近發現了一個非常好用的工具Adreno Profiler,可以用來分析安卓手機上OpenGL ES繪制過程。這個東西牛的地方在於可以抓取任何可以運行的App,而且使用起來非常方便、沒有額外限制。這個工具本質上是一個OpenGL ES Draw Call Replay;如果你用過PIX或者GPA,就會感到很非常熟悉了。下圖是貴易的魔天記,掛起來毫無壓力233

技術分享圖片

由於這個工具是高通提供的,所以只能運行在高通芯片的安卓機上。為什麽要強調這一點呢?其實其他廠商也有類似工具,但是從使用限制、方便程度上來說差太多了:

iOS可以用XCode自帶的Frame Capture,但是這貨用起來很不順手,而且沒法抓取第三方應用。
其他安卓廠商也有類似的工具,例如Mali Graphics Debugger,但是使用起來比較麻煩,譬如需要越獄、上傳so到系統目錄之類的。
下面將具體介紹其使用,然後用兩個例子來講解,一個是抓取分析聚爆Implosion的特效繪制,另一個是用來做cocos2d-x圖形性能優化。

ps. 我習慣說Draw Call(DC),工具裏是Render Call,下文會混用...

環境配置
軟件配置
下載Adreno Profiler並安裝,需要註意以下幾點:

Adreno SDK不是必須的,可以無視;
雖然Adreno Profiler提供了跨平臺版本,但這貨貌似是c#的,我嘗試在OSX下用Mono跑但是折騰不出來,所以最好還是Windows;
需要將adb添加到系統路徑,可以直接下載一個Android SDK,但是我國國情導致你不一定能很方便的下載下來;還有一種取巧的辦法是所謂的xx手機助手、豌豆莢等工具目錄下一般都會自帶,指向adb.exe所在目錄即可。
硬件配置
需要一個有高通芯片的手機,我這裏強烈推薦G家親兒子Nexus系列!如果手頭沒有的話,可以去淘寶買個Nexus 4,雖然是幾年前的機器、不過一點都不卡,而且一千塊錢都不到。

註意目前Android 5.1上可能出現連接不穩定的情況,見官方論壇,我這邊測試5.0倒是一直能用~所以如果遇到這個問題,建議降低系統版本再說。

再註意需要打開手機的開發者模式,並把電腦設為信任,偷懶的方法是用豌豆莢連一次,跟著指示做就行,驅動都自己裝好了。

基礎教程
如何抓取一幀
首先手機上打開遊戲,運行到需要抓取的界面。然後在電腦打開Adreno Profiler,點左上角的Connect。這裏有兩種連接方式:手機直接插到電腦上,或者在同一個局域網內使用IP連接。準備好了之後點擊Refresh,直至刷出對應的設備和應用:

技術分享圖片

雙擊連接之後,點擊Scrubber GL彈出抓取界面,然後點擊Capture Frame等待即可

技術分享圖片

這樣其實就完成了抓取工作,是不是感覺so easy! 下面將從例子出發,介紹具體的使用。

小技巧:抓取完成之後,可以點擊上方的Save將幀數據保存成apr文件,這樣可以之後Open,省的每次分析都需要連接手機、打開遊戲。

基礎使用
這個工具使用非常簡單,核心是左下角的Render Calls。它其實是抓取了一幀中所有GL部分的調用及相關數據,然後按照繪制命令組織。當選中不同的Render Call時,工具會顯示從一開始到這一個命令的繪制結果,方便看到每一個中間過程。此外,在API Calls中,還可以看到每一個Render Call之前的其他命令,包括各種對GL狀態機的修改:

技術分享圖片

從圖中可以看到,在這個繪制動作前,對模板狀態進行了設置,然後傳了一些Uniform,並修改了頂點屬性~更方便的是,具體的頂點數據什麽也能直接看到!

技術分享圖片

如何查看、導出資源
就紋理來說,在右邊可以看到所有顯存裏的紋理資源,點開可以看到具體的紋理參數和縮略圖。在上面有一個小的按鈕,可以將所有紋理都保存成一個個文件:
技術分享圖片

就Shader來說,同樣也是可以看到所有Program,工具還會貼心的標出所有利用了該Shader的Render Call,下面可以看到反匯編出來的指令:

技術分享圖片

就模型來說,選中一個Render Call然後Save Vertex Data就可以導出obj,但是生成的文件還需要稍微修改下才能導入,具體打開看看就懂了~

技術分享圖片

我曾經把馴龍高手的地形導出之後放到Unity,毫無壓力-。-

技術分享圖片

進階使用
遊戲性能優化
之前zhiwei寫過Cocos2d-x+Lua遊戲的優化總結,下面我從圖形性能為例,來介紹需要註意的幾個點~

首先需要看一下每一個Render Call幹了什麽,是否有意義。根據不同遊戲類型,對Draw Call個數應該有個大概掌握。這個當然是越少越好啦~

是否有無效Render Call,我曾經見過一個全屏繪制“無效果”,也就是屏幕內容在繪制前後結果完全一致,不知道到底幹啥了...
是否有繪制到屏幕外的Render Call,也就是模型在屏幕外的情況;這個其實應該是引擎自動優化掉相機範圍外的物體,不過有的引擎不具有這個能力_(:???ang;)_
是否有被完全擋住的Render Call,這時候需要完全幹掉,不然也是會造成性能損失的;話說這個其實也應該引擎自動優化Occlusion來著(╯‵□′)╯︵┻━┻
是否有能夠合並的Draw Call,像Unity裏有Dynamic/Static Batching技術。
是否有負擔比較重的API調用,譬如每幀都修改頂點數據,是否能避免或繞開。
然後需要看一下顯存中的紋理數量和大小,這個肯定也是越小越好~

能用壓縮紋理的地方就用壓縮紋理,RGB444能忍的地方就不要用RGB888;
少用透明貼圖,可以節約掉一個A;
可以用NPOT;
無用的紋理盡量不要放太多顯存。
需要註意的是顯存中紋理占用和包裏的紋理占用不同,因為所有紋理資源在進入顯存之前會進行解壓操作,這就是為什麽建議使用壓縮紋理。

此外,Adreno Profiler還提供了Graph工具,可以看到應用的許多性能信息,用來對比不同遊戲場景下負載:

技術分享圖片

工具本身也提供了一些建議供參考:

技術分享圖片

聚爆特效分析
這個其實源自我之前在知乎上的一個回答:這款遊戲中主角被遮擋部分變成半透明的效果是如何實現的?。

在介紹如何繪制被遮擋部分的特效,用了一個小技巧:查看GL Context狀態機,這裏就可以看到ztest被改成了GREATER,也就是繪制完場景之後直接繪制被擋住的部分~

技術分享圖片

當然,還可以點擊上方的Depth切換出zbuffer查看

技術分享圖片

解釋刀光特效的時候,主要靠經驗積累,大概看下繪制的中間結果就猜出來了-。- 本質還是一個很簡單的特效。亮點在於繪制第二道刀光時,先繪制了整個場景,然後對其進行了一定的扭曲~

技術分享圖片

Adreno Profiler提供了一些很方便的可視化功能,譬如選中一個紋理或者Shader,可以標記出所有使用該資源的Render Call;選中Render Call的時候會在屏幕上標記其繪制效果~

其他

http://www.xuanyusong.com/archives/3618
http://www.kuqin.com/shuoit/20150517/346102.html

提取手機遊戲資源 特效 顯存分析工具 無視任何加密