ScratchABit คือตัวแยกส่วนแบบโต้ตอบที่มีความสามารถในการวิเคราะห์ข้อมูล/ควบคุมการไหล ScratchABit ทุ่มเทให้กับความพยายามของชุมชนวิศวกรรมย้อนกลับของ OpenSource (วิศวกรรมย้อนกลับเพื่อสร้างไดรเวอร์/เฟิร์มแวร์ OpenSource สำหรับฮาร์ดแวร์ที่ผู้ขายไม่รองรับอย่างเหมาะสม สำหรับการทำงานร่วมกันของฮาร์ดแวร์และซอฟต์แวร์ เพื่อการวิจัยด้านความปลอดภัย)
ScratchABit รองรับ IDAPython API ที่รู้จักกันดีในชุมชนเพื่อเขียนโมดูลการแยกส่วน/ส่วนขยาย
ScratchABit อยู่ในระหว่างดำเนินการ มีการเพิ่มฟีเจอร์ต่างๆ ตามความจำเป็น ยินดีต้อนรับการมีส่วนร่วม
ScratchABit ได้รับการเผยแพร่ภายใต้เงื่อนไขของ GNU General Public License v3 (GPLv3)
ไม่ควรเขียนด้วยภาษาที่สับสน ซึ่งรวมถึงภาษาที่อยู่ในระดับต่ำเกินไป ซึ่งอนุญาตให้เข้าถึงตัวแปรที่ไม่ได้กำหนดค่าเริ่มต้น ซึ่งไม่สร้างความแตกต่างระหว่างตัวแปรและฟังก์ชัน/ขั้นตอน ซึ่งเริ่มสร้างดัชนีอาร์เรย์จากตัวเลขที่กำหนดเอง ฯลฯ เป็นต้น ScratchABit เขียนด้วยภาษา Python ( เวอร์ชันทันสมัย Python3) เพื่อความสุขและความมีสติของคุณ
กรอบงานอินเทอร์เฟซผู้ใช้ควรอนุญาตให้ผู้ใช้โต้ตอบในระดับที่ต้องการ ไม่เพิ่มการขึ้นต่อกัน การขยาย ปัญหา และความไม่เข้ากันระหว่างเวอร์ชันของกรอบงาน ปัจจุบัน ScratchABit ใช้อินเทอร์เฟซผู้ใช้แบบข้อความแบบเต็มหน้าจออย่างง่าย โดยใช้ลำดับหลีกเทอร์มินัล ANSI/VT100 (ใช่แล้ว แม้แต่ไลบรารี curses ก็ถือว่าขยายการพึ่งพาเกินกว่าจะบังคับใช้กับผู้ใช้)
ควรใช้ประโยชน์จากรูปแบบข้อความที่ใช้งานง่ายเพื่อจัดเก็บ "ฐานข้อมูล" เพื่อความสะดวกในการนำมาใช้ซ้ำและการเขียนเครื่องมือ และการจัดเก็บในระบบควบคุมเวอร์ชัน
หากต้องการใช้ ScratchABit คุณต้องติดตั้ง Python3 (ทดสอบด้วย Python 3.3 ถึง 3.7) และเทอร์มินัลหรืออีมูเลเตอร์ VT100 (ขั้นต่ำ) หรือ XTerm (แนะนำ) หรือเทอร์มินัลอีมูเลเตอร์ (ระบบ Unix ใดๆ ควรเป็นไปตามข้อกำหนด เช่น Linux/BSD/อื่นๆ ดูคำถามที่พบบ่อยด้านล่างสำหรับ มากกว่า).
โคลนโค้ดโดยใช้:
git clone --recursive https://github.com/pfalcon/ScratchABit
หากคุณโคลนโค้ดโดยไม่มี --recursive
ให้รัน git submodule update --init
ในไดเร็กทอรี ScratchABit
ขณะนี้ ScratchABit มาพร้อมกับปลั๊กอิน CPU ที่ใช้ Capstone Engine ซึ่งช่วยให้สามารถเข้าถึงสถาปัตยกรรม CPU จำนวนมากได้ หากต้องการใช้งาน ควรติดตั้งโมดูล Python Bindings ล่าสุดสำหรับ Capstone (ตามความต้องการของแพ็คเกจที่จัดส่งโดยการกระจายระบบปฏิบัติการ ซึ่งมักจะล้าสมัย) วิธีที่ง่ายที่สุดในการติดตั้งคือลงในไดเร็กทอรีแพ็คเกจผู้ใช้ Python:
pip3 install --no-cache-dir --user capstone
อีกทางเลือกหนึ่งคือติดตั้งลงในสภาพแวดล้อมเสมือน Python ภายในไดเร็กทอรี ScratchABit:
python3 -m venv .venv
source .venv/bin/activate
pip3 install --no-cache-dir capstone
เมื่อใดก็ตามที่คุณเปิดเทอร์มินัลเซสชันใหม่เพื่อทำงานกับ ScratchABit ให้รันคำสั่ง source .venv/bin/activate
อีกครั้งเพื่อเปิดใช้งานสภาพแวดล้อมเสมือน
หากวิธีการข้างต้นไม่ได้ผล คุณสามารถลองติดตั้งแพ็คเกจ Capstone ทั้งระบบได้ (ไม่แนะนำ):
sudo pip3 install --system capstone
หากคุณต้องการแยกไฟล์ในรูปแบบปฏิบัติการที่อธิบายตัวเองได้ (เช่น ELF) เพียงแค่ส่งไฟล์นั้นเป็นอาร์กิวเมนต์ไปที่ ScratchABit.py
พื้นที่เก็บข้อมูลประกอบด้วยไฟล์ example-*.elf
จำนวนหนึ่งสำหรับสถาปัตยกรรมต่างๆ เพื่อการเริ่มต้นอย่างรวดเร็ว ตัวอย่างเช่น หากต้องการลองใช้เวอร์ชัน x86 32 บิต:
python3 ScratchABit.py example-x86_32.elf
อีกทางหนึ่ง หากคุณต้องการแยกไฟล์ไบนารีดิบ คุณต้องสร้างไฟล์ .def (คำจำกัดความ) เพื่อระบุพื้นที่หน่วยความจำที่กำหนดไว้สำหรับโค้ด ที่อยู่ที่จะโหลดไฟล์ไบนารี ฯลฯ (หมายเหตุ: ไฟล์ . def อาจมีประโยชน์สำหรับ .elf และไฟล์ที่คล้ายกันเช่นกัน) พื้นที่เก็บข้อมูลประกอบด้วยรหัสไบนารีดิบ x86_64 แบบธรรมดา และไฟล์ example-x86_64.def ที่เกี่ยวข้อง (ดูภายในเพื่อดูคำอธิบายของไฟล์ที่มีอยู่ ตัวเลือก):
python3 ScratchABit.py example-x86_64.def
กด F9 เพื่อเข้าถึงเมนู (เมาส์ก็ใช้งานได้เช่นกันในเทอร์มินัลที่เข้ากันได้กับ XTerm) กด F1 เพื่อรับความช่วยเหลือเกี่ยวกับการผูกปุ่ม (การดำเนินการส่วนใหญ่สามารถเข้าถึงได้ผ่านเมนูเช่นกัน) ขั้นตอนการทำงานของ ScratchABit นั้นคล้ายคลึงกับ Dissamblers แบบโต้ตอบอื่นๆ (ประสบการณ์ก่อนหน้านี้หรือการอ่านเบื้องหลังอาจเป็นประโยชน์)
ปลั๊กอินตัวประมวลผล IDAPython สามารถโหลดได้จากทุกที่บนเส้นทางโมดูล Python หรือคุณสามารถเชื่อมโยง/คัดลอกไฟล์ Plugin .py
ลงในไดเร็กทอรีย่อย plugins/cpu/
ได้
หลังจากที่ปลั๊กอินพร้อมใช้งานแล้ว ให้สร้างไฟล์คำจำกัดความใหม่ตาม example-x86_64.def
ที่ตั้งชื่อโมดูลปลั๊กอิน (โดยไม่มีส่วนขยาย .py
) ในบรรทัด cpu xxx
สำหรับตัวอย่างง่ายๆ ที่ใช้ปลั๊กอินภายนอก โปรดดูไฟล์ esp8266.def ที่ทำงานร่วมกับปลั๊กอิน xtensa.py จากที่เก็บ ida-xtensa2
ถาม: รองรับโปรเซสเซอร์/สถาปัตยกรรมใดบ้าง
ตอบ: ScratchABit ไม่รองรับสถาปัตยกรรมตัวประมวลผลใดๆ ในตัวมันเอง แต่สามารถกำหนดเป้าหมายใหม่ได้อย่างสมบูรณ์โดยใช้ปลั๊กอิน IDAPython API มีปลั๊กอินมากมาย การเขียนปลั๊กอินใหม่เป็นเรื่องง่าย เพื่อให้ผู้ใช้ทดลองขับ ScratchABit ได้ ปลั๊กอินตัวประมวลผล x86 แบบธรรมดาจึงรวมอยู่ในการแจกจ่าย โดยใช้ตัวแยกชิ้นส่วน Pymsasid ภายใต้ประทุน
จากเวอร์ชัน 2.0 จะมีการรวมปลั๊กอิน Capstone ไว้ด้วย ทำให้สามารถเข้าถึงสถาปัตยกรรมจำนวนหนึ่ง รวมถึง x86, ARM, MIPS, PowerPC, SPARC เป็นต้น (การสนับสนุนสถาปัตยกรรมจะค่อยๆ เปิดใช้งานตามการทดสอบของผู้ใช้)
คุณสามารถอ่านเกี่ยวกับปลั๊กอินที่จัดส่งพร้อมกับ ScratchABit ได้ใน README สำหรับ plugins/cpu/
dir
ถาม: ดีบักเกอร์?
ตอบ: ScratchABit มีไว้สำหรับการวิเคราะห์แบบคงที่และการสนับสนุนที่ง่ายดายสำหรับสถาปัตยกรรม CPU ใหม่ (เพียงเขียนโค้ดปลั๊กอิน CPU ใหม่ใน Python คุณจะได้รับผลลัพธ์เบื้องต้นภายในไม่กี่ชั่วโมง) การวิเคราะห์แบบไดนามิกไม่ได้ถือเป็นคุณลักษณะหลัก และไม่มีแผนที่จะนำไปใช้ในทันที แพทช์ยินดีต้อนรับแม้ว่า
ถาม: ตัวถอดรหัส?
ตอบ: มีโปรเจ็กต์ที่เกี่ยวข้องกันที่เรียกว่า ScratchABlock สำหรับการวิเคราะห์โปรแกรมเชิงลึก การแปลง และการแยกคอมไพล์ คาดว่าเมื่อ ScratchABlock เติบโตเต็มที่ ฟังก์ชันการทำงานบางอย่างจะพร้อมใช้งานภายใน ScratchABit (อาจใช้ผ่านปลั๊กอิน)
ถาม: ฉันไม่ได้ใช้ Linux ฉันจะรัน ScratchABit ได้อย่างไร
ตอบ: ติดตั้ง Linux ในโปรแกรมจำลอง/VM บนระบบของคุณและดีใจ
ถาม: ภาพหน้าจอบังคับ?
ตอบ: แน่นอน: