日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Android中IDA分析TexturePacker加密资源寻找加密Key

發布時間:2023/12/3 68 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android中IDA分析TexturePacker加密资源寻找加密Key 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、前言

今天我們來看如何破解分析TexturePacker加密資源的加密Key。根據經驗目前常用的方法有以下三種:直接hook uncompress函數,得到資源數據內容并保存;直接hook setPvrEncryptionKeyPart函數(不同版本的cocos2dx引擎可能函數略有不同)打印Key;用IDA調試并分析so文件來獲取加密Key。前兩種方法hook代碼量比較多,通常要在Android環境中hook,顯然有些麻煩。第三種方法要求對IDA工具會基本的常用操作,代碼量相比要少。三種方法如果碰到so被加密或加殼了必須解密或脫殼后才能完成。當然不管用什么方法,只要找到適合自己的方法達到目的就可以。

二、案例分析

下面我們就對上面所提到的第三種方法進行調試分析。首先我們得有個案例程序,根據需要可自已找個類似的apk或自己寫個demo編譯成apk,這里我們選用類似的apk,這時我們就可以開始調試分析了。按照慣例:

第一步:解壓apk,看下目錄情況可知無常用加殼保護,得classes.dex文件,利用dex2jar+jd-gui得到java源碼:

?

看到源碼中無明顯加殼特征。得到libcocos2dcpp.so文件,不難看出此so是引擎cocos2dx用C++語言開發編譯的。用IDA工具打開無任何錯誤提示并且函數能正常顯示,說明so文件沒被加殼加密。

?

第二步:用apktool或ApkIDE反編譯apk(本案例用ApkIDE),獲取apk資源文件AndroidManifest.xml中信息,重點要看以下三個地方

1、application節點中android:debuggable="true",如果沒有這句則添加上或者為“false”改為"true"后保存并重新編譯得到前綴為ApkIDE_的apk。

2、manifest節點中package="com.mtx.thj" 這后面會用到……

3、activity節點中android:name="org.cocos2dx.cpp.AppActivity" 后面會用到……

第三步:啟動Android模擬器或Android手機,把apk安裝到Android模擬器或Android手機中(此案例為Android手機,數據線連接手機)。在cmd窗口輸入如下命令 and install D:\apk\cocos2dx_cpp_1.0.apk 并回車(路徑根據大家的apk路徑為準)完成安裝。

三、找出資源加密Key。IDA調試并分析libcocos2dcpp.so文件,找出TexturePacker編輯的資源加密Key。

第一步:在cmd命令行窗口啟動手機中的android_server,本手機為sv文件。

第二步:在上面同一個cmd命令行窗口用debug模式啟動程序并回車

adb shell am start -D -n com.mtx.thj/org.cocos2dx.cpp.AppActivity

這里的包名和入口Activity都可以在上面(2.2中)反編譯之后的AndroidManifest.xml中找到。

啟動程序成功

?

第三步:另啟動個cmd命令行窗口進行端口轉發

adb forward tcp:23946 tcp:23946

第四步:雙開IDA,一個用于靜態分析libcocos2dcpp.so,一個用于動態調試

?

記錄上面兩圖示中setPvrEncryptionKeyPart函數及setPvrEncryptionKey函數的相對地址分別為:0067F188和0067F1B4再打開一個IDA,進行attach調試進程

?

在上面窗口中搜索目標進程包名com.mtx.thj

并按ok按鈕attach調試進程,完成后F9運行并且設置debugger調試選項

?

第五步:使用jdb命令attach上調試器,這里可以用eclipse的devices查看進程端口

?

jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8601

并回車

此時第二個IDA會暫停,F9運行幾次后會加載so文件,出現下面窗口一直點Cancel

?

F9運行直到Output window出現 loaded /data/app-lib/com.mtx.thj-1/libcocos2dcpp.so,記下libcocos2dcpp.so在內存中的絕對地址:75237000

第六步:對setPvrEncryptionKeyPart函數及setPvrEncryptionKey函數下斷點

setPvrEncryptionKeyPart函數的絕對地址=第三步中的相對地址:0067F188+75237000 = 758B6188

在第二個IDA的調試窗口中按下G鍵輸入758B6188確定就可到setPvrEncryptionKeyPart函數位置并且下F2斷點

同時F5鍵進入偽代碼窗口在此函數下F2斷點

同理setPvrEncryptionKey函數的絕對地址=第三步中的相對地址:0067F1B4+75237000 = 758B61B4

并在IDA的調試窗口中按下G鍵輸入758B61B4確定就可到setPvrEncryptionKey函數位置并且下F2斷點(圖略)

同時在此函數的偽代碼窗口中對setPvrEncryptionKey函數下F2斷點

第七步:F9運行程序

出現add map窗口一直點Cancel,加載好幾個so文件,直到執行到setPvrEncryptionKey函數斷下

?

斷下時在General registers窗口里的R0R1R2R3分別就是密碼字符串,那么此apk里TexturePacker所加密資源加密Key估計為AAAAAAAABBBBBBBBCCCCCCCCDDEE1988,如果很難看出在setPvrEncryptionKey函數偽代碼窗口中F9就可以斷下,并將鼠標移動到a1,a2,a3,a4位置可以看到對應的密碼字符串的值

此時再參考下cocos2dx引擎中setPvrEncryptionKeyPart函數解密調用Key的情況,可確定AAAAAAAABBBBBBBBCCCCCCCCDDEE1988就是資源的加密Key

第八步:驗證密碼正確性

用TexturePacker的Tools -> PVR Viewer打開之前解壓的apk目錄下assets目錄中任一個.pvr.ccz后綴文件

注意:

.pvr.ccz的16進制數據中頭4字節為 43 43 5A 70 ,才是加過密的.pvr.ccz資源文件

在TexturePacker工具如果輸入過一次Key后,打開加過密的.pvr.ccz資源文件可直接打開

?

四、小結

1、對于cocos2dx資源加密用這種加密方式加密安全等級非常低,不建議使用。當然加密后也算是對游戲資源的一層防護……

2、對于用TexturePacker工具加密的資源要找密碼Key用IDA調試時對函數setPvrEncryptionKey下斷點很容易找到Key;

3、對于單個資源文件直接用TexturePacker工具打開后保存,如果要批量解密資源要在win平臺下編寫工具。

總結

以上是生活随笔為你收集整理的Android中IDA分析TexturePacker加密资源寻找加密Key的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。