macOS逆向(MindNode)

weixin_34239169發表於2018-01-25

目標程式: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個節點彈出框虛擬碼

應該就是呼叫了這個程式碼

記錯彙編指令瞎改(原來可以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了)

相關文章