บทความ

คุณกำลังพัฒนาหรือทดสอบแอปมือถือ และต้องการรู้แน่ชัดว่าแอปส่งคำขออะไรไปยังเซิร์ฟเวอร์ และได้รับอะไรกลับมาบ้าง? คู่มือแบบทีละขั้นตอนนี้จะพาคุณจากศูนย์ไปจนถึงการควบคุมทราฟฟิกเครือข่ายของแอปของคุณเองอย่างสมบูรณ์ เราจะเจาะลึกเครื่องมือยอดนิยมประจำปี 2026 เรียนรู้การติดตั้งใบรับรองที่เชื่อถือได้บนโทรศัพท์ อีมูเลเตอร์ และซิมูเลเตอร์ รวมถึงวิธีเลี่ยง SSL pinning ใน debug builds อย่างปลอดภัยด้วยวิธีการมาตรฐาน

สำคัญตั้งแต่เริ่มต้น: ทุกสิ่งที่อธิบายด้านล่างนี้ใช้กับแอปของคุณเองเท่านั้น หรือกับแอปที่คุณได้รับอนุญาตเป็นลายลักษณ์อักษรจากเจ้าของให้ตรวจสอบ นี่คือเนื้อหาสำหรับวิศวกร QA และนักพัฒนา ไม่ใช่คำแนะนำเกี่ยวกับการแทรกแซงแอปของผู้อื่น เราจะพูดถึงเรื่องนี้โดยละเอียดในส่วนเกี่ยวกับกฎและจริยธรรม

บทนำ: ทำไมนักพัฒนาและผู้ทดสอบถึงต้องเห็นทราฟฟิกของแอปตัวเอง

แอปมือถือสื่อสารกับเซิร์ฟเวอร์ตลอดเวลา: เข้าสู่ระบบ ดึงแคตตาล็อกสินค้า ส่งข้อมูลวิเคราะห์ ซิงค์ข้อมูล ตราบใดที่ทุกอย่างทำงาน คำขอเหล่านี้จะมองไม่เห็น แต่ทันทีที่มีอะไรพัง คำถามก็จะเหมือนเดิมเสมอ: อะไรถูกส่งไปยังเซิร์ฟเวอร์และอะไรกลับมา?

ความสามารถในการอ่านทราฟฟิกของแอปของคุณช่วยแก้ปัญหาได้หลายอย่าง:

  • ตรวจสอบการเชื่อมต่อ (Integrations) คุณจะเห็นรูปแบบคำขอไปยัง API ของคุณอย่างแม่นยำ ทั้งส่วนหัว เนื้อหา และรหัสตอบกลับ ทำให้ง่ายต่อการรู้ว่าใครผิด: ไคลเอนต์หรือแบ็กเอนด์
  • จำลองข้อบกพร่อง (Reproduce Bugs) เมื่อผู้ทดสอบรายงานปัญหา คุณสามารถดูลำดับคำขอจริงและลองทำซ้ำตามสถานการณ์นั้นได้
  • ตรวจสอบการรั่วไหล (Audit Leaks) คุณสามารถตรวจสอบว่ามีข้อมูลที่ไม่จำเป็นหลุดออกไปหรือไม่ เช่น โทเค็นในบันทึก ข้อมูลส่วนตัวในการวิเคราะห์ หรือฟิลด์ที่เกินความจำเป็น
  • ทดสอบสถานการณ์ข้อผิดพลาด คุณสามารถปลอมแปลงการตอบสนองของเซิร์ฟเวอร์และดูว่าแอปทำงานอย่างไรเมื่อเกิดข้อผิดพลาด 500 หรือหมดเวลา

สิ่งที่คุณจะได้รับเมื่อจบ

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

คู่มือนี้เหมาะกับใคร

เนื้อหานี้เขียนขึ้นสำหรับวิศวกร QA นักพัฒนาแอปมือถือ และผู้เชี่ยวชาญด้านเทคนิคที่ต้องการเข้าใจเลเยอร์เครือข่ายของแอปของตน ระดับ: สำหรับมือใหม่ แต่มีองค์ประกอบสำหรับขั้นสูง

สิ่งที่ต้องรู้ล่วงหน้า

แค่ความเข้าใจพื้นฐานว่า HTTP request, server และ client คืออะไรก็เพียงพอ ความรู้เกี่ยวกับบรรทัดคำสั่งจะเป็นข้อดี แต่เราจะพูดถึงเครื่องมือแบบกราฟิกด้วย ไม่จำเป็นต้องมีความรู้เชิงลึกด้านการเข้ารหัส

ใช้เวลาเท่าไหร่

การตั้งค่าครั้งแรกจะใช้เวลาประมาณหนึ่งถึงสองชั่วโมง รวมถึงการติดตั้งเครื่องมือและใบรับรอง การเริ่มใช้งานครั้งต่อไปจะใช้เวลาเพียงไม่กี่นาที

การเตรียมการเบื้องต้น: เครื่องมือ ข้อกำหนด และสิ่งที่ต้องติดตั้ง

ก่อนจะดำดิ่งสู่ทราฟฟิก มาสร้างสภาพแวดล้อมการทำงานกันก่อน เราจะสำรวจเครื่องมือยอดนิยมสี่ตัวและเลือกตัวที่เหมาะกับคุณ

เปรียบเทียบเครื่องมือ: mitmproxy, Charles, Proxyman และ Burp

เครื่องมือแต่ละตัวสามารถทำงานเป็น MITM proxy ซึ่งหมายถึงเป็นตัวกลางระหว่างแอปของคุณและเซิร์ฟเวอร์ ความแตกต่างอยู่ที่อินเทอร์เฟซ ราคา และความสะดวก

  • mitmproxy ฟรีและโอเพนซอร์ส ทำงานในเทอร์มินัล แต่ก็มีเว็บอินเทอร์เฟซ mitmweb ด้วย เหมาะสำหรับผู้ที่ชอบสคริปต์และระบบอัตโนมัติด้วย Python รองรับหลายแพลตฟอร์ม
  • Charles เสียเงิน แต่มีช่วงทดลองใช้ อินเทอร์เฟซกราฟิกคลาสสิกบน Java ทำงานบน Windows, macOS และ Linux ได้รับความนิยมมากในหมู่ QA มือถือเพราะความเรียบง่าย
  • Proxyman เครื่องมือทันสมัยที่มีอินเทอร์เฟซสวยงาม เดิมออกแบบมาสำหรับ macOS แต่มีเวอร์ชันสำหรับ Windows และ Linux สะดวกในการตั้งค่าใบรับรองอัตโนมัติ
  • Burp Suite เครื่องมือจากโลกความปลอดภัย ทรงพลัง มี Community Edition ฟรี มากเกินไปสำหรับการดูทราฟฟิกทั่วไป แต่มีประโยชน์สำหรับการวิเคราะห์ขั้นสูง

คำแนะนำ: หากคุณเป็นมือใหม่และต้องการเห็นผลลัพธ์เร็ว ๆ ให้เริ่มด้วย Charles หรือ Proxyman หากคุณชอบเทอร์มินัลและระบบอัตโนมัติ ให้ติดตั้ง mitmproxy สำหรับเป้าหมายของคู่มือนี้ เราจะยึด mitmproxy และ Charles เป็นตัวเลือกที่ใช้งานได้ทั่วไปที่สุด

ข้อกำหนดของระบบ

  • คอมพิวเตอร์ที่ใช้ Windows, macOS หรือ Linux และมีสิทธิ์ผู้ดูแลระบบ
  • อุปกรณ์มือถือหรืออีมูเลเตอร์ Android หรือซิมูเลเตอร์ iOS
  • เครือข่าย Wi-Fi เดียวกันสำหรับโทรศัพท์และคอมพิวเตอร์ หรืออีมูเลเตอร์ที่ตั้งค่าไว้แล้ว
  • การเข้าถึงซอร์สโค้ดของแอปของคุณเพื่อสร้างเวอร์ชัน debug

สิ่งที่ต้องดาวน์โหลดและติดตั้ง

  1. ดาวน์โหลดเครื่องมือพร็อกซีที่เลือกจากเว็บไซต์ทางการ สำหรับ mitmproxy ให้ใช้ตัวติดตั้งสำหรับ OS ของคุณหรือแพ็กเกจผ่านตัวจัดการแพ็กเกจ
  2. ติดตั้งเครื่องมือตามตัวช่วยติดตั้งมาตรฐานของระบบ
  3. สำหรับ Android emulator ให้ติดตั้ง Android Studio พร้อมอีมูเลเตอร์และอิมเมจระบบที่ไม่มีบริการของ Google หากคุณต้องการทำงานกับที่เก็บใบรับรองระบบได้ง่าย
  4. สำหรับ iOS simulator บน macOS ให้ติดตั้ง Xcode จาก App Store

⚠️ ข้อควรระวัง: ดาวน์โหลดเครื่องมือจากเว็บไซต์ทางการของผู้พัฒนาเท่านั้น โปรแกรมพร็อกซีสามารถเข้าถึงทราฟฟิกได้ลึก ดังนั้นของปลอมอาจเป็นอันตราย ตรวจสอบลายเซ็นของตัวติดตั้งหากเป็นไปได้

การสำรองข้อมูลและการเตรียมอุปกรณ์

การทำงานกับใบรับรองและการตั้งค่าเครือข่ายโดยทั่วไปปลอดภัยและย้อนกลับได้ แต่ควรสำรองไว้ก่อน

  1. บันทึกการตั้งค่า Wi-Fi ปัจจุบันของโทรศัพท์ เพื่อจะได้เปลี่ยนกลับได้ในภายหลัง
  2. ใช้อุปกรณ์ทดสอบแยกต่างหากหรือโปรไฟล์สำหรับการทดลอง ไม่ใช่โทรศัพท์ทำงานหลักของคุณ
  3. หากทำงานกับอุปกรณ์ที่ทำงาน ให้จดจำว่าใบรับรองใดที่คุณติดตั้ง เพื่อจะได้ลบทิ้งหลังการดีบัก

✅ ตรวจสอบ: ในขั้นตอนนี้ คุณควรมีเครื่องมือพร็อกซีที่ติดตั้งแล้ว อุปกรณ์ทดสอบหรืออีมูเลเตอร์ที่พร้อมใช้งาน และการเข้าถึงบิลด์ของแอปของคุณ

แนวคิดพื้นฐาน: MITM proxy ทำงานอย่างไร และทำไมถึงต้องมีใบรับรองของตัวเอง

เพื่อให้ก้าวต่อไปได้อย่างมั่นใจ มาทำความเข้าใจคำศัพท์สำคัญด้วยภาษาง่าย ๆ นี่คือรากฐานที่หากไม่มีขั้นตอนต่าง ๆ ก็จะดูเหมือนเวทมนตร์

MITM proxy คืออะไร

MITM ย่อมาจาก man-in-the-middle หรือคนที่อยู่ตรงกลาง พร็อกซีจะยืนอยู่ระหว่างแอปของคุณกับเซิร์ฟเวอร์ แอปคิดว่ากำลังคุยกับเซิร์ฟเวอร์ ส่วนเซิร์ฟเวอร์คิดว่ากำลังคุยกับแอป แต่จริง ๆ แล้วทั้งคู่กำลังคุยกับพร็อกซี ซึ่งมองเห็นและสามารถแสดงทราฟฟิกทั้งหมดได้

สำหรับ HTTP ปกติจะทำงานได้ทันทีเพราะข้อมูลถูกส่งในรูปแบบข้อความธรรมดา แต่แอปสมัยใหม่ใช้ HTTPS ซึ่งทราฟฟิกถูกเข้ารหัส ตรงนี้แหละที่เริ่มน่าสนใจ

เกิดอะไรขึ้นระหว่าง TLS handshake

HTTPS สร้างขึ้นบนโปรโตคอล TLS เมื่อแอปเชื่อมต่อกับเซิร์ฟเวอร์ พวกมันจะทำการจับมือ (handshake) เซิร์ฟเวอร์จะเสนอใบรับรองเพื่อยืนยันว่ามันคือสิ่งที่มันอ้างว่าเป็น แอปจะตรวจสอบใบรับรองนี้ตามรายชื่อหน่วยงานออกใบรับรอง (CA) ที่เชื่อถือได้

หน่วยงานออกใบรับรอง (CA) คือองค์กรที่อุปกรณ์ต่าง ๆ เชื่อถือ ลายเซ็นของ CA บนใบรับรองของเซิร์ฟเวอร์ทำให้แอปมั่นใจว่าการเชื่อมต่อปลอดภัย

ทำไมถึงต้องมีใบรับรอง CA ของตัวเอง

เพื่อให้พร็อกซีสามารถแสดงทราฟฟิกที่เข้ารหัสได้ พร็อกซีจะต้องทำตัวเป็นเซิร์ฟเวอร์สำหรับแอป โดยพร็อกซีจะสร้างใบรับรองสำหรับแต่ละโดเมนที่ร้องขอขึ้นมาแบบทันที และเซ็นด้วยใบรับรอง CA root ของตัวเอง

แต่แอปโดยค่าเริ่มต้นจะไม่เชื่อถือ CA ที่สร้างขึ้นเองนี้ เราจึงต้องติดตั้งใบรับรอง root ของพร็อกซีในที่เก็บใบรับรองที่เชื่อถือได้ของอุปกรณ์ด้วยตนเอง หลังจากนั้นแอปจะเห็นลายเซ็นของพร็อกซีว่าเชื่อถือได้ และยอมรับการเชื่อมต่อ

คำแนะนำ: ให้คิดว่าใบรับรอง root ของพร็อกซีเป็นเหมือนบัตรผ่าน หากคุณไม่มอบบัตรผ่านนี้ให้อุปกรณ์ มันจะไม่ยอมให้พร็อกซีอ่านทราฟฟิกที่เข้ารหัส

ทำไมถ้าไม่เชื่อถือจะเห็นเพียงชื่อโฮสต์ใน SNI

หากไม่ได้ติดตั้งใบรับรองของพร็อกซี แอปจะปฏิเสธที่จะสร้างการเชื่อมต่อที่ปลอดภัยผ่านพร็อกซี แต่ก็ยังมีบางอย่างที่มองเห็นได้ ในการจับมือ TLS จะมีการส่งฟิลด์ SNI ซึ่งเป็นชื่อเซิร์ฟเวอร์ที่กำลังเชื่อมต่ออยู่ จำเป็นต้องใช้เพื่อให้เซิร์ฟเวอร์รู้ว่ากำลังขอเว็บไซต์ใด

ดังนั้นแม้จะไม่เชื่อถือใบรับรอง คุณก็จะเห็นรายชื่อโดเมนที่แอปเรียกใช้ แต่จะไม่สามารถอ่านเนื้อหาของคำขอและคำตอบได้ หากต้องการอ่านเนื้อหา ต้องติดตั้งและเชื่อถือใบรับรอง

SSL pinning คืออะไร

SSL pinning หรือการยึดใบรับรอง เป็นการป้องกันเพิ่มเติม แอปจะเก็บลายนิ้วมือ (fingerprint) ของใบรับรองหรือคีย์ของเซิร์ฟเวอร์ที่คาดหวังไว้ภายใน และตรวจสอบว่าเซิร์ฟเวอร์นำเสนอใบรับรองนั้นจริงหรือไม่ แม้จะมีใบรับรองพร็อกซีที่เชื่อถือได้ในระบบ แอปที่มี pinning ก็จะปฏิเสธเพราะลายนิ้วมือไม่ตรงกัน เราจะพูดถึงการทำงานกับ pinning ใน debug builds ของคุณแยกต่างหาก

✅ ตรวจสอบ: คุณเข้าใจแล้วว่าพร็อกซีแสดงทราฟฟิกโดยการเป็นตัวกลาง และการอ่าน HTTPS จำเป็นต้องมีใบรับรอง root ของพร็อกซีที่เชื่อถือได้บนอุปกรณ์

ขั้นตอนที่ 1: ตั้งค่าพร็อกซีในเครือข่ายบน Android และ iOS

เป้าหมายของขั้นตอน: ส่งทราฟฟิกอินเทอร์เน็ตทั้งหมดของโทรศัพท์ผ่านคอมพิวเตอร์ของคุณซึ่งกำลังรันเครื่องมือพร็อกซี

เตรียมคอมพิวเตอร์และหา IP ของมัน

  1. ตรวจสอบให้แน่ใจว่าคอมพิวเตอร์และโทรศัพท์เชื่อมต่อกับเครือข่าย Wi-Fi เดียวกัน
  2. เปิดเครื่องมือพร็อกซี สำหรับ mitmweb ให้พิมพ์คำสั่งรันเว็บอินเทอร์เฟซในเทอร์มินัล สำหรับ Charles แค่เปิดแอป
  3. ตรวจสอบว่าพร็อกซีฟังอยู่ที่พอร์ตใด โดยค่าเริ่มต้น mitmproxy ใช้พอร์ต 8080 ส่วน Charles ใช้ 8888 หรือ 8080 ขึ้นอยู่กับเวอร์ชัน
  4. หาที่อยู่ IP ในเครื่องของคอมพิวเตอร์ในเครือข่าย บน Windows ใช้คำสั่งดูการตั้งค่าเครือข่าย บน macOS และ Linux ใช้คำสั่งที่คล้ายกันในเทอร์มินัล ที่อยู่ IP จะประมาณ 192.168.1.15

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

ตั้งค่าพร็อกซีบน Android

  1. เปิดแอป Settings บนโทรศัพท์
  2. ไปที่ Network & Internet จากนั้น Wi-Fi
  3. แตะชื่อเครือข่ายปัจจุบันของคุณเพื่อเปิดการตั้งค่า
  4. หา Advanced หรือไอคอนดินสอเพื่อแก้ไขเครือข่าย
  5. ในช่อง Proxy เลือก Manual
  6. ในช่อง Proxy hostname ป้อนที่อยู่ IP ของคอมพิวเตอร์ เช่น 192.168.1.15
  7. ในช่อง Port ป้อนพอร์ตพร็อกซี เช่น 8080
  8. บันทึกการตั้งค่าโดยกด Save

ตั้งค่าพร็อกซีบน iOS

  1. เปิดแอป Settings
  2. ไปที่ Wi-Fi
  3. แตะไอคอนข้อมูลสีน้ำเงินข้างชื่อเครือข่ายของคุณ
  4. เลื่อนลงไปที่ HTTP Proxy
  5. เลือก Configure Proxy เป็น Manual
  6. ในช่อง Server ป้อนที่อยู่ IP ของคอมพิวเตอร์
  7. ในช่อง Port ป้อนพอร์ตพร็อกซี
  8. กลับไปที่หน้าก่อนหน้า การตั้งค่าจะถูกบันทึกโดยอัตโนมัติ

⚠️ ข้อควรระวัง: หลังจากตั้งค่าพร็อกซีแล้ว ทราฟฟิกอินเทอร์เน็ตทั้งหมดของโทรศัพท์จะผ่านคอมพิวเตอร์ หากปิดเครื่องมือพร็อกซี อินเทอร์เน็ตบนโทรศัพท์จะไม่ทำงาน นี่เป็นเรื่องปกติ: เพียงเปิดพร็อกซีหรือยกเลิกการตั้งค่า

ผลลัพธ์ที่คาดหวัง

เปิดเบราว์เซอร์บนโทรศัพท์แล้วเข้าไปยังเว็บไซต์ง่าย ๆ ที่ใช้ HTTP ในส่วนติดต่อพร็อกซีควรมีรายการคำขอปรากฏขึ้น ตอนนี้ HTTPS จะแสดงเพียงชื่อโฮสต์ เนื่องจากยังไม่ได้ติดตั้งใบรับรอง

ปัญหาที่อาจเกิดขึ้น: หากไม่มีอะไรปรากฏ ให้ตรวจสอบว่าโทรศัพท์และคอมพิวเตอร์อยู่ในเครือข่ายเดียวกัน ว่าคุณป้อน IP และพอร์ตถูกต้อง และไม่มีไฟร์วอลล์บนคอมพิวเตอร์บล็อกการเชื่อมต่อ

✅ ตรวจสอบ: ในหน้าต่างพร็อกซีจะเห็นคำขอที่เข้ามาจากโทรศัพท์ อย่างน้อยก็ในรูปแบบรายชื่อโดเมน

ขั้นตอนที่ 2: ติดตั้งและเชื่อถือใบรับรอง root

เป้าหมายของขั้นตอน: ทำให้อุปกรณ์เชื่อถือใบรับรอง root ของพร็อกซี และอนุญาตให้อ่านเนื้อหาของคำขอ HTTPS

ดาวน์โหลดใบรับรองของพร็อกซี

เมื่อตั้งค่าพร็อกซีและโทรศัพท์ใช้งานผ่านแล้ว มีวิธีสะดวกในการรับใบรับรองบนอุปกรณ์โดยตรง

  1. เปิดเบราว์เซอร์บนโทรศัพท์
  2. สำหรับ mitmproxy ให้ไปที่ที่อยู่บริการพิเศษ mitm.it หน้านี้จะปรากฏเฉพาะเมื่อทราฟฟิกผ่าน mitmproxy
  3. คุณจะเห็นปุ่มสำหรับแพลตฟอร์มต่าง ๆ เลือกปุ่มที่เหมาะสม เช่น Android หรือ Apple
  4. ไฟล์ใบรับรองจะถูกดาวน์โหลด
  5. สำหรับ Charles ใบรับรองสามารถเข้าถึงได้ผ่านที่อยู่บริการที่โปรแกรมแสดงในเมนูช่วยเหลือ

การติดตั้งบน Android 7 ขึ้นไป

ตั้งแต่ Android 7 เป็นต้นมา ระบบจะแยกที่เก็บใบรับรองเป็นสองประเภท: ที่เก็บผู้ใช้และที่เก็บระบบ นี่คือประเด็นสำคัญมาก

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

ในการติดตั้งในที่เก็บผู้ใช้ ให้ทำตามขั้นตอน:

  1. เปิด Settings จากนั้น Security
  2. หา Encryption & credentials หรือ Additional security settings
  3. เลือก Install certificate จากนั้น CA certificate
  4. ระบบจะเตือนถึงความเสี่ยง ยืนยันการติดตั้ง
  5. ระบุไฟล์ใบรับรองที่ดาวน์โหลดมา
  6. ตั้งชื่อใบรับรองให้เข้าใจง่าย เช่น DebugProxy

สำคัญ: เนื่องจากการแยกที่เก็บนี้บน Android 7 ขึ้นไป แอปของคุณอาจไม่เห็นทราฟฟิกแม้จะติดตั้งใบรับรองในที่เก็บผู้ใช้แล้วก็ตาม วิธีแก้ไขผ่านการตั้งค่าแอปจะกล่าวถึงในขั้นตอนเกี่ยวกับ pinning

การติดตั้งและเชื่อถือบน iOS

บน iOS กระบวนการแบ่งเป็นสองขั้นตอน: การติดตั้งโปรไฟล์และการเปิดใช้งานความเชื่อถือ

  1. หลังจากดาวน์โหลดใบรับรอง iOS จะแจ้งว่า Profile Downloaded
  2. เปิด Settings ที่ด้านบนจะมีหัวข้อ Profile Downloaded
  3. แตะที่มันแล้วเลือก Install ที่มุมขวาบน
  4. ป้อนรหัสผ่านอุปกรณ์หากตั้งไว้
  5. ยืนยันการติดตั้งโปรไฟล์

ตอนนี้ขั้นตอนสำคัญที่มักถูกลืม: การเปิดใช้งานความเชื่อถือเต็มรูปแบบ:

  1. เปิด Settings จากนั้น General
  2. ไปที่ About
  3. เลื่อนลงไปที่ Certificate Trust Settings
  4. หาใบรับรองพร็อกซีของคุณในรายการ
  5. เปิดสวิตช์ข้างใบรับรองเพื่อเปิดใช้งานความเชื่อถือเต็มรูปแบบสำหรับใบรับรอง root

⚠️ ข้อควรระวัง: หากไม่เปิดสวิตช์ในส่วน Certificate Trust Settings iOS จะถือว่าติดตั้งใบรับรองแล้วแต่ไม่เชื่อถือ HTTPS traffic จะไม่ถูกอ่าน นี่คือข้อผิดพลาดที่พบบ่อยที่สุดสำหรับมือใหม่บน iOS

ผลลัพธ์ที่คาดหวัง

เปิดเบราว์เซอร์แล้วไปที่เว็บไซต์ใด ๆ ที่ใช้ HTTPS ตอนนี้ในพร็อกซีคุณจะเห็นเนื้อหาคำขอและคำตอบแบบเต็ม ไม่ใช่แค่ชื่อโดเมน

✅ ตรวจสอบ: ในเครื่องมือพร็อกซีจะแสดงเนื้อหาที่ถูกถอดรหัสของคำขอ HTTPS จากเบราว์เซอร์โทรศัพท์

ขั้นตอนที่ 3: ทำแบบเดียวกันบน Android Emulator และ iOS Simulator

เป้าหมายของขั้นตอน: ตั้งค่าการดักจับทราฟฟิกโดยไม่ต้องใช้อุปกรณ์จริง โดยตรงบนคอมพิวเตอร์นักพัฒนา

Android Emulator

อีมูเลเตอร์สะดวกตรงที่คุณสามารถใช้อิมเมจที่ไม่มีบริการ Google และเข้าถึงที่เก็บใบรับรองของระบบได้

  1. ใน Android Studio เปิด Device Manager แล้วสร้างอุปกรณ์เสมือน
  2. เมื่อเลือกอิมเมจระบบ ให้เลือกเวอร์ชันที่ไม่มีคำว่า Google Play เพื่อให้มีสิทธิ์เข้าถึงพาร์ติชันระบบ
  3. รันอีมูเลเตอร์
  4. ในการตั้งค่าขั้นสูงของอีมูเลเตอร์ คุณสามารถระบุพร็อกซีโดยตรง หรือตั้งค่าในการตั้งค่า Wi-Fi ภายในอีมูเลเตอร์เหมือนกับโทรศัพท์จริง
  5. สำหรับที่เก็บระบบ ให้ใช้เครื่องมือบรรทัดคำสั่งที่อนุญาตให้รีสตาร์ทอีมูเลเตอร์ด้วยสิทธิ์เขียนพาร์ติชันระบบและเพิ่มใบรับรองที่นั่น

คำแนะนำ: อีมูเลเตอร์ที่ไม่มีบริการ Google และสามารถเข้าถึงที่เก็บระบบจะช่วยให้คุณหลีกเลี่ยงปัญหามากมายเกี่ยวกับความเชื่อถือใบรับรอง เป็นตัวเลือกที่ดีที่สุดสำหรับการดีบักเป็นประจำ

iOS Simulator

iOS Simulator บน macOS ใช้ใบรับรองที่เชื่อถือได้ของ macOS เอง ซึ่งทำให้การตั้งค่าง่ายขึ้น

  1. ติดตั้งใบรับรอง root ของพร็อกซีใน keychain ของระบบ Mac ของคุณ
  2. เปิดแอป Keychain Access หาใบรับรองพร็อกซี
  3. ดับเบิลคลิกเปิดแล้วในส่วน Trust เลือก Always Trust
  4. รันซิมูเลเตอร์ผ่าน Xcode ซิมูเลเตอร์จะสืบทอดความเชื่อถือใบรับรองจาก macOS
  5. ทราฟฟิกของซิมูเลเตอร์จะผ่านพร็อกซีระบบของ Mac หากตั้งค่าไว้ หรือผ่านพร็อกซีที่ระบุในการตั้งค่าเครือข่าย

ผลลัพธ์ที่คาดหวัง ในทั้งสองกรณี คุณจะเห็นทราฟฟิกที่ถูกถอดรหัสของแอปทดสอบหรือเบราว์เซอร์ที่รันในอีมูเลเตอร์หรือซิมูเลเตอร์

ปัญหาที่อาจเกิดขึ้น หาก Android Emulator ไม่รับการตั้งค่าพร็อกซี ให้ตรวจสอบการตั้งค่า Wi-Fi ภายในอีมูเลเตอร์และพารามิเตอร์การรัน สำหรับ iOS Simulator ตรวจสอบว่าใบรับรองใน keychain ถูกทำเครื่องหมายว่าเชื่อถือได้

✅ ตรวจสอบ: ทราฟฟิกจากอีมูเลเตอร์หรือซิมูเลเตอร์สามารถอ่านได้ในเครื่องมือพร็อกซีในรูปแบบถอดรหัส

ขั้นตอนที่ 4: การทำงานกับ SSL pinning ใน debug build ของคุณ

เป้าหมายของขั้นตอน: ทำความเข้าใจว่าแอปมีการยึดใบรับรองหรือไม่ และลดระดับความเข้มงวดอย่างถูกต้องเฉพาะใน debug build โดยใช้วิธีการมาตรฐานของแพลตฟอร์ม

นี่คือส่วนที่สำคัญที่สุด ดังนั้นเราจะพิจารณาอย่างรอบคอบ

จะรู้ได้อย่างไรว่าเปิด pinning อยู่

หากติดตั้งและเชื่อถือใบรับรองพร็อกซีแล้ว เบราว์เซอร์แสดงทราฟฟิก แต่แอปของคุณยังไม่ทำงานหรือแสดงข้อผิดพลาดเกี่ยวกับเครือข่าย แสดงว่าน่าจะมี pinning

  • ในอินเทอร์เฟซพร็อกซี คุณจะเห็นการตัดการเชื่อมต่อในขั้นตอน TLS handshake สำหรับโดเมนของแอป
  • ในบันทึกของแอปอาจมีข้อความแสดงข้อผิดพลาดเกี่ยวกับการตรวจสอบใบรับรองหรือ chain ที่ไม่น่าเชื่อถือ
  • บ่อยครั้งที่นักพัฒนาก็รู้อยู่แล้วว่ามีการเพิ่ม pinning โดยตั้งใจเพื่อปกป้องเวอร์ชันที่เผยแพร่

การลดระดับ pinning บน Android ผ่าน network_security_config

Android มีกลไกมาตรฐานสำหรับการตั้งค่าความปลอดภัยเครือข่าย สามารถอนุญาตให้เชื่อถือใบรับรองผู้ใช้เฉพาะใน debug build ได้

  1. ในโปรเจกต์ ให้สร้างไฟล์การตั้งค่าความปลอดภัยเครือข่ายใน resources
  2. ในไฟล์นั้น ให้กำหนดกฎการเชื่อถือใบรับรองสำหรับการตั้งค่า debug โดยใช้บล็อกพิเศษสำหรับการแทนที่ debug
  3. ระบุว่าใน debug แอปจะเชื่อถือที่เก็บใบรับรองผู้ใช้
  4. เชื่อมโยงไฟล์นี้ใน manifest ของแอปผ่านแอตทริบิวต์ที่เกี่ยวข้อง
  5. ตรวจสอบให้แน่ใจว่าการแทนที่ debug ใช้เฉพาะเมื่อแอปถูกสร้างในโหมด debug และไม่เคยใช้ใน release

สำคัญ: บล็อกพิเศษสำหรับการแทนที่ debug จะทำงานก็ต่อเมื่อแอปถูกทำเครื่องหมายว่า debuggable เท่านั้น ใน release build กฎเหล่านี้จะถูกมองข้ามโดยระบบ ซึ่งรับประกันความปลอดภัย

การลดระดับการตรวจสอบบน iOS ผ่านการตั้งค่าใน Info.plist

บน iOS ความปลอดภัยในการขนส่งถูกควบคุมโดยกลไก ATS ใน debug build คุณสามารถลดระดับการตรวจสอบที่เข้มงวดสำหรับโดเมนเฉพาะของสภาพแวดล้อมทดสอบของคุณได้

  1. เปิดไฟล์ Info.plist ของการตั้งค่า debug ของคุณ
  2. เพิ่มการตั้งค่าความปลอดภัยในการขนส่งสำหรับโดเมนของเซิร์ฟเวอร์ทดสอบที่ต้องการ
  3. จำไว้ว่า ATS ควบคุมนโยบายการเชื่อมต่อ ส่วน pinning ที่เขียนในโค้ดของแอปต้องปิดการใช้งานแยกต่างหาก
  4. หาก pinning ถูกนำไปใช้ในโค้ด ให้เพิ่มเงื่อนไขที่การตรวจสอบลายนิ้วมือจะทำงานเฉพาะใน release config เท่านั้น

⚠️ ข้อควรระวัง: อย่าทิ้งการตรวจสอบที่ลดระดับไว้ใน release build เพราะจะทำให้เกิดช่องโหว่จริงสำหรับผู้ใช้แอปของคุณ การเปลี่ยนแปลงทั้งหมดต้องใช้เฉพาะใน debug config และหายไปโดยอัตโนมัติใน release

ทำไมต้องเฉพาะ debug และไม่ใช่ release

SSL pinning ปกป้องผู้ใช้แอปของคุณจากการดักจับทราฟฟิก การปิดการใช้งานใน debug คุณทำบนอุปกรณ์ที่คุณควบคุม เพื่อการวินิจฉัย อย่างมีสติ และชั่วคราว ใน release การป้องกันนี้สำคัญมากและควรคงความเข้มงวดสูงสุด

คำแนะนำ: แยกตรรกะการตรวจสอบใบรับรองตาม flag ของ build ตั้งค่าให้แม้แต่การสร้าง release โดยไม่ได้ตั้งใจก็ไม่สามารถมีการตรวจสอบที่ลดระดับได้ เพื่อป้องกันข้อผิดพลาดของมนุษย์

ผลลัพธ์ที่คาดหวัง

หลังจากตั้งค่า debug build อย่างถูกต้อง แอปของคุณจะสร้างการเชื่อมต่อผ่านพร็อกซี และคุณจะเห็นคำขอและคำตอบที่ถูกถอดรหัส

✅ ตรวจสอบ: คำขอของแอปของคุณไปยัง API จะแสดงในพร็อกซีในรูปแบบที่อ่านได้ และการเปลี่ยนแปลงนี้มีผลเฉพาะ debug build เท่านั้น

ขั้นตอนที่ 5: อ่านและวิเคราะห์ทราฟฟิก

เป้าหมายของขั้นตอน: เรียนรู้การค้นหาคำขอที่ต้องการ กรองสิ่งที่รบกวน ส่งออกข้อมูล ทำซ้ำคำขอ และปลอมแปลงคำตอบ

ฟิลเตอร์และค้นหา

แม้แต่แอปเล็ก ๆ ก็สร้างคำขอได้หลายสิบรายการ ฟิลเตอร์ช่วยให้ค้นหาสิ่งที่ต้องการ

  1. ใช้ฟิลเตอร์ตามโดเมนเพื่อแสดงเฉพาะคำขอไปยัง API ของคุณ
  2. กรองตามประเภทเนื้อหา เช่น เฉพาะ JSON response
  3. ค้นหาตามสตริงในเนื้อหาของคำขอหรือคำตอบ เพื่อค้นหาการเรียกที่ต้องการอย่างรวดเร็ว
  4. ใน Charles มีแผนผังตามโฮสต์ที่ใช้งานง่าย ใน mitmweb มีฟิลเตอร์ที่ยืดหยุ่น

คำแนะนำ: ตั้งค่าฟิลเตอร์ให้แสดงเฉพาะโดเมนของแอปคุณ ซึ่งจะลบทราฟฟิกพื้นหลังของระบบและบริการอื่น ๆ ออกไปทันที

ส่งออกเป็น HAR

รูปแบบ HAR เป็นวิธีมาตรฐานในการบันทึกเซสชันทราฟฟิกเป็นไฟล์เดียว สะดวกในการส่งต่อให้ทีมแบ็กเอนด์หรือแนบไปกับรายงานบั๊ก

  1. เลือกคำขอที่ต้องการหรือทั้งเซสชัน
  2. เลือกตัวเลือกส่งออกเป็น HAR ในเมนูของเครื่องมือ
  3. บันทึกไฟล์และแนบไปกับงานใน tracker

ทำซ้ำคำขอ

บางครั้งจำเป็นต้องทำซ้ำคำขอเดิมหลายครั้ง เช่น เพื่อตรวจสอบ idempotency หรือจำลองบั๊ก

  1. เลือกคำขอที่ต้องการในรายการ
  2. ใช้ฟังก์ชันทำซ้ำ ใน Charles คือ Repeat ใน mitmproxy คือคำสั่งทำซ้ำ stream
  3. หากจำเป็น แก้ไขคำขอก่อนทำซ้ำ เช่น เปลี่ยนหัวข้อหรือเนื้อหา

ปลอมแปลงคำตอบเพื่อทดสอบสถานการณ์ข้อผิดพลาด

นี่คือความสามารถที่ทรงพลัง คุณสามารถทำให้แอปได้รับคำตอบที่ต้องการแทนคำตอบจริง

  1. ตั้งค่ากฎการปลอมแปลง ใน Charles คือฟังก์ชัน Map Local หรือ Breakpoints ใน mitmproxy คือสคริปต์ Python
  2. กำหนดว่าเมื่อมีการร้องขอไปยังที่อยู่ที่แน่นอน ให้ส่งคืนคำตอบที่เตรียมไว้ เช่น error 500 หรือรายการว่าง
  3. รันสถานการณ์ในแอปและดูว่าแอปจัดการกับข้อผิดพลาดอย่างไร

คำแนะนำ: การปลอมแปลงคำตอบเหมาะสำหรับการทดสอบพฤติกรรมของแอปเมื่ออินเทอร์เน็ตไม่ดี เมื่อเซิร์ฟเวอร์มีข้อผิดพลาด และเมื่อมีข้อมูลที่ไม่คาดคิด โดยไม่ต้องแตะแบ็กเอนด์จริง

✅ ตรวจสอบ: คุณสามารถกรองทราฟฟิก ส่งออก HAR ทำซ้ำคำขอ และปลอมแปลงคำตอบสำหรับแอปของคุณได้

Mobile Proxy ช่วยตรวจสอบแอปจากเครือข่ายและภูมิภาคอื่นได้อย่างไร

อีกเรื่องที่ควรพูดถึงคือ mobile proxy ซึ่งเป็นพร็อกซีเซิร์ฟเวอร์ที่ทำงานผ่านเครือข่ายมือถือจริง มีประโยชน์สำหรับการทดสอบว่าแอปของคุณทำงานอย่างไรเมื่อผู้ใช้เข้าถึงจากอินเทอร์เน็ตมือถือในภูมิภาคอื่น

ทำไม QA ถึงต้องใช้สิ่งนี้

  • ตรวจสอบเนื้อหาตามภูมิภาค แอปหลายตัวแสดงข้อมูลที่แตกต่างกันตามภูมิภาคของผู้ใช้ Mobile proxy ช่วยให้คุณเห็นแอปผ่านสายตาของผู้ใช้ในภูมิภาคที่ต้องการ
  • ทดสอบบนเครือข่ายมือถือ พฤติกรรมของแอปบนอินเทอร์เน็ตมือถือแตกต่างจาก Wi-Fi: ความหน่วงที่แตกต่าง, การเปลี่ยน IP, ลักษณะเฉพาะของเครือข่ายผู้ให้บริการ Mobile proxy ช่วยจำลองเงื่อนไขเหล่านี้
  • ตรวจสอบตรรกะตามภูมิศาสตร์ หากแบ็กเอนด์ของคุณระบุภูมิภาคตาม IP คุณสามารถตรวจสอบว่าตรรกะทำงานถูกต้องสำหรับสถานที่ต่าง ๆ

สำคัญ: ควรใช้ mobile proxy สำหรับการทดสอบแอปของคุณเองและภายใต้กรอบกฎหมายเท่านั้น เป็นเครื่องมือของ QA เพื่อตรวจสอบความถูกต้องของตรรกะตามภูมิภาค ไม่ใช่เครื่องมือในการเลี่ยงอะไรก็ตาม บริการ mobile proxy เช่น MobileProxy.space ให้การเข้าถึง IP มือถืออย่างถูกกฎหมายสำหรับงานดังกล่าว

คำแนะนำ: รวมการใช้งาน mobile proxy เพื่อเปลี่ยนจุดออกกับ MITM proxy ในเครื่องเพื่ออ่านทราฟฟิก ด้วยวิธีนี้คุณจะเห็นเนื้อหาคำขอและตรวจสอบพฤติกรรมตามภูมิภาคไปพร้อมกัน

ตรวจสอบผลลัพธ์: รายการตรวจสอบการตั้งค่าที่สำเร็จ

ลองดูรายการนี้เพื่อให้แน่ใจว่าทุกอย่างทำงานตามที่ควร

  • เครื่องมือพร็อกซีกำลังทำงานและฟังพอร์ตที่ถูกต้อง
  • โทรศัพท์, อีมูเลเตอร์ หรือซิมูเลเตอร์กำลังส่งทราฟฟิกผ่านพร็อกซี
  • ติดตั้งและเชื่อถือใบรับรอง root ของพร็อกซีบนอุปกรณ์แล้ว
  • HTTPS traffic ของเบราว์เซอร์สามารถอ่านได้ในรูปแบบถอดรหัส
  • ใน debug build ของแอป ได้ลดระดับ pinning ด้วยวิธีการมาตรฐานแล้ว
  • คำขอของแอปคุณไปยัง API แสดงในพร็อกซีอย่างสมบูรณ์
  • คุณสามารถกรอง, ส่งออก, ทำซ้ำ และปลอมแปลงคำขอได้

วิธีทดสอบ

  1. รัน debug build ของแอป
  2. ทำสถานการณ์ทั่วไป เช่น เข้าสู่ระบบและโหลดหน้าหลัก
  3. ตรวจสอบว่ามีคำขอไปยัง API ของคุณในพร็อกซีพร้อมเนื้อหาที่อ่านได้
  4. ทำซ้ำหนึ่งคำขอและปลอมแปลงหนึ่งคำตอบเพื่อตรวจสอบปฏิกิริยาของแอป

ตัวชี้วัดความสำเร็จ: คุณเห็นวงจรชีวิตทั้งหมดของการสื่อสารเครือข่ายของแอป และสามารถมีอิทธิพลต่อมันเพื่อการทดสอบ

ข้อผิดพลาดทั่วไปและวิธีแก้ไข

มาดูปัญหาที่พบบ่อยตามรูปแบบ: ปัญหา, สาเหตุ, วิธีแก้ไข

แอปไม่สนใจพร็อกซีของระบบ

ปัญหา: ทราฟฟิกไม่ปรากฏในพร็อกซีแม้เบราว์เซอร์จะทำงาน สาเหตุ: แอปใช้สแต็กเครือข่ายของตัวเองซึ่งไม่อ่านการตั้งค่าพร็อกซีของระบบ วิธีแก้ไข: ใน debug build ให้ตั้งค่า network client ให้รองรับ system proxy หรือใช้ transparent proxy mode ที่ระดับเครือข่าย

มองไม่เห็นทราฟฟิกที่ใช้ QUIC

ปัญหา: คำขอบางส่วนหายไป สาเหตุ: แอปใช้โปรโตคอล QUIC ซึ่งทำงานบน UDP ซึ่งพร็อกซี HTTP ทั่วไปไม่ดักจับ วิธีแก้ไข: ใน debug build ให้ปิดการรองรับ QUIC ใน network client ชั่วคราว เพื่อให้ทราฟฟิกไปผ่าน HTTPS ปกติและปรากฏในพร็อกซี

รายละเอียดบน Android 14

ปัญหา: ติดตั้งใบรับรองแล้วแต่แอปไม่เห็น สาเหตุ: ใน Android เวอร์ชันใหม่ กฎการจัดการใบรับรองผู้ใช้เข้มงวดขึ้น และแอปโดยค่าเริ่มต้นไม่เชื่อถือใบรับรองผู้ใช้ วิธีแก้ไข: ใช้ network security config พร้อมการแทนที่ debug หรือใช้ที่เก็บระบบบนอีมูเลเตอร์

iOS ไม่ถอดรหัสทราฟฟิก

ปัญหา: คำขอของแอปบน iOS ไม่ถูกอ่าน สาเหตุ: ติดตั้งใบรับรองแล้วแต่ไม่ได้เปิดใช้งานความเชื่อถือเต็มรูปแบบในส่วน Certificate Trust Settings วิธีแก้ไข: ไปที่ Settings > General > About > Certificate Trust Settings แล้วเปิดสวิตช์

gRPC และ HTTP/2

ปัญหา: มองเห็นข้อมูลแต่อยู่ในรูปแบบไบนารีที่อ่านไม่เข้าใจ สาเหตุ: แอปใช้ gRPC บน HTTP/2 พร้อมการซีเรียลไลซ์แบบไบนารี วิธีแก้ไข: ใช้เครื่องมือที่รองรับ HTTP/2 และหากจำเป็น ให้ใช้ปลั๊กอินสำหรับถอดรหัสรูปแบบข้อความเพื่ออ่านเนื้อหา

ไม่มีอินเทอร์เน็ตหลังตั้งค่าพร็อกซี

ปัญหา: โทรศัพท์ไม่สามารถต่ออินเทอร์เน็ตได้ สาเหตุ: ปิดเครื่องมือพร็อกซีแล้วแต่การตั้งค่าพร็อกซียังคงอยู่ วิธีแก้ไข: เปิดพร็อกซีบนคอมพิวเตอร์หรือลบการตั้งค่าพร็อกซีในการตั้งค่า Wi-Fi ของโทรศัพท์

ไฟร์วอลล์บล็อกการเชื่อมต่อ

ปัญหา: โทรศัพท์ไม่สามารถเชื่อมต่อพร็อกซี สาเหตุ: ไฟร์วอลล์ของคอมพิวเตอร์บล็อกการเชื่อมต่อขาเข้าที่พอร์ตพร็อกซี วิธีแก้ไข: เพิ่มกฎการอนุญาตสำหรับพอร์ตพร็อกซีในไฟร์วอลล์ของระบบ

ความสามารถเพิ่มเติมและการตั้งค่าขั้นสูง

เมื่อเข้าใจการตั้งค่าพื้นฐานแล้ว ควรขยายคลังเครื่องมือ

สคริปต์และระบบอัตโนมัติ

mitmproxy อนุญาตให้เขียนสคริปต์ Python ซึ่งปรับเปลี่ยนคำขอและคำตอบโดยอัตโนมัติ สะดวกสำหรับการทดสอบ regression และสถานการณ์การปลอมแปลงที่ซับซ้อน

บันทึกเซสชัน

บันทึกเซสชันทราฟฟิกเป็นไฟล์เพื่อกลับมาดูทีหลังหรือแชร์กับทีม ซึ่งช่วยเร่งการวิเคราะห์บั๊ก

Map ไปยังไฟล์ในเครื่อง

ฟังก์ชันปลอมแปลงคำตอบเป็นไฟล์ในเครื่องช่วยให้คุณพัฒนาอินเทอร์เฟซแอปโดยไม่ต้องรอแบ็กเอนด์ เพียงส่ง JSON response ที่เตรียมไว้ให้แอป

จำกัดความเร็ว

พร็อกซีหลายตัวสามารถทำให้การเชื่อมต่อช้าลงเทียม เพื่อตรวจสอบพฤติกรรมของแอปบนเครือข่ายช้าและค้นหาปัญหาเกี่ยวกับ timeout

คำแนะนำ: รวบรวมชุดสถานการณ์การปลอมแปลงและการชะลอความเร็วทั่วไป และนำกลับมาใช้ใหม่ในทุก release เพื่อเปลี่ยนการดีบักด้วยมือเป็นกระบวนการทดสอบที่ทำซ้ำได้

คำถามที่พบบ่อย

จำเป็นต้อง root Android เพื่ออ่านทราฟฟิกหรือไม่?

สำหรับที่เก็บผู้ใช้และแอปของคุณเองที่มี debug config ไม่จำเป็นต้อง root สำหรับที่เก็บระบบบนอุปกรณ์จริงต้อง root แต่ควรใช้อีมูเลเตอร์ที่ไม่มีบริการ Google จะง่ายกว่า

สามารถหลีกเลี่ยงการติดตั้งใบรับรองได้หรือไม่?

หากไม่มีใบรับรองที่เชื่อถือได้ คุณจะเห็นเพียงชื่อโดเมนใน SNI แต่ไม่เห็นเนื้อหา HTTPS การอ่านคำขอจำเป็นต้องมีใบรับรอง

ทำไมเบราว์เซอร์เห็นทราฟฟิกแต่แอปไม่เห็น?

น่าจะเป็นเพราะแอปเปิด SSL pinning หรือใช้สแต็กเครือข่ายของตัวเอง ให้ตั้งค่า debug build ตามที่อธิบายในขั้นตอน pinning

ปลอดภัยหรือไม่ที่จะติดตั้ง root certificate ของพร็อกซี?

บนอุปกรณ์ทดสอบและระหว่างการดีบักชั่วคราว ถือว่าใช้ได้ หลังจากทำงานเสร็จ ให้ลบใบรับรองเพื่อไม่ให้เหลือความเชื่อถือที่ขยายเกินบนอุปกรณ์

จะทำอย่างไรหากทราฟฟิกใช้ QUIC?

ปิด QUIC ใน debug build ของ network client เพื่อให้การเชื่อมต่อไปที่ HTTPS ปกติและปรากฏในพร็อกซี

สามารถวิเคราะห์ทราฟฟิกของแอปคนอื่นได้หรือไม่?

ไม่ได้ เฉพาะแอปของคุณเองหรือแอปที่ได้รับอนุญาตอย่างชัดแจ้งจากเจ้าของ นี่คือกฎพื้นฐาน

Charles หรือ mitmproxy: มือใหม่ควรเลือกอะไร?

Charles ง่ายกว่าสำหรับผู้เริ่มต้นเพราะมีอินเทอร์เฟซกราฟิก ส่วน mitmproxy มีพลังมากกว่าสำหรับระบบอัตโนมัติ เริ่มต้นด้วยสิ่งที่คุณถนัด

จะลบการเปลี่ยนแปลงทั้งหมดหลังดีบักอย่างไร?

ลบการตั้งค่าพร็อกซีใน Wi-Fi, ลบใบรับรองที่ติดตั้งในการตั้งค่าความปลอดภัย และสร้างแอปใน release config พร้อมการตรวจสอบเต็มรูปแบบ

ทำไมบน iOS การเชื่อถือใบรับรองไม่ทำงาน?

คุณติดตั้งโปรไฟล์แล้วแต่ไม่ได้เปิดใช้งานความเชื่อถือเต็มรูปแบบในส่วน Certificate Trust Settings นี่เป็นขั้นตอนบังคับแยกต่างหาก

สามารถดูทราฟฟิกบนเครือข่ายช้าได้หรือไม่?

ได้ พร็อกซีหลายตัวสามารถทำให้การเชื่อมต่อช้าลงเทียม เพื่อทดสอบพฤติกรรมของแอปเมื่ออินเทอร์เน็ตไม่ดี

บทสรุป

ขอแสดงความยินดี ตอนนี้คุณมีทักษะครบชุดสำหรับการวิเคราะห์ทราฟฟิกเครือข่ายของแอปมือถือของคุณเอง คุณได้เรียนรู้วิธีการเลือกระหว่าง mitmproxy, Charles, Proxyman และ Burp การตั้งค่าพร็อกซีในเครื่อง การส่งทราฟฟิกจากโทรศัพท์ อีมูเลเตอร์ และซิมูเลเตอร์ผ่านพร็อกซี

คุณเข้าใจแล้วว่า MITM proxy ทำงานอย่างไรและทำไมต้องมีใบรับรอง root ที่เชื่อถือได้ คุณรู้รายละเอียดของที่เก็บใบรับรองบน Android 7 ขึ้นไป และขั้นตอนการเชื่อถือบน iOS ที่จำเป็น คุณเข้าใจวิธีลดระดับ SSL pinning อย่างปลอดภัยและเฉพาะใน debug build โดยใช้วิธีการมาตรฐานของแพลตฟอร์ม โดยไม่ต้องแตะ release

สุดท้าย คุณสามารถอ่าน, กรอง, ส่งออก, ทำซ้ำ และปลอมแปลงคำขอ รวมถึงใช้ mobile proxy เพื่อตรวจสอบพฤติกรรมตามภูมิภาคของแอปภายใต้กรอบกฎหมาย

ขั้นตอนต่อไป

ฝึกฝนทักษะนี้ในโปรเจกต์จริง: ตั้งค่าการดักจับทราฟฟิกของแอปคุณและเพิ่มสถานการณ์การปลอมแปลงคำตอบทั่วไปในกระบวนการทดสอบ ค่อย ๆ เรียนรู้สคริปต์อัตโนมัติและแชร์เซสชันทราฟฟิกกับทีม

จะพัฒนาไปทางไหนต่อ: เจาะลึกการวิเคราะห์ HTTP/2 และ gRPC, เรียนรู้การเขียนสคริปต์สำหรับ mitmproxy, เรียนรู้การผสานการดักจับทราฟฟิกเข้ากับการทดสอบอัตโนมัติ และจำกฎหลักเสมอ: ทำงานกับแอปของคุณเองหรือได้รับอนุญาตอย่างชัดแจ้งจากเจ้าของ ปฏิบัติตามกฎหมายและเคารพความเป็นส่วนตัวของผู้ใช้