在使用某某笔记Mac版的思维导图时,被限制只能添加20个节点,非常尴尬。
于是果断放弃了,改用别的软件。
后来闲暇之余,打算以此作为mac逆向分析的一个示例,开启mac逆向之旅。
本文使用frida分析Mac应用,主讲思路。
1、Mac电脑要安装frida和frida-trace、frida-ps
2、找到某某笔记的二进制文件,拖入IDA中分析
3、
一开始完全不知道从何入手。这个界面是“思维导图”,英文是"mind map",所以在ida中的方法列表查询"mindmap",可以看到有很多相关的方法:
于是使用frida-trace开始测试mindmap相关的方法:
(1)先使用frida-ps获取当前app在mac中运行的pid是"11455"
frida-ps
(2)frida-trace测试mindmap相关的方法
frida-trace -p 11455 -m "*[* *Mindmap*]" -m "*[* *MindMap*]" -m "*[* *mindmap*]" -m "*[* *mindMap*]"
此时已经在思维导图中创建了20个节点,当再添加新节点时,弹框提示"思维导图节点超过限制",frida-trace在终端的打印:
于是我们到IDA中查看offerDetailForMindmapNodeReached方法的伪代码:
所以我们必须看下v123从哪里来的。
可以看到 v123 是 某个类的 serviceLevel 方法的返回结果,v123应该是个int类型。
再次使用frida-trace追踪方法调用,增加对 *[* serviceLevel] 的追踪:
frida-trace -p 11455 -m "*[* *Mindmap*]" -m "*[* *MindMap*]" -m "*[* *mindmap*]" -m "*[* *mindMap*]" -m "*[* serviceLevel]"
距离突破20个节点限制已经越来越近了,感兴趣的同学可以根据本文的思路,继续往下分析。这里点到即止。
如果你找到这个方法,可以在frida-trace生成的js文件中,找到这个方法对应的js文件,修改js文件中的onLeave返回值为0x3(因为上文看到v123是3时最多可创建200个节点)并保存:
onLeave: function (log, retval, state) {
log("--Return value-> (type:"+typeof retval+",value:"+retval+")");
newretval=ptr("0x3"); retval.replace(newretval);
log("--Return value-> (type:"+typeof retval+",value:"+retval+")--2");
}
最终测试已经突破了20个节点的限制: