การดีบักแอปที่ดีบักไม่ได้
- เมื่อไม่นานมานี้ได้เจอกับแอปที่ดีบักไม่ได้ แอปนี้บล็อกการเชื่อมต่อดีบักเกอร์, ปิดตัวลงตั้งแต่เนิ่น ๆ เมื่อมีการฉีดโค้ด และหากรันบนอุปกรณ์ที่เจลเบรกจะทำให้ทั้งเครื่องล่ม
- แอป 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 ความคิดเห็น
ความเห็นจาก Hacker News
Bryce Bostwick ทำงานด้านการดีบักและรีเวิร์สเอนจิเนียริงแอปที่ทั้งเจ๋งและสร้างแรงบันดาลใจมาก
ใน DOS/Windows เทคนิค anti-debugging เป็นเรื่องปกติมานานแล้ว
น่าแปลกใจที่การตรวจของ App Store ของ Apple ไม่ปฏิเสธแอปที่เรียก system call โดยตรง
สงสัยว่าทำไมผู้เขียนถึงค้นหา
svc 0x80แทนmov w16, #26ผู้เขียนพร้อมตอบคำถาม
วิดีโอด้านบนเป็นวิดีโอโปรแกรมมิงที่ยอดเยี่ยมมาก
สงสัยว่าแอปนี้เป็นแอปถูกกฎหมายหรือถูกดีบักเพราะน่าสงสัยว่าเป็นมัลแวร์
การข้าม PT_DENY_ATTACH (โหมดยาก)
สงสัยเกี่ยวกับการแจ้งเตือน "com.apple.tw.twrr"
สงสัยว่ามีใครรู้จักคนที่ทำรีเวิร์สเอนจิเนียริงโค้ด JavaScript ของเว็บไซต์บ้างไหม
สงสัยว่าใน iPhone ที่เจลเบรกแล้วจะรัน custom kexts ได้หรือไม่