背景:反编译一款APP手游,由cocos2dx开发,解密出lua脚本及资源素材。
一、需要的工具和环境
1、PYTHON 3.11.2
2、VSCODE
3、FRIDA 16.1.4
4、NODEJS 18.17.1
5、ADB
6、一台ROOT后的手机(不建议用模拟器,有坑)
7、IDA 7.7 PRO
8、XXTEA解密器
9、TexturePacker 6.0.1
10、luajit-decompiler-V2
二、配置工具和环境
PYTHON 安装及配置
1、本次反编译用到的PYTHON为3.11.2版本,下载地址:https://www.python.org/downloads/release/python-3112/,一直下拉到底可以看到下载地址。
如果是64位系统点击下载我标识的安装包即可,下载下来是一个exe程序,直接一路下一步到安装完成即可。
2、默认安装完成后的路径会在C:\Users\你的电脑用户名\AppData\Local\Programs\Python\Python311
3、打开电脑的"编辑系统环境-高级-环境变量",双击Path进入编辑
4、新建两条环境变量:
C:\Users\你的电脑用户名\AppData\Local\Programs\Python\Python311
C:\Users\你的电脑用户名\AppData\Local\Programs\Python\Python311\Scripts
5、设置完成后打开CMD,输入:
>>python --version
Python 3.11.2 //该内容为上面的指令输入后会输出的,能正常输出即表示安装配置成功
VSCODE** 、 FRIDA 、 **NODEJS 安装及配置
1、VSCODE的安装就不详述了,这玩意傻瓜式安装即可。安装完成后点击左侧扩展,搜索python进行安装
2、在顶部选择"终端-新建终端",在终端中输入如下信息,安装FRIDA:
>>pip install frida=16.1.4
>>pip install frida-tools
3、安装完成后,打开CMD,输入:
>>frida --version
16.1.4 //该内容为上面的指令输入后会输出的,能正常输出即表示安装配置成功
4、因为FRIDA支持PYTHON和NODEJS脚本,但对JS的支持更好,后续HOOK也基本上会用JS来写,所以接着安装NODEJS。
下载NODEJS,地址:https://nodejs.org/dist/v18.17.1/node-v18.17.1-x64.msi,下载完成后也是无脑点下一步安装即可。
5、安装完成后,配置系统环境变量,将NODEJS以下加入环境变量中(根据你自己安装位置的差别,替换下位置):
C:\Program Files\nodejs\
C:\Program Files\nodejs\node_global
6、打开CMD,输入:
>>node -v
v18.17.1 //该内容为上面的指令输入后会输出的,能正常输出即表示安装配置成功
PS:到此处Frida的客户端是安装完成了,但是在手机上的服务端还没有安装,会在下面ROOT一台手机的板块说明。
ADB 安装及配置
1、因为我没有纯装ADB过,所以我是先安装了一个雷电模拟器。然后在雷电模拟器安装的根目录下就有ADB,我就直接用了。
2、因此,只需要下载安装一个雷电模拟器,然后通过环境变量,增加一下雷电安装的根目录位置即可。
3、我的雷电模拟器是安装在D:\LeiDian\LDPlayer4,因此在环境变量中直接新增这个位置就好了。
4、打开CMD,输入:adb,回车后能获得一大串内容即表示配置成功了。
ROOT 一台手机
说明:非常不建议大家用FRIDA去跟模拟器配合,因为模拟器的架构是x86的,手机的架构是arm64的,因此,如果你要处理的APP没有为x86框架单独做支持,那么后面IDA的分析和HOOK都完全找不到北。(判断APP是否支持x86架构的方法是:将你的APP后缀从.apk改成.zip,然后解压后,看lib文件夹中有没有x86的文件夹,没有的话表示不单独支持x86架构,一般我们分析arm64的就好),我这里ROOT的是一款小米手机,安卓系统版本是 Android 11。
1、解锁小米BL操作教程:https://www.bilibili.com/video/BV1ba411h7xC/
2、刷入第三方Recovery TWRP:https://www.bilibili.com/video/BV1ku411D7pL
3、刷入Magisk:https://www.bilibili.com/video/BV1zP4y1c7J6/
4、用USB线将手机和电脑连接起来,在电脑上打开CMD,输入:
>>adb shell
>>su
5、此时打开你手机上的Magisk软件,下边栏里面点一下"超级用户"功能,进去可以看到你刚才连入手机的电脑信息,把他的开关打开给他授权。
6、下载你安装的对应版本的FRIDA的服务端推送到手机上,因为我之前安装的FRIDA客户端版本是16.1.4,所以从官网下载他对应的服务端文件https://github.com/frida/frida/releases/download/16.1.4/frida-server-16.1.4-android-arm64.xz,将下载后的文件解压后得到文件:frida-server-16.1.4-android-arm64(假设存在位置在D:\)
7、打开电脑的CMD,输入:
>>adb push D:\frida-server-16.1.4-android-arm64 /data/local/tmp
>>adb shell
>>su
>>cd /data/local/tmp
>>chmod 777 frida-server-16.1.4-android-arm64
>>ls -l //这条指令能够帮助你查看下chmod是否生效将文件的可读权限成功改成了-rwxrwxrwx
其他配置项
至此,各方面环境基本上已经OK了。如果想在FRIDA的HOOK过程中需要脚本提示。可以跟着我这样操作:
1、未来打算HOOK的文件都放到D:\HOOK文件夹中。打开CMD,输入:
>>cd D:\HOOK
>>npm install --save @types/frida-gum
2、在D盘建立一个HOOK文件夹,创建一个hook.js的文件。用VSCODE打开它,创建两个终端:
2.1、在第一个终端中输入(作用为启动FRIDA服务端和转发端口):
>>adb forward tcp:27042 tcp:27042
>>adb forward tcp:27043 tcp:27043
>>adb shell
>>su
>>cd /data/local/tmp
>>./frida-server-16.1.4-android-arm64 //输入完该条指令后,没有返回任何提示表示OK,并且不要关掉该终端
2.2、在第二个终端中输入(测试FRIDA服务端是否正常启动,并教你如何运行HOOK脚本):
>>cd D:\HOOK
>>frida-ps -U //输入该指令后会列出当前手机所有运行的程序,能正常列出表示手机的FRIDA服务端正常运行
>>frida -U -f 包名 -l hook.js //以后脚本需要调整,在VSCODE打开的hook.js里面调整就好了,hook的反馈是及时生效的