การดีบักแอปพลิเคชันด้วย IDA

ในบทนี้ เราจะแนะนำวิธีการใช้ FIRERPA และฟังก์ชันและสคริปต์ที่เกี่ยวข้องเพื่อดีบักแอปพลิเคชัน Android อย่างรวดเร็ว สภาพแวดล้อมการสาธิตของเราคือระบบ Android 10, ระบบโฮสต์คือ Ubuntu 22.04 และได้ติดตั้งเครื่องมือที่เกี่ยวข้อง เช่น IDA 7.5 (wine), ADB, jdb, Python เป็นต้น เราขอแนะนำให้คุณใช้ IDA เวอร์ชัน 7.5 ขึ้นไป และติดตั้ง FIRERPA เวอร์ชันเซิร์ฟเวอร์ล่าสุด

การดีบักแบบไดนามิก

การตั้งค่าโหมดที่สามารถดีบักได้

ก่อนหน้านี้ หากระบบของคุณอยู่ในโหมดดีบักอยู่แล้ว คุณไม่จำเป็นต้องทำขั้นตอนนี้ มิฉะนั้น โปรดเปิดรีโมทเดสก์ท็อปของ FIRERPA และพิมพ์ setdebuggable ในเทอร์มินัล หลังจากป้อนคำสั่ง โทรศัพท์ของคุณจะทำการรีบูตแบบซอฟต์ แต่ไม่ต้องกังวล จะกลับสู่สถานะปกติในเวลาประมาณสองนาที ในตอนนี้ โทรศัพท์ของคุณจะอยู่ในโหมดที่สามารถดีบักได้แล้ว

การดีบักแบบไดนามิก

การติดตั้งบริการดีบักของ IDA

ก่อนที่จะทำการดีบักต่อไป คุณต้องอัปโหลดบริการฝั่งเซิร์ฟเวอร์สำหรับการดีบัก Android ที่มาพร้อมกับ IDA ไปยังอุปกรณ์ของคุณ คุณสามารถหา android_server และ android_server64 ได้ในไดเรกทอรี dbgsrv ของไดเรกทอรีการติดตั้ง IDA ของคุณ หากแอปพลิเคชันเป้าหมายที่คุณกำลังดีบักใช้ไลบรารีที่เชื่อมโยงแบบ 32 บิต โปรดใช้ android_server มิฉะนั้นให้ใช้ android_server64 ลากและวางไฟล์ที่คุณต้องการเพื่ออัปโหลด หรือใช้ adb push ไปยังอุปกรณ์ Android และให้สิทธิ์ในการเรียกใช้งาน

chmod 755 android_server*

หลังจากให้สิทธิ์ในการเรียกใช้งานแล้ว คุณต้องเริ่มบริการ android_server คุณสามารถรันโปรแกรมนี้ผ่าน adb (ต้องมีสิทธิ์ root) หรือผ่านเทอร์มินัลของรีโมทเดสก์ท็อป สำหรับระบบเวอร์ชันที่สูงกว่า (>=10) คุณต้องตั้งค่าตัวแปรสภาพแวดล้อม IDA_LIBC_PATH ล่วงหน้า

IDA_LIBC_PATH=/apex/com.android.runtime/lib64/bionic/libc.so ./android_server64 -kk

หมายเหตุ

สำหรับแอปพลิเคชันเป้าหมายที่เป็น 32 บิต คุณต้องแก้ไข IDA_LIBC_PATH เป็น /apex/com.android.runtime/lib/bionic/libc.so และใช้บริการดีบัก android_server แบบ 32 บิต

การส่งต่อบริการดีบักของ IDA

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

adb forward tcp:23946 tcp:23946

หมายเหตุ

23946 คือพอร์ตเริ่มต้นที่ android_server ของ IDA รอรับการเชื่อมต่อ หากคุณได้แก้ไขพอร์ตนี้เมื่อเริ่ม android_server โปรดระบุพอร์ตใหม่

เริ่มการดีบักแอปพลิเคชัน

เราไม่ได้ทำงานอะไรมากมาย เพียงแค่ได้ห่อหุ้มสคริปต์ที่สามารถช่วยให้คุณดำเนินการส่วนใหญ่ที่ตามมาโดยอัตโนมัติ เพียงทำตามคำแนะนำที่แสดงผลจากสคริปต์ คุณสามารถหาสคริปต์ ida.py ได้ในไดเรกทอรี tools ของโปรเจกต์ และใช้คำสั่งต่อไปนี้

python3 ida.py -d 192.168.0.2 -a com.android.settings

การดีบักแบบไดนามิก

ในคำสั่งนี้ พารามิเตอร์ -d คือ IP ของอุปกรณ์ของคุณ ซึ่งก็คือ IP ของอุปกรณ์ที่รันบริการ FIRERPA และพารามิเตอร์ -a คือชื่อแพ็คเกจของแอปพลิเคชัน หลังจากรันคำสั่ง คุณจะได้รับแจ้งให้ทำการแนบ (attach) โปรแกรม IDA ของคุณเข้ากับโพรเซสของแอปพลิเคชันต่อไป

การดีบักแบบไดนามิก

การดีบักแบบไดนามิก

การดีบักแบบไดนามิก

การดีบักแบบไดนามิก

เอาล่ะ กระบวนการทั้งหมดเสร็จสิ้นแล้ว โปรดกลับไปที่บรรทัดคำสั่งของ ida.py และกดปุ่ม Enter ตอนนี้คุณสามารถทำการดีบักต่อไปได้แล้ว