之前我使用动态库注入和API拦截的方法破解过TexturePacker加密资源(详见博文《破解TexturePacker加密资源》)。后来有热心的网友提醒我,用IDA也可以,而且更方便,今天下载IDA 6.6试了一下,这里记录一下操作方法。
1. 把IDA目录下android_server传到android 目录中
adb push IDA安装目录\dbgsrv\android_server /data/local/tmp/
adb shell 进入模拟器
cd /data/local/tmp
chmod 755 android_server 给android_server运行权限
./android_server 运行android_server,给IDA提供远程调试服务,可以看到它的侦听端口是23946
su 获得root用户权限(如果提示没有权限,请先root手机)
2. win+r新开一个cmd窗口
adb forward tcp:23946 tcp:23946 转发windows到手机的端口
3. 打开IDA,选择Debugger > Attach to process...
在options里的hostname栏填localhost或127.0.0.1,port填23946
4. 选择你要debug的进程,然后选择module。
这里我要debug的是libcocos2djs.so,选中它,然后会列出所有的接口,Ctrl+F可以搜索接口名。
cocos2d-x纹理解密的接口是ccDecodeEncodedPvr,双击搜到接口可以在IDA-View窗口显示,然后Tab键会显示Pseudocode,然后就可以下断点了。F9是Continue Process。下面是我debug出的微信平台上某游戏的密码:
组合起来,密码就是:AA6D76770A82E8857AAXXXXX2E082244。打开TexturePacker,选择游戏包里的ccz文件,粘贴密码,解密成功!