macOS逆向(MindNode)


目标程序:MindNode(试用版本)

  • 目标结果1: 去除欢迎界面
  • 目标结果2: 去除30个节点限制

最终效果

0x01

工具

  • class-dump ( 逆向工程的入门级工具,导出一个App的某些信息,导出头文件)
  • Hopper Disassembler v4 ( 反编译工具,根据可执行文件反编译出汇编码)
  • gdb ( 调试器:找到想要改变的地址处的16进制代码)
  • Hex Fiend (16进制文件编辑器,要用这个修改原来的16进制文件。改变想要改变的地址处的16进制代码)

分析思路

  1. 使用Hooper反编译MindNode
  2. 使用gdb加载MindNode
    • 查找16进制(x/x 地址) 代码
  3. 使用Hex Friend编辑MindNode
    • 查找16进制(x/x 地址) 代码
  4. 重新给MindeNode签名
  • codesign -f -s 证书名 /Applications/MindNode.app/Contents/MacOS/MindNode

完成逆向



详细过程

hooper 搜索appdelegate入口

下图就是30个节点弹出框伪代码


应该就是调用了这个代码

0x06

记错汇编指令瞎改(原来可以30个节点,现在刚打开就弹出!!尴尬了)

恢复修改过的代码,继续分析

  • 监控节点数量的伪代码1
char -[MNCDocumentKVOController _mindMapObjectsEqualMaxCountForDemoVersion](void * self, void * _cmd) {
    rbx = [[self mindMapObjects] retain];
    r14 = [rbx count];
    r15 = *0x100331ad8;
    [rbx release];
    if (r14 < r15) {
            rax = 0x0;
    }
    else {
            [MNXDemoManager showCanvasObjectsExceededSheet];
            rax = 0x1;
    }
    rax = rax & 0xff;
    return rax;
}
  • 监控节点数量的伪代码2
char -[MNCDocumentKVOController _mindMapObjectsExceedMaxCountForDemoVersion](void * self, void * _cmd) {
    rbx = [[self mindMapObjects] retain];
    r14 = [rbx count];
    r15 = *0x100331ad8;
    [rbx release];
    if (r14 > r15) {
            [MNXDemoManager showCanvasObjectsExceededSheet];
            rax = 0x1;
    }
    else {
            rax = 0x0;
    }
    rax = rax & 0xff;
    return rax;
}
  • 对于汇编代码1

  • 对于汇编代码2

搞定这两个很明显就可以去掉限制了

有点儿激动了,希望今天可以完成任务,因为4.4号sgi截止日期的最后一天

把上面两个判断中的r15修改为比30大的数字就可以了.我设置了0xff!okay 终于去除了30个节点的限制(数一数下面的节点数肯定超过30了)

1 个赞

为什么不去改jmp而是去改r15的值?

原因是他这个对最大的节点数做了两次通知判断,修改r15的值,可以不用继续分析就能解决问题.第一次分析,汇编学的也不是很好,就会mov r15 ,0xff 这种级别的修改!还需要虚心向论坛大神学习

要是超过了0xff你这■■不就失效了

嗯等我学会汇编好好改改

为啥不写个hook直接 return no

感谢分享

因为技术不到位:joy:

谢谢回复

希望大神们指出思路。让我们小菜多接触大神的思路

厉害了我的磊神!!!

还是不行