ดังนั้นหากภาพรวมของคุณผลิตโดยรุ่นที่ทันสมัยพอสมควรมันอาจจะไม่แยกวิเคราะห์ [ถูกต้อง] ถึงกระนั้นถ้าคุณต้องการลองคุณอาจต้องแก้ไขอย่างน้อยใน #3
darter เป็นโมดูล Python ที่สามารถแยกวิเคราะห์ข้อมูลภายใน Snapshot Dart ได้อย่างเต็มที่ (เช่นไฟล์ libapp.so ในแอพ Flutter รีลีส)
คุณสมบัติ:
app.so หรือ .snapshot โดยอัตโนมัติตัวอย่างของสิ่งที่คุณสามารถทำได้กับข้อมูลที่แยกวิเคราะห์:
หมายเหตุ: โปรดทราบว่านี่คือการแยกวิเคราะห์ภาพรวม (เช่นสถาปัตยกรรมขึ้นอยู่กับสถาปัตยกรรม) ไฟล์ .dill และไฟล์ .snapshot บางไฟล์มี Kernel AST ซึ่งเป็นรูปแบบที่แตกต่างอย่างสิ้นเชิงและปัจจุบันไม่รองรับโดย darter [เรียนรู้เพิ่มเติม]
รหัสส่วนใหญ่เป็นศูนย์การพึ่งพาอาศัยกันยกเว้น:
parse_elf_snapshot(...) ต้องการ pyelftools
โมดูล darter.asm (สำหรับการวิเคราะห์รหัสประกอบ) ต้องใช้ capstone (และการผูก python)
darter In Welm เป็นเพียงโมดูลไม่มีโปรแกรมแบบสแตนด์อโลนหรือ CLI
วิธีที่แนะนำในการใช้คือการรวมไว้ในสมุดบันทึกและเล่นกับข้อมูลที่แยกวิเคราะห์
ติดตั้ง JUPYTER และเปิดสมุดบันทึก 1-introduction สำหรับคำแนะนำพื้นฐานของข้อมูลที่แยกวิเคราะห์ จากนั้นมุ่งหน้าไปยัง 2-playground ซึ่งมีตัวอย่างการใช้งานที่น่าสนใจมากขึ้น
ขอแนะนำอย่างยิ่ง ให้คุณเล่นครั้งแรกกับสแน็ปช็อตที่รู้จัก (เช่นที่คุณสร้างตัวเองหรือมีรหัส) ก่อนที่จะวิเคราะห์สแน็ปช็อตที่คุณเป็น
ตัวแยกวิเคราะห์ยังอยู่ในช่วงเริ่มต้นและจะไม่ทำงานในทุกกรณี
ตัวแยกวิเคราะห์นี้เขียนขึ้นจาก Dart-SDK ที่ 1ef83b86ae รูปแบบสแน็ปช็อตอยู่ภายใน VM มันทิ้งวัตถุบางส่วนตามที่ปรากฏในหน่วยความจำ คุณจำเป็นต้องรู้ว่า VM (Arch, Compile Flags) ถูกรวบรวมเพื่อแยกวิเคราะห์อย่างไร มันสามารถเปลี่ยนแปลงได้บ่อยครั้งระหว่างรุ่นเนื่องจากไม่มีข้อมูลจำเพาะมาตรฐาน (AFAIK) สำหรับรูปแบบ
ยินดีต้อนรับความช่วยเหลือหรือการบริจาคใด ๆ
กำหนด ส่วนข้อมูล และ ส่วนคำแนะนำ (และเลือก ฐาน ):
OneByteString , CodeSourceMap , Instructions ฯลฯ )ข้อมูลจะถูกส่งกลับเป็นแยกวิเคราะห์ให้มากที่สุดเพื่อให้ง่ายต่อการจัดการ การอ้างอิงย้อนกลับถูกติดตามด้วยเพื่อให้รู้ได้ง่ายว่ามีการอ้างอิงวัตถุบางอย่างจากที่ใด
darter สามารถแยกทั้งสองสแน็ปช็อต 'VM' และ 'ไอโซเลท' (คนที่เราใส่ใจ)
โมดูล darter.asm จะแยกรหัสที่รวบรวมและวิเคราะห์ นี่เป็นสิ่งสำคัญสำหรับสแนปชอต AOT เพราะเราไม่ได้รับรหัสระดับสูง
หากคุณยังใหม่กับ Dart/Flutter Reverse-Engineering คุณควรอ่านบทนำนี้ก่อน: https://mrale.ph/dartvm/
รหัสที่เกี่ยวข้องใน Snapshot serialization อยู่ที่ runtime/vm/clustered_snapshot.cc และ runtime/vm/raw_object.h
นอกจากนี้ยังมีข้อมูลเพิ่มเติมในไดเรกทอรี info