iOS 某玩家论坛简易破解接口sign参数

1,781 阅读2分钟

前言

由于某论坛 APP 广告太多,并且非常不好用,很早就准备自己参考论坛开放接口开发一个 APP。

但是论坛开放的接口太老了,并且覆盖的数据不是很全,故自己抓了一些接口,但是服务器接口有做 sign 加密,只能砸壳破解了。

准备

  • 已越狱的手机
  • Charles 抓包工具
  • frida-ios-dump

开始

  1. 首先在电脑安装大佬的优化过的frida-ios-dump工具,下载地址为 github.com/AloneMonkey…

  2. 在手机添加 build.frida.re 源,并安装 fridaimage.png

  3. 通过抓包可以判断 sign 是由 MD5 加密,所以就不用砸壳,直接通过 frida-trace 跟踪“CC_MD5”函数就可以获取 sign 的加密方式; image.png

  4. 手机插上数据线连接电脑,通过 frida-ps -Ua 命令,获取 APP 的 PID 或者 Bundle Idimage.png

  5. 输入 frida-trace -U -f xxx -i "CC_MD5"命令, 将 xxx 替换为对应 APP 的Bundle Id或者PID,可以看到终端已经连通手机,然后自动运行 APP; image.png

  6. 在终端返回的路径中找到 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");
  }
}
  1. 再次输入 frida-trace -U -f xxx -i "CC_MD5"命令,终端将自动输出有用到 CC_MD5 函数的参数和返回值; image.png

  2. 通过抓包工具中抓到的接口参数 sign,通过 sign 在终端中搜索字符串,可以找到参数形成之前的原始字符串,然后通过 md5 工具。将上述的参数值去加密对比,发现原始字符串正确,然后分析接口的各个参数对应的字符串位置,至此解密成功。

image.png

总结

通过上述过程,可以看到接口采用 MD5 等单向加密算法还是比较容易被解密的,其余还有一些加密函数,也可以用用frida-trace去监测,比如iOS系统的:CC_SHA1,CCHmac等,但是遇到一些比较复杂,做过安全处理的加密就需要砸壳逆向了。