@yuzhouheike wrote:
目标程序:MindNode(试用版本)
- 目标结果1: 去除欢迎界面
- 目标结果2: 去除30个节点限制
最终效果
工具
- class-dump ( 逆向工程的入门级工具,导出一个App的某些信息,导出头文件)
- Hopper Disassembler v4 ( 反编译工具,根据可执行文件反编译出汇编码)
- gdb ( 调试器:找到想要改变的地址处的16进制代码)
- Hex Fiend (16进制文件编辑器,要用这个修改原来的16进制文件。改变想要改变的地址处的16进制代码)
分析思路
- 使用Hooper反编译MindNode
- 使用gdb加载MindNode
- 查找16进制(x/x 地址) 代码
- 使用Hex Friend编辑MindNode
- 查找16进制(x/x 地址) 代码
- 重新给MindeNode签名
- codesign -f -s 证书名 /Applications/MindNode.app/Contents/MacOS/MindNode
完成逆向
---
详细过程
hooper 搜索appdelegate入口
下图就是30个节点弹出框伪代码
应该就是调用了这个代码
记错汇编指令瞎改(原来可以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