某鱼记账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}=`);
}
}