ระบุประเภทโปรเซสเซอร์จากรหัสไบนารีดิบหรือไม่


19

ไม่เกี่ยวข้องกับชิปจริง ๆ แต่หวังว่าฉันจะได้รับคำแนะนำจากที่นี่

ฉันได้รับโค้ดจำนวนมาก แต่ฉันไม่ทราบว่าโปรเซสเซอร์มีไว้เพื่ออะไร มีเครื่องมือที่สามารถช่วยฉันระบุประเภทรหัสได้หรือไม่ วิธีการทางสถิติสามารถช่วยอะไรได้บ้าง การกระจายไบต์? กระจายคู่ ฯลฯ ? โซ่มาร์คอฟอาจ?


7
คุณสามารถให้ 200 ไบต์แรกในรูปหกเหลี่ยมดิบได้ไหม
pingswept

นี่เป็นคำถามที่สนุก คุณกำลังแฮ็คอุปกรณ์ชนิดใด
DavidEGrayson

1
คุณสามารถลองป้อนให้กับ disassemblers ที่แตกต่างกันสองสามตัวและดูว่าเกิดอะไรขึ้น
JustJeff

2
ฉันจะตั้งชื่อรหัสนั้นใน 100 ไบต์! = P
JustJeff

เป็นคำถามที่ดีมาก อาจเป็นแบบที่ดีกว่าสำหรับ StackOverflow อย่างไรก็ตาม
sharptooth

คำตอบ:


16

ลองเรียกใช้ผ่านไฟล์ GNU หากมีส่วนหัวมาตรฐานใด ๆ ก็จะไปรับ

เช่น.

jrt@lin:~/src$ file foo
foo: ELF 32-bit LSB executable, Atmel AVR 8-bit, version 1 (SYSV), statically linked, not stripped

พยายามอย่างนั้น ไฟล์ GNU บอกว่ามันคือ "data"
นักจิต

3
คุณช่วยโพสต์เรื่องนี้หน่อยได้ไหม? พยายามค้นหา ASCII ด้วยคำว่า "strings" หรือไม่
Toby Jaffey

9

นี่เป็นคำถามที่น่าสนใจมาก มีคำแนะนำนับล้านชุด แต่มีเพียงไม่กี่คำที่ใช้กันมาก

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

จากนั้นฉันจะดูขนาดรหัสและฟังก์ชั่น (สมมติว่าคุณรู้ว่าโค้ดทำหน้าที่อะไรในระดับหนึ่ง) หากเป็นโค้ดขนาดไม่กี่เมกะไบต์คุณสามารถลดราคาโปรเซสเซอร์ 8 บิตที่ฝังอยู่ส่วนใหญ่แล้วเริ่มดูอุปกรณ์ขนาดใหญ่ที่มีหน่วยความจำภายนอก ถ้าเป็นไม่กี่กิโลไบต์หรือน้อยกว่านั้นคุณควรต้องการเน้นที่อุปกรณ์ที่เล็กกว่าและราคาถูกกว่าแทน ถ้าฟังก์ชั่นนั้นง่ายมันอาจจะเป็นรหัสสำหรับโปรเซสเซอร์สี่บิต

ณ จุดนี้มันคุ้มค่าที่จะดูโครงสร้างหน่วยความจำ น่าจะเป็นส่วนโปรแกรมและส่วนข้อมูลอย่างน้อยที่สุด หากเป็นไฟล์ไบนารี่ (เทียบกับ intel hex หรือ motorola s record) คุณจะมีความเข้าใจเล็กน้อยว่าหน่วยความจำบางส่วนของข้อมูลถูกวางไว้ที่ใด ตัวแก้ไขฐานสิบหกอาจแสดงรูปแบบบางอย่าง ถ้ามันมาในรูปแบบเลขฐานสิบหกหรือ s คุณอาจมีข้อมูลเพิ่มเติมเกี่ยวกับโครงสร้างหน่วยความจำของโปรเซสเซอร์ที่มีไว้สำหรับ โปรเซสเซอร์บางตัวรีเซ็ตที่ตำแหน่งหน่วยความจำของโปรแกรม 0 ซึ่งบางตัวจะอยู่ที่ตำแหน่งหน่วยความจำสูงสุด โปรแกรมอาจรวมถึงค่าเริ่มต้น EEPROM ในตำแหน่งหน่วยความจำแยกต่างหาก ถ้ามันมีไว้สำหรับตัวประมวลผลที่ปลอดภัย (ที่ใช้ในการธนาคาร) ก็อาจมีคีย์ความปลอดภัยสำหรับตำแหน่งหน่วยความจำคี่

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

ถ้ามันเป็นอุปกรณ์ฝังตัวที่มีการขัดจังหวะมันอาจจะมีตารางเวกเตอร์ขัดจังหวะซึ่งจะดูเหมือนกระโดดข้ามไปยังตำแหน่งหน่วยความจำที่แตกต่างกันทั้งหมดในบล็อกขนาดใหญ่อาจจะอยู่ในตำแหน่งที่สะดวก (เช่น 0x ??? 0) . ตารางกระโดดถูกใช้ในที่อื่นเพื่อทำสิ่งอื่น ๆ เช่นกัน แต่ถ้าคุณสามารถหาลำดับของคำสั่งที่มีลักษณะเหมือนกันยกเว้นที่อยู่ที่จะข้ามไปคุณอาจสามารถสรุปได้ว่าคำสั่งการกระโดดมีลักษณะอย่างไรและแคบลงอีกครั้ง ตัวเลือกของคุณลง

ณ จุดนี้ฉันจะเริ่มต้นด้วยสถาปัตยกรรมโพรเซสเซอร์ทั่วไปและดูว่ามีอะไรที่เกี่ยวข้องหรือไม่ x86, แขน, mips, 8051, avr, pic, powerpc, Z80, 68k, 6502 ฯลฯ ฯลฯ มีรายการของตัวประมวลผลทั่วไปและชุดคำสั่ง - อย่างน้อยในโลกที่พูดภาษาอังกฤษ - ที่อาจพิสูจน์ได้ว่ามีประโยชน์

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


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

@stevenvh เนื่องจาก บริษัท โอ๊กและซินแคลร์ระบบฝังตัว 6502 และ Z80 เป็นที่นิยมอย่างมาก และแน่นอนโปรเซสเซอร์ ARM เริ่มต้นที่ Acorn Computers
Adam Davis

5

แนวคิด: คุณรู้อายุของซอร์สโค้ดหรือไม่ว่ามันถูกสร้างขึ้นในเวลาใด / ปี

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

ในความคิดที่สองเนื่องจากการเพิ่มจำนวนมากของโปรเซสเซอร์ในช่วง 20 ปีที่ผ่านมานี่อาจเป็นเทคนิคเข็มในกองหญ้าแห้งและไม่ได้ผลมากนัก


4

ดวงจันทร์หลายที่ผ่านมาเมื่อมีไม่ว่าหน่วยประมวลผลที่แตกต่างกันหลายแกนรอบฉันระบุรหัส Z80 ไม่กี่ครั้งผ่านการวิเคราะห์ความถี่ สำหรับ Z80 CDเป็นรหัสเครื่องcall subroutineและC9เป็นreturn from subroutine(ฉันจะไม่มีวันลืม) และเหล่านี้มักจะเป็นรหัสที่เกิดขึ้นมากที่สุด สิ่งนี้ต้องการให้คุณคุ้นเคยกับชุดคำสั่งในระดับรหัสเครื่อง การมีประสบการณ์ในการชุมนุมด้วยมือช่วยได้ (ทำได้มากและฉันยังสามารถนับถอยหลังเป็นฐานสิบหกเพื่อคำนวณค่าชดเชย)


3

หากไฟล์นี้ใช้สำหรับ PIC แบบ 12 บิตหรือ 14 บิตทุกคู่ของไบต์จะเป็นคำที่ 12- หรือ 14 บิตซึ่งโดยทั่วไปจะเก็บ LSB ไว้ก่อนด้วยบิตที่สำคัญที่สุดสองหรือสี่บิต


1

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

ที่กล่าวว่าฉันมีโชคแตกต่างระหว่าง 8088, 6502 และ 68000 ไบนารีเพียงแค่ใช้ฮิสโตแกรม ตัวประมวลผลใด ๆ ที่กำหนดมี opcodes คำสั่งทางกฎหมายบางอย่างและสิ่งเหล่านี้มักจะใช้บ่อยกว่าค่าเฉลี่ยเล็กน้อย ด้วยไบนารีขนาดใหญ่พอคุณสามารถเริ่มเห็นแนวโน้มบางอย่าง สิ่งนี้ทำให้ยากอย่างไรก็ตามโดยความจริงที่ว่าตัวถูกดำเนินการทั้งหมดในชิ้นส่วนของไบนารีที่กำหนดมีแนวโน้มที่จะไม่สัมพันธ์กับประเภทตัวประมวลผลที่กำหนด นอกจากนี้โปรแกรมที่แตกต่างกันสองโปรแกรมสำหรับโปรเซสเซอร์เดียวกันอาจมีฮิสโตแกรมที่แตกต่างกันอย่างเห็นได้ชัด ถึงกระนั้นก็สามารถให้สถานที่ที่จะเริ่มต้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.