1 คะแนน โดย GN⁺ 2025-02-19 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

การดีบักแอปที่ดีบักไม่ได้

  • เมื่อไม่นานมานี้ได้เจอกับแอปที่ดีบักไม่ได้ แอปนี้บล็อกการเชื่อมต่อดีบักเกอร์, ปิดตัวลงตั้งแต่เนิ่น ๆ เมื่อมีการฉีดโค้ด และหากรันบนอุปกรณ์ที่เจลเบรกจะทำให้ทั้งเครื่องล่ม
  • แอป iOS มักมีการป้องกันเพิ่มเติม เช่น การตรวจจับการเจลเบรกหรือการทำโค้ดให้อ่านยาก และแอปนี้ก็ผสมผสานการป้องกันไว้หลายแบบเป็นพิเศษ

เวอร์ชันวิดีโอ

  • มีเวอร์ชันวิดีโอของโพสต์นี้ ซึ่งแสดงขั้นตอนอย่างละเอียดมากขึ้น

สารบัญ

  • PT_DENY_ATTACH
  • การข้าม PT_DENY_ATTACH (โหมดง่าย)
  • การข้าม PT_DENY_ATTACH (โหมดยาก)
  • เครื่องล่ม
  • การฉีดโค้ด
  • สรุปท้ายเรื่อง

PT_DENY_ATTACH

  • การเชื่อมต่อดีบักเกอร์คือขั้นตอนแรก บนโทรศัพท์ที่เจลเบรกแล้ว โดยปกติการเชื่อมต่อดีบักเกอร์ทำได้ง่าย
  • ฟังก์ชันชื่อ ptrace จะบล็อกการเชื่อมต่อดีบักเกอร์ ฟังก์ชันนี้ใช้คำขอ PT_DENY_ATTACH เพื่อบล็อกการเชื่อมต่อของดีบักเกอร์ในอนาคต

การข้าม PT_DENY_ATTACH (โหมดง่าย)

  • PT_DENY_ATTACH จะบล็อกดีบักเกอร์หลังจากถูกเรียกเท่านั้น หากตั้งเบรกพอยต์ไว้ก่อนเรียก ดีบักเกอร์ก็จะเชื่อมต่อได้ตามปกติ
  • สามารถตั้งเบรกพอยต์ที่ตัวฟังก์ชัน ptrace เองเพื่อข้ามการเรียกได้

การข้าม PT_DENY_ATTACH (โหมดยาก)

  • นักพัฒนาบางคนใช้ system call โดยตรงแทน ptrace เพื่อบล็อกดีบักเกอร์
  • ในกรณีนี้ ต้องค้นหา system call ดังกล่าวในไบนารีแล้วข้ามมันไป

เครื่องล่ม

  • แอปจะทำให้โทรศัพท์ซอฟต์รีบูตภายใต้เงื่อนไขบางอย่าง สิ่งนี้เกิดจากการเรียกเมธอดที่ใช้หน่วยความจำหนักในลูปไม่สิ้นสุด
  • สามารถใช้ lldb เพื่อข้ามเมธอดนี้ได้

การฉีดโค้ด

  • เมื่อมีการฉีดโค้ด แอปจะล่ม ซึ่งมีความเป็นไปได้สูงว่าเกิดจากตัวระบุ app group ไม่ถูกต้อง
  • บนโทรศัพท์ที่เจลเบรกแล้ว สามารถฉีดโค้ดได้โดยไม่ต้องเซ็นแอปใหม่ มิฉะนั้นอาจแก้ปัญหาได้ด้วยการสวิซเซิลเมธอด

1 ความคิดเห็น

 
GN⁺ 2025-02-19
ความเห็นจาก Hacker News
  • Bryce Bostwick ทำงานด้านการดีบักและรีเวิร์สเอนจิเนียริงแอปที่ทั้งเจ๋งและสร้างแรงบันดาลใจมาก

    • ได้แรงบันดาลใจจากวิดีโอ YouTube ของเขาที่แสดงวิธีดัดแปลง TikTok ให้แสดงเฉพาะวิดีโอแมว เลยลองดัดแปลง Instagram ให้เหลือแค่ฟีเจอร์ข้อความและตัดอย่างอื่นออก
    • สนใจการดัดแปลง Windows ในสไตล์ Windhawk
    • Bryce นำเสนองานลักษณะนี้บน iOS ผ่านวิดีโอแบบทีละขั้นตอนและทำแบบเรียลไทม์
  • ใน DOS/Windows เทคนิค anti-debugging เป็นเรื่องปกติมานานแล้ว

    • ระดับที่ผู้ใช้ควบคุมได้ง่ายมักแปรผกผันกับความเป็นปรปักษ์ต่อผู้ใช้ของแพลตฟอร์ม
    • PT_DENY_ATTACH ดูเหมือนจะเป็นฟีเจอร์สำหรับอย่างหลัง
    • บน Windows มีเทคนิคที่ทำให้แอปแนบตัวเองเข้ากับตัวเองได้
  • น่าแปลกใจที่การตรวจของ App Store ของ Apple ไม่ปฏิเสธแอปที่เรียก system call โดยตรง

    • บนแพลตฟอร์มของ Apple system call ไม่ใช่ ABI ที่เสถียร จึงควรเรียกผ่าน libSystem
    • แอปที่ทำ system call โดยตรงคือแอปที่กำลังทำสิ่งที่ไม่ควรทำ
  • สงสัยว่าทำไมผู้เขียนถึงค้นหา svc 0x80 แทน mov w16, #26

  • ผู้เขียนพร้อมตอบคำถาม

  • วิดีโอด้านบนเป็นวิดีโอโปรแกรมมิงที่ยอดเยี่ยมมาก

    • เดินเรื่องเร็ว สมมุติฐานความรู้พื้นฐานเหมาะสม และมีเดโมที่ยอดเยี่ยมโดยไม่รบกวนจังหวะการนำเสนอ
  • สงสัยว่าแอปนี้เป็นแอปถูกกฎหมายหรือถูกดีบักเพราะน่าสงสัยว่าเป็นมัลแวร์

    • ถ้าไม่ใช่ ก็น่าจะต้องใช้ความพยายามมากทีเดียว
  • การข้าม PT_DENY_ATTACH (โหมดยาก)

    • แพตช์เคอร์เนลบน macOS เพื่อให้ PT_DENY_ATTACH ไม่ทำอะไรเลย
    • บน macOS การรันเคอร์เนลที่แพตช์แล้วทำได้ค่อนข้างง่าย
    • บน iOS น่าจะมีปัญหาเพิ่มอีกมาก (KTRR เป็นต้น)
    • XNU แม้ในทางเทคนิคจะเป็นโอเพนซอร์ส แต่การแพตช์ด้วย hexeditor ง่ายกว่าการคอมไพล์ใหม่
  • สงสัยเกี่ยวกับการแจ้งเตือน "com.apple.tw.twrr"

    • ทำไมถึงขึ้นต้นด้วย com.apple
    • แอปนั้นไม่ใช่แอปของ Apple
  • สงสัยว่ามีใครรู้จักคนที่ทำรีเวิร์สเอนจิเนียริงโค้ด JavaScript ของเว็บไซต์บ้างไหม

  • สงสัยว่าใน iPhone ที่เจลเบรกแล้วจะรัน custom kexts ได้หรือไม่

    • การแก้เคอร์เนลโดยตรงน่าจะเป็นวิธีที่เท่กว่า