日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

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

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

一、前言

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

二、案例分析

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

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

?

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

?

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

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

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

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

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

三、找出資源加密Key。IDA調(diào)試并分析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命令行窗口進行端口轉(zhuǎn)發(fā)

adb forward tcp:23946 tcp:23946

第四步:雙開IDA,一個用于靜態(tài)分析libcocos2dcpp.so,一個用于動態(tài)調(diào)試

?

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

?

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

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

?

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

?

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

并回車

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

?

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

第六步:對setPvrEncryptionKeyPart函數(shù)及setPvrEncryptionKey函數(shù)下斷點

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

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

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

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

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

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

第七步:F9運行程序

出現(xiàn)add map窗口一直點Cancel,加載好幾個so文件,直到執(zhí)行到setPvrEncryptionKey函數(shù)斷下

?

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

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

第八步:驗證密碼正確性

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

注意:

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

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

?

四、小結(jié)

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

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

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

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。