破解TexturePacker加密資源,尋找解密Key之旅
阿新 • • 發佈:2019-01-26
破解TexturePacker加密資源的方式有好多種。。最多的是hook uncompress然後獲取到內容,加入ccz的檔案頭寫入檔案。
例如:
void ZipUtils::ccSetPvrEncryptionKeyPart(int index, unsigned int value)// 設定金鑰的介面
上appstore上隨便找個cocos2d的遊戲,拖入Hopper,搜尋ccSetPvrEncryptionKeyPart,沒有找到。然後搜尋ZipUtils,如下圖:
ccDecodeEncodedPvr用來解密pvr.ccz檔案,沒有找到ccSetPvrEncryptionKeyPart,那麼我們在ccDecodeEncodedPvr上下程式碼塊裡面試試運氣
int sub_444200(int arg0, int arg1) {
r1 = arg1;
r0 = arg0;
r3 = *(0x7d79d0 + r0 * 0x4);
asm{ it eq };
if (r3 == r1) {
return r0;
}
*(0x7d79d0 + r0 * 0x4) = r1;
*(int8_t *)0x7d89e0 = 0x0;
return 0x0;
}
這個有點像。。猜測arg0為index arg1為value
寫tweak驗證:
int(*orgccSetPvrEncryptionKey)(int index,unsigned int key);
int myccSetPvrEncryptionKey(int index,unsigned int key);
int myccSetPvrEncryptionKey(int index,unsigned int key2key{
NSLog(@"\n\n===== keys: %d-%u ======\n\n",index,key);
orgccSetPvrEncryptionKey(key1,key2);
}
%ctor{
NSLog(@"====== HOOKED ======");
intptr_t module_vmaddr = _dyld_get_image_vmaddr_slide(0 );
intptr_t ccSetPvrEncryptionKey = module_vmaddr + 0x444200 + 1;
MSHookFunction((void *)ccSetPvrEncryptionKey, (void*)myccSetPvrEncryptionKey, (void**)&orgccSetPvrEncryptionKey);
}
測試log
Jun 1 11:57:43 crean XXX[73393]:
===== keys: 0-405172683 ======
Jun 1 11:57:43 crean XXX[73393]:
===== keys: 1-1270815801 ======
Jun 1 11:57:43 crean XXX[73393]:
===== keys: 2-3663874658 ======
Jun 1 11:57:43 crean XXX[73393]:
===== keys: 3-2333226975 ======
將這4個Key轉為16進製為
182671CB4BBF1C39DA624A628B1237DF
用TexturePacker開啟加密的pvr.ccz的檔案,它會提示你輸入128位加密的KEY,輸入直接解密驗證:
我想,看了這篇教程學到的不緊緊是破解TexturePacker加密資源哦。。自己動手驗證試試。。只隨機了一個遊戲測試。。有興趣的朋友可以找個遊戲驗證驗證是否通用。。