某鱼记账App IOS登录和sign分析

1.抓包

1.这里我直接修改系统代理,有条件可以使用Shadowrocket,抓包工具为Charles

登录抓包获取特征POST请求头URL和参数,抓包获取的信息都可以作为切入点(urlheaderbodyresponse...)

可以看到phone为明文,pwd进行了加密也具备sign

这里根据密文类型可以猜测出来应该是使用的AES、DES、3DES、RSA

2.分析

1.砸壳
2.IDA加载二进制文件
3.等待二进制文件加载完成后在开始分析

拖入ida分析,然后Shift+F12打开IDA字符串窗口搜索关键字参数然后双击进去

再双击进去, 看到aGrantauthLogin选中按X查看交叉引用的位置进行跟踪

看到cfstr_GrantauthLogin选中按X查看交叉引用的位置进行跟踪

进入图形视图界面F5查看伪代码

伪代码窗口中,我们稍微翻找一下就看到一个类方法调用的参数Key+[SecurityManager AES256StringEncrypt:key:],里面放着常量CFSTR("rkKbcCa3nxY8YwAWUpu2PwUcMgSFwL2r"));

双击AES256StringEncrypt类方法中,可以看到IVBYfmvhVjpPwUcMgS

这里使用在线解密网站查看,明文内容和输入内容已一致(挺惊讶的 没想到这么快)

Sign

Tips:[X y:z:] (X是类名,方法名是x:y:拼起来,z是参数)

通过Hook+[NSURL URLWithString:]得到请求堆栈,这里我选择了类方法里最长的

image-20220928172654733

Hook +[NetWorkManager POST:parameters:loseKeys:specialKeys:signStr:request:constructingBodyWithBlock:progress:success:failure:]确定了是有内容的

image-20220928173248569

进入Ida搜索+[NetWorkManager POST:parameters:loseKeys:specialKeys:signStr:request:constructingBodyWithBlock:progress:success:failure:]进入后搜索Sign直到signHandler这里就发现了(前面的伪代码大概是组包的过程 这里就不截出来了),这里的v111什么意思表示菜鸡看的不是很懂但是感觉是前面组包的内容

image-20220929172030193

跟入+[SecurityManager md5:]可以发现这只是一个封装了CC_MD5的类

image-20220929171923410

可以看到下面,下标2开始取6位

image-20220929173026705

这样我们使用frida-trace Hook一下CC_MD5这个类查看参数前的值和返回内容

frida-trace -UF 14536 -i "CC_MD5"

image-20220929173354235

修改的CC_MD5.js内容如下(抄来的,可能代码会有报错,但不影响内容就没修改了)

{
  onEnter(log, args, state) {
     log(`CC_MD5(${args[0].readUtf8String()})`);  
     this.args2 = args[2];
  },

  onLeave(log, retval, state) {
    var ByteArray = Memory.readByteArray(this.args2, 16);
    var uint8Array = new Uint8Array(ByteArray);

    var str = "";
    for(var i = 0; i < uint8Array.length; i++) {
        var hextemp = (uint8Array[i].toString(16))
        if(hextemp.length == 1){
            hextemp = "0" + hextemp
        }
        str += hextemp;
    }
    log(`CC_MD5()=${str}=`);
  }
}

本文链接:

http://www.linqi.net.cn/index.php/archives/451/