某鱼记账App IOS登录和sign分析
1.抓包
1.这里我直接修改系统代理,有条件可以使用Shadowrocket,抓包工具为Charles登录抓包获取特征POST请求头URL和参数,抓包获取的信息都可以作为切入点(url、header、body、response...)

可以看到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类方法中,可以看到IV为BYfmvhVjpPwUcMgS

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

Sign
Tips:[X y:z:] (X是类名,方法名是x:y:拼起来,z是参数)通过Hook+[NSURL URLWithString:]得到请求堆栈,这里我选择了类方法里最长的

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

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

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

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

这样我们使用frida-trace Hook一下CC_MD5这个类查看参数前的值和返回内容
frida-trace -UF 14536 -i "CC_MD5"
修改的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}=`);
}
}