目標程式: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截止日期的最後一天