利用IDA远程调试破解TexturePacker加密素材

Published: Tags: WINDOWS ANDROID

今天笔者需要拆包「少女部屋拼图」这个APP的素材,右击解压发现PNG图片就只有一些插画之类的,至于家具等都是.pvr.ccz文件格式。 笔者大手一挥谷歌一搜,先是装上了TexturePacker的5.2破解版(因为在官网下载的6.0版本,不知为啥使用PVR查看器时不能输入密码)。 然后大手一挥谷歌一搜,复制粘贴了.pvr转换.png的批处理代码,如下:

@echo off
path %path%;"D:\Program Files\CodeAndWeb\TexturePacker\bin"
for /f "usebackq tokens=*" %%d in (`dir /s /b *.pvr *.pvr.ccz *.pvr.gz`) do (
  TexturePacker.exe "%%d" --sheet "%%~dpnd.png" --data "%%~dpnd.plist" --opt RGBA8888 --algorithm Basic --allow-free-size --dither-fs --no-trim
)
pause

最后大手一挥鼠标双击,结果报错提示素材文件被加密,需要key才能解析转换。这个就有点超出笔者的知识范畴了,还好网友们已经填了坑。

下载IDA Pro 7.5破解版(笔者是在看雪论坛搞到的,其实也可以直接谷歌搜索「IDA_Pro_v7.5_Portable.zip」关键字,或者其他版本也行)

电脑打开命令行,执行adb push IDA路径\dbgsrv\android_server64 /data/local/tmp/传送调试命令文件到手机上。 然后adb shellcd /data/local/tmp进入命令文件所在路径,接着chmod 755 android_server64添加执行权限。

众所周知笔者的手机是有root权限的,所以su直接提权(如果没有root的朋友请自行处理,笔者未测试root是否必要操作) 最后执行./android_server64命令之后,电脑上应该就会输出「Listening on 0.0.0.0:23946…」了,手机已经在监听状态。

打开IDA Pro x64版本(请根据自己手机/电脑选择x86还是x64平台),点击Debugger->Attach->Remote ARM Linux/Adnroid debugger菜单, 在「Hostname」填入自己手机的IP地址(没有接入WIFI的话,可以执行adb forward tcp:23946 tcp:23946进行转发),端口填写「23946」即可。

在弹出的对话框中选择「org.cocos2dx.newPuzzleGame」进程(其他APP同理,换成对应程序包名就行),点击IDA工具栏的绿色三角形的启动按钮。 在主界面中找到「Modules」子窗口,按Ctrl+F搜索「cocos2dx」关键字,双击「libMyGame.so」动态库,弹出窗口再次搜索「pvr」过滤筛选。

这时看到「ZipUtils::decodeEncodedPvr」方法,双击跳转到「IDA View」窗口,再按F5查看伪代码,双击包含「PvrKey」的变量,得到如下: _ZN7cocos2d8ZipUtils23s_uEncryptedPvrKeyPartsE DCD 0x35AB87EB, 0x223BCBD, 0xFE9EC5EF, 0xE462C037, 0x9CD57CD5, 0x82AC0DA2

只要把前面四段字符串组合起来转成小写就是密码了(注意第二段只有七位长度,前面需要补零):35ab87eb0223bcbdfe9ec5efe462c037 运行TexturePacker软件,选择工具中的PVR查看器,打开被加密了的.pvr.ccz素材文件,填入刚才组合得到的密码,就可以解析查看了。

以上内容参考以下必要资料: 破解TexturePacker加密资源:使用IDA TexturePacker Content Protection