ในฟอรัม raspberrypi.org อย่างเป็นทางการ "Dom" - ผู้ดำเนินรายการเขียน:
ฉัน fudged บอร์ดของฉันจะมีหมายเลขซีเรียลของคุณ
ฉันจะแก้ไขหมายเลขซีเรียลของ Raspberry Pi ได้อย่างไร
/proc/cpuinfo
? ไม่แน่ใจว่าจะช่วยถอดรหัส blobs ได้
ในฟอรัม raspberrypi.org อย่างเป็นทางการ "Dom" - ผู้ดำเนินรายการเขียน:
ฉัน fudged บอร์ดของฉันจะมีหมายเลขซีเรียลของคุณ
ฉันจะแก้ไขหมายเลขซีเรียลของ Raspberry Pi ได้อย่างไร
/proc/cpuinfo
? ไม่แน่ใจว่าจะช่วยถอดรหัส blobs ได้
คำตอบ:
ฉันกำลังคัดลอกสิ่งนี้จากกระทู้ในฟอรัมนี้
Dom สามารถเข้าถึงซอร์สโค้ดทั้งหมดตัวดีบัก Videocore และเครื่องมือเฉพาะ VC จำนวนมากที่ปิดอยู่ และการปล่อยข้อมูลใด ๆ เพื่อให้คุณสามารถเปลี่ยนหมายเลขซีเรียลจะเป็นการทำลายกลไกการออกใบอนุญาตของตัวแปลงสัญญาณดังนั้นจะไม่เกิดขึ้นอีก
นอกจากนี้ตามที่โพสต์ในหัวข้อ เหตุผลเดียวในการเปลี่ยนซีเรียลคือการคัดลอกใบอนุญาต MP4 ของผู้อื่นและใช้งาน เช่นเดียวกับความปลอดภัยของลิขสิทธิ์ อนุกรมที่ไม่ซ้ำกันของคุณเชื่อมโยงกับใบอนุญาต MP4 ดังนั้นแม้ว่าใครบางคนจะได้รับคีย์ใบอนุญาตของคุณพวกเขาจะไม่สามารถทำอะไรกับมันได้ (เว้นแต่พวกเขาจะสามารถเปลี่ยนหมายเลขประจำเครื่องของ Raspberry Pi ได้
UPDATE:เพื่อตอบคำถามจริง ฉันจะบอกว่าเป็น Dom มีแหล่งที่มาสำหรับเฟิร์มแวร์ระดับต่ำที่เกิดขึ้นจริง ฉันคิดว่าเขาแค่เปลี่ยนซอร์สโค้ดที่อ่านซีเรียลและบังคับให้มันคืนค่าที่ต่างออกไป ฉันสงสัยจริงๆว่ามันเปลี่ยนไปจริง ๆ (บน CPU ที่ฉันหมายถึง) เหมือนเขาเปลี่ยนรหัสเฟิร์มแวร์บางส่วนเพื่อส่งคืนซีเรียลอื่น นอกจากนี้ยังขออภัยต่อผู้ถามเราทุกคนเพิ่งให้ "ทำไมล่ะไม่ดีการขโมยของคุณ" แทนที่จะตอบคำถาม ความผิดฉันเอง.
สำหรับโปรแกรมที่เกี่ยวกับผู้ใช้มันเป็นเรื่องง่ายที่จะหลอกพวกเขาและปลอมเนื้อหาของไฟล์ใด ๆ ตัวอย่างเช่นสมมติว่าโปรแกรม C กำลังใช้/proc/cpuinfo
ไฟล์เพื่อตรวจสอบหมายเลขซีเรียล โปรแกรมได้รับการป้องกันการคัดลอกและเชื่อมโยงกับซีเรียลและฉันไม่มีซอร์สโค้ด อย่างไรก็ตามฉันยังสามารถวิ่งstrace program 2>&1 | grep cpuinfo
ได้ซึ่งจะเปิดเผยสิ่งที่ชอบ:
open("/proc/cpuinfo", O_RDONLY) = 3
ณ จุดนี้ฉันสามารถสร้างห้องสมุดขนาดเล็กcpuinfo.so
ด้วยฟังก์ชั่นต่อไปนี้:
int open(const char *file, int flags) {
static int (*real_open)(const char *file, int flags);
if(!real_open) real_open = dlsym(RTLD_NEXT, "open");
if(!strcmp(file, "/proc/cpuinfo")) file = "/tmp/cpuinfo";
return real_open(file, flags);
}
อย่างที่คุณเห็นฉันกำลังตรวจสอบว่าผู้ใช้ไลบรารีพยายามเปิด/proc/cpuinfo
หรือไม่ซึ่งในกรณีนี้ฉันเปิด/tmp/cpuinfo
แทน
จากนั้นฉันจะเรียกใช้โปรแกรมป้องกันการคัดลอกต้นฉบับเป็นLD_PRELOAD=/path/to/cpuinfo.so program
และมันจะอ่านไฟล์ปลอมของฉันอย่างมีความสุขคิดว่ามัน/proc/cpuinfo
ในขณะที่ทำงานอย่างถูกต้องกับส่วนที่เหลือของไฟล์
โปรดทราบว่าหากซอฟต์แวร์ที่มีการป้องกันการคัดลอกมีวัตถุเคอร์เนลมันจะเป็นเรื่องยากที่จะหลอกเพราะมันสามารถเข้าถึงฮาร์ดแวร์ได้โดยตรง อย่างไรก็ตามซอฟต์แวร์ดังกล่าวจะทำงานร่วมกับเคอร์เนลที่สร้างขึ้นเท่านั้นจึงไม่สามารถแจกจ่ายได้