Quantcast
Channel: Essence Sharing | 干货分享 - iOSRE
Viewing all articles
Browse latest Browse all 301

macOS逆向(MindNode)

$
0
0

@yuzhouheike wrote:


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

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

最终效果

工具

  • 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个节点弹出框伪代码

应该就是调用了这个代码

B84F4AAE-950D-47CA-921E-12AA6CB1BFBF.png

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

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

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了)

Posts: 12

Participants: 5

Read full topic


Viewing all articles
Browse latest Browse all 301

Trending Articles