目标程序: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个节点,现在刚打开就弹出!!尴尬了)
恢复修改过的代码,继续分析
- 监控节点数量的伪代码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截止日期的最后一天