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

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

![การดีบักแบบไดนามิก](/assets/images/IDA.png)

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

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

![การดีบักแบบไดนามิก](/assets/images/debugger-setdebuggable.png)

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

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

```bash
chmod 755 android_server*
```

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

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

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

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

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

```bash
adb forward tcp:23946 tcp:23946
```

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

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

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

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

![การดีบักแบบไดนามิก](/assets/images/debugger-cmd.png)

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

![การดีบักแบบไดนามิก](/assets/images/debugger-attach.png)

![การดีบักแบบไดนามิก](/assets/images/debugger-setup.png)

<p align="center" style="margin-top:0px">
<img src="/assets/images/debugger-choice.png" alt="การดีบักแบบไดนามิก">
</p>

![การดีบักแบบไดนามิก](/assets/images/debugger-start.png)

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