前言
由于某论坛 APP 广告太多,并且非常不好用,很早就准备自己参考论坛开放接口开发一个 APP。
但是论坛开放的接口太老了,并且覆盖的数据不是很全,故自己抓了一些接口,但是服务器接口有做 sign 加密,只能砸壳破解了。
准备
- 已越狱的手机
Charles抓包工具frida-ios-dump
开始
-
首先在电脑安装大佬的优化过的
frida-ios-dump工具,下载地址为 github.com/AloneMonkey… ; -
在手机添加 build.frida.re 源,并安装
frida; -
通过抓包可以判断
sign是由 MD5 加密,所以就不用砸壳,直接通过frida-trace跟踪“CC_MD5”函数就可以获取sign的加密方式; -
手机插上数据线连接电脑,通过
frida-ps -Ua命令,获取 APP 的PID或者Bundle Id; -
输入
frida-trace -U -f xxx -i "CC_MD5"命令, 将 xxx 替换为对应 APP 的Bundle Id或者PID,可以看到终端已经连通手机,然后自动运行 APP; -
在终端返回的路径中找到
CC_MD5.js文件,打开文件并将文件内容修改至如下代码;
{
// 函数参数
onEnter: function (log, args, state) {
//将md5参数转换成字符串并打印
var md5_data = args[0].readUtf8String();
console.log("MD5 - 参数值:");
console.error(md5_data);
},
// 函数返回值
onLeave: function (log, retval, state) {
//将md5返回值转码为32位字符串并打印
var md5_digest = hexdump(retval , {length: 16})
var hexified = "";
var raw_array = md5_digest.split("\n");
for (var a = 0; a < raw_array.length; a++) {
var line_array = raw_array[a].split(" ");
for (var b = 1; b < line_array.length - 1 ; b++) {
if (line_array[b].length === 2) {
hexified += line_array[b];
hexified = hexified.trim()
}
}
};
console.log("MD5 - 返回值:");
console.error(hexified + "\n");
}
}
-
再次输入
frida-trace -U -f xxx -i "CC_MD5"命令,终端将自动输出有用到CC_MD5函数的参数和返回值; -
通过抓包工具中抓到的接口参数 sign,通过 sign 在终端中搜索字符串,可以找到参数形成之前的原始字符串,然后通过 md5 工具。将上述的参数值去加密对比,发现原始字符串正确,然后分析接口的各个参数对应的字符串位置,至此解密成功。
总结
通过上述过程,可以看到接口采用 MD5 等单向加密算法还是比较容易被解密的,其余还有一些加密函数,也可以用用frida-trace去监测,比如iOS系统的:CC_SHA1,CCHmac等,但是遇到一些比较复杂,做过安全处理的加密就需要砸壳逆向了。