การใช้ Frida ในตัว

FIRERPA ได้ติดตั้ง Frida เวอร์ชันล่าสุดมาในตัว ทำให้คุณไม่จำเป็นต้องเปิด frida-server ด้วยตัวเอง Frida ที่เราติดตั้งมาให้นั้นมีแพตช์ซ่อนตัวแบบโอเพนซอร์สต่าง ๆ รวมถึงฟังก์ชันการซ่อนตัวเพิ่มเติมที่เราพัฒนาขึ้นเอง ดังนั้นคุณจึงไม่ต้องกังวลเกี่ยวกับปัญหาการตรวจจับ Frida หาก Frida ที่เราติดตั้งมาให้ถูกตรวจจับ นั่นหมายความว่า frida-server เกือบทั้งหมดที่คุณสามารถดาวน์โหลดได้ก็จะถูกตรวจจับเช่นกัน ดังนั้นโปรดใช้งานได้อย่างสบายใจ คุณไม่จำเป็นต้องกังวลกับเรื่องจิปาถะเหล่านี้

คำแนะนำ

ตั้งแต่เวอร์ชัน 7.18 เป็นต้นไป FIRERPA ที่มี FRIDA ในตัวจะต้องใช้พารามิเตอร์ token ในการเชื่อมต่อ แต่ไลบรารีฝั่งไคลเอ็นต์ได้จัดการทุกอย่างให้คุณเรียบร้อยแล้ว หากคุณใช้เวอร์ชันก่อน 7.18 โปรดดู[เอกสารเวอร์ชันเก่า](https://github.com/firerpa/lamda/tree/5.0#连接内置的-frida)สำหรับวิธีการใช้งาน

ข้อควรสนใจ

ตั้งแต่เวอร์ชัน 9.0 เป็นต้นไป Frida 17.x ที่เราใช้ในตัวจะต้องทำการแพ็กเกจ frida-java-bridge เข้าไปในสคริปต์ด้วยตัวเอง มิฉะนั้นจะเกิดข้อผิดพลาดเกี่ยวกับ Java not defined การเปลี่ยนแปลงนี้เป็นการเปลี่ยนแปลงอย่างเป็นทางการของ Frida ตามคำอธิบายการเปลี่ยนแปลงของทางการ คุณจะต้องสร้างโปรเจกต์ nodejs ใหม่และนำเข้า java bridge สำหรับรายละเอียดเพิ่มเติม โปรดอ้างอิง https://github.com/oleavr/frida-agent-example หรือใช้ tools/frida_script_generate.py ที่เรามีให้เพื่อห่อหุ้มสคริปต์ js เดิมอีกครั้ง

การใช้งานผ่านโค้ด

เมื่อใช้ FIRERPA client API คุณเพียงแค่ใช้ d.frida ดังที่แสดงด้านล่างเพื่อรับ instance ที่เชื่อมต่อกับ frida-server แล้ว โดยไม่จำเป็นต้องสร้างการเชื่อมต่อด้วยไลบรารี Frida เอง

conn = d.frida
conn.enumerate_processes()

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

# รับ token แบบไดนามิก
token = d._get_session_token()

manager = frida.get_device_manager()
conn = manager.add_remote_device("192.168.0.2:65000", token=token)
conn.enumerate_processes()

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

การใช้งานผ่าน Command Line

การใช้งานผ่าน command line อาจจะซับซ้อนเล็กน้อย เนื่องจากเราต้องมั่นใจในความปลอดภัยของอุปกรณ์ของคุณ เราขอเตือนคุณว่าอย่าจำกัดความคิดของคุณอยู่แค่คำสั่งในบทความอื่น ๆ คุณต้องสังเกตว่าคำสั่ง Frida ในหลายบทความจะมีพารามิเตอร์ -U แต่ของเราไม่มี ดังนั้นหากคุณเชื่อมต่อไม่ได้ โปรดตรวจสอบให้แน่ใจว่าคำสั่งของคุณเป็นไปตามตัวอย่างอย่างเคร่งครัด

ก่อนที่จะเริ่ม เราขอแนะนำอย่างยิ่งให้คุณใช้คำสั่งที่เกี่ยวข้องเช่น frida, frida-itrace, frida-trace, frida-ps ผ่าน Remote Desktop เพราะในสภาพแวดล้อมนี้ คุณไม่จำเป็นต้องทำอะไรเลย เพียงแค่รัน frida โดยไม่ต้องระบุพารามิเตอร์การเชื่อมต่ออื่น ๆ เช่น -U, -H

Frida

เมื่อคุณอ่านมาถึงตรงนี้แล้ว นั่นหมายความว่าคุณยังคงต้องการใช้คำสั่งนี้บนคอมพิวเตอร์ของคุณ ตอนนี้คุณต้องเตรียมข้อมูลบางอย่างตามการติดตั้งของคุณ หาก FIRERPA ของคุณใช้ service certificate ตอนเริ่มต้น คุณต้องเตรียมไฟล์นั้นไว้ และคุณต้องเตรียม IP address ของอุปกรณ์ที่ต้องการเชื่อมต่อและพอร์ตบริการของ FIRERPA (ค่าเริ่มต้นคือ 65000) โปรดทราบว่าพอร์ตนี้ไม่ใช่พอร์ต 27042 ของ Frida แต่เป็นพอร์ตของบริการ FIRERPA คุณเพียงแค่เชื่อมต่อกับ FIRERPA เท่านั้น

ก่อนอื่น คุณต้องใช้ API เพื่อรับ token ปัจจุบันก่อน token นี้เป็นสตริงความยาว 16 ตัวอักษรแบบคงที่ เช่น czvpyqg82dk0xrnj เราเข้าใจว่าวิธีนี้อาจจะยุ่งยากเล็กน้อย และอาจมีการปรับปรุงเพื่อให้ใช้งานง่ายขึ้นในอนาคต นี่คือเหตุผลที่เราแนะนำให้คุณใช้คำสั่งที่เกี่ยวข้องกับ Frida ใน Remote Desktop

token = d._get_session_token()
print (token)

ตอนนี้คุณได้รับ token จากอินเทอร์เฟซด้านบนแล้ว สมมติว่าเป็น czvpyqg82dk0xrnj ตอนนี้เรามาเริ่มเขียนคำสั่ง Frida กัน สำหรับเครื่องมือ command line อย่างเป็นทางการของ Frida ทั้งหมด โดยปกติแล้วเพียงแค่เพิ่มพารามิเตอร์ -H 192.168.0.2:65000 และ --token xxxxxxxxxxxxxxxx ก็เพียงพอแล้ว ตัวอย่างเช่นด้านล่างนี้ โปรดทราบเป็นพิเศษว่า ที่นี่ไม่มีพารามิเตอร์ -U

frida -H 192.168.0.2:65000 -f com.android.settings --token xxxxxxxxxxxxxxxx

หากเซิร์ฟเวอร์ FIRERPA ของคุณใช้ service certificate ตอนเริ่มต้น คุณต้องเพิ่มพารามิเตอร์ --certificate ในคำสั่งด้วย

frida -H 192.168.0.2:65000 -f com.android.settings --certificate /path/to/lamda.pem --token xxxxxxxxxxxxxxxx

คุณอาจจะสังเกตเห็นว่ามีความแตกต่างอยู่สามอย่าง คือ -U เปลี่ยนเป็น -H เนื่องจากเราต้องการเชื่อมต่อผ่านเครือข่ายแทน USB, มีพารามิเตอร์ --token เพิ่มเข้ามา และหากเซิร์ฟเวอร์เปิดใช้งาน service certificate ก็จะมีพารามิเตอร์ --certificate เพิ่มเข้ามาอีกหนึ่งตัว ทั้งนี้เพื่อความปลอดภัยของอุปกรณ์ของคุณและป้องกันการเข้าถึงโดยไม่ได้รับอนุญาต

การใช้งานผ่าน Command Line (objection)

สำหรับเครื่องมืออื่น ๆ เช่น objection โดยทั่วไปก็จะมีพารามิเตอร์ดังกล่าวให้ใช้เช่นกัน แต่เครื่องมือที่ไม่ใช่มาตรฐานส่วนใหญ่มักจะไม่ได้เพิ่มพารามิเตอร์เหล่านี้อย่างครบถ้วน ปัจจุบันเราได้ทำการ patch ให้กับ objection เท่านั้น ซึ่งจะไม่ส่งผลกระทบต่อการใช้งานเดิม แต่เนื่องจาก objection ไม่ได้อัปเดตมาเป็นเวลานาน เราจึงไม่ส่ง patch นี้ไปยัง source หลัก คุณสามารถดาวน์โหลด objection-1.11.0-command-patch.diff ที่เรามีให้ และนำ patch นี้ไปใช้กับไดเรกทอรีโค้ดของ objection ที่คุณติดตั้งไว้ (คุณสามารถใช้คำสั่ง pip3 show objection เพื่อดูเส้นทางการติดตั้ง)

หลังจากนั้น คุณสามารถใช้งานได้ดังนี้ จะเห็นว่ามีเพียงพารามิเตอร์ --token เพิ่มเข้ามา

objection -N -h 192.168.0.2 -p 65000 --token xxxxxxxxxxxxxxxx explore

หรือหากเซิร์ฟเวอร์ใช้ service certificate ตอนเริ่มต้น ก็ต้องเพิ่ม --certificate ในคำสั่งเช่นกัน

objection -N -h 192.168.0.2 -p 65000 --certificate /path/to/lamda.pem --token xxxxxxxxxxxxxxxx explore

การเปิดเผยอินเทอร์เฟซของแอปพลิเคชัน

ย่อหน้านี้ได้ถูกย้ายไปยังหัวข้อ การใช้ Frida เพื่อ Export อินเทอร์เฟซ แล้ว