[คำเตือน HDD Ext. เสีย อย่าเสียบกับ windows เพราะอาจจะไม่โชคดีเหมือนเราที่ใช้ windows 10 ซึ่งมันอาจจะทำราย MBR ของ HDD ทำให้การกู้คืนยากขึ้น]
วันนี้ HDD เจ้ากรรม WD mybook ได้กลับบ้านเก่าไปแล้ว
อาการคือ เสียบเจอ WD My Book แต่ไม่เจอ drive ใดๆ
ได้ฤกษ์ก็ทำการแกะมันออกมาหน้าตา ก็เป็น WD Green 2 TB บ้านๆธรรมดา
ตัวปัญหา
ก็ไม่คิดอะไร แบบบ้านๆเลยก็ทำการแต่สาย sata เข้ากับ คอมไปเลย จะได้ใช้เป็น internal HDD แทนสวยๆ
ปรากฏว่ามันไม่จบ เสียบปุ๊บเห็น HDD ไหงไม่เห็น drive อะไรใดๆเลย!!! เหมือนเป็น HDD ลูกใหม่
(ไม่ได้แคปรูปไว้)
งานเข้าแล้วทีนี้ก็เลยลอง Google ดูก็ถึงบางอ้อ... ไอตัว HDD Ext. นี้มันมีการ Encrypt ข้อมูลไว้
https://support.wdc.com/knowledgebase/answer.aspx?ID=15150
เอาหล่ะตอนนี้เริ่มท้อและ แต่ก็ยังคงหาข้อมูลต่อไป บ้างก็บอกว่ามัน encrypt แล้วฝังรหัสไว้ในชิพ แต่ก็มาเจอกระทู้นี้เข้า
https://community.wd.com/t/how-to-decrypt-a-wd-mybook-drive-after-its-removed-from-the-enclosure/146588
ตามคำตอบของคุณ โทมัส เขาบอกว่าจริงๆ key encryption นั้นฝังอยู่ใน HDD นี่แหละ อยู่ใน sector ท้ายๆของ HDD ก็ลองกดเข้าไปอ่านดู
https://github.com/themaddoctor/linux-mybook-tools
เขาบอกว่ามันสามารถ decrypt hdd ที่ใช้ chip external รุ่น JMS538S, SW6316, INIC1607E, OXUF943SE ได้เท่านั้นก็เลยไปเอาไฟส่องดูบนบอร์ด โชคดีตัวนี้ใช้ชิพ JMS538S รอดแล้วเรา แต่ต้องใช้กับ linux เท่านั้น.... Orz
*สำหรับสายช่าง hdd ที่เป็น external port usb แบบฝัง เขาลงข้อมูลการจัมพ์สาย sata ไว้ด้วย คราวนี้ hdd ก็จะไม่เสียเปล่าแล้วววว!!
http://blog.acelaboratory.com/pc-3000-hdd-how-to-solder-a-sata-adapter-to-the-usb-western-digital-drive.html
เอาหล่ะมาเริ่มกัน
สิ่งที่ต้องเตรียม
FlashDrive ตัวนึง (เอาไว้บูตเข้า linux)
ก่อนอื่นง่ายสุด เราโหลด Ubuntu มาใช้ในการกู้คืนแล้วก็ทำ usb boot ใน flashdrive
https://www.ubuntu.com/download/desktop
เราโหลดตัว Ubuntu 16.04.4 LTS
ส่วนวิธีทำ USB Boot ก็ตามนี้
https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-windows#0
หลังจากนั้นก็ รีเครื่องเพื่อ boot ไปติดตั้ง ubuntu แต่โชคดีที่มันไม่ต้องติดตั้งก็ได้ เราก็เลยเลือก try ubuntu แทน 555 (ไม่รกที่)
เราก็เริ่มเลยโดยอ้างอิงจากคู่มือนี้
https://github.com/themaddoctor/linux-mybook-tools/blob/master/Mounting%20encrypted%20WD%20disks%20in%20linux%200.5.1.pdf
ของเราเป็น ชิพ JMicron เขาบอกแค่ลง kernel development ก็พอด้วยการรัน คำสั่งนี้ใน terminal
sudo apt-get build-dep linux-image-$(uname -r)
ปรากฎว่าไม่ผ่าน ติด error เราก็เลย Google ไปหาวิธีว่าแก้ยังไง
https://wiki.ubuntu.com/Kernel/BuildYourOwnKernel
เขาบอกให้เรา apt-get source linux-image-$(uname -r)
ก็ทำเรียบร้อย ก็ยังขึ้น error อีก
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
builddeps:linux-hwe : Depends: dh-systemd but it is not installable
Depends: xmlto but it is not installable
Depends: docbook-utils but it is not installable
Depends: asciidoc but it is not installable
Depends: python-sphinx but it is not installable
Depends: python-sphinx-rtd-theme but it is not installable
ก็เลย Google หาวิธีแก้อีกรอบเขาบอกให้รัน software-properties-gtk แล้วติ๊กทั้งหมดใน tab ubuntu software
ลองรันอีกรอบทีนี้ก็ไม่ error และ รอมันทำงานไปยาวๆ
เสร็จแล้วก็มาเริ่มกันต่อเลยเขาบอกให้หา drive ที่เป็น HDD เจ้าปัญหาก่อน
เราใช้วิธีเปิด Disks ของ ubuntu แล้วดู Device path ของเราได้ /dev/sdb
จากนั้นก็ลองเช็คดูตาม pdf sudo file -s /dev/sdb เราก็ได้ /dev/sdc: data ตามที่เขาบอก
จากนั้นสร้างโฟลเดอร์ไว้ทำงาน เรา cd ไปที่ /home ก่อนแล้วก็
mkdir wd
cd wd
ของเราไม่ได้ตั้ง password ก็รัน
echo 03141592653589793238462643383279fcebea6d9aca7686cdc7b9d9bcc7cd86 > kek.hex
ต่อเลย
HDD เรา 2TB ก็รันต่อ
sudo dd if=/dev/sdc bs=512 skip=3907024928 count=1 of=kb.bin
ตรวจสอบความถูกต้องด้วย
hexdump -C kb.bin
จะเห็น WDv1 อยู่ที่บรรทัดแรก
อันนี้ของเรา
00000000 57 44 76 31 12 4c 00 00 00 88 df e8 00 00 00 00 |WDv1.L..........|
00000010 00 00 00 00 00 00 f0 00 00 00 00 00 00 00 00 00 |................|
00000020 01 00 00 00 00 00 46 50 00 00 00 00 00 00 00 00 |......FP........|
00000030 00 02 ff 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
รันคำสั่งตามpdf ไปเรื่อยๆ
cat kek.hex | grep -o .. | tac | echo "$(tr -d '\n')" > kek1.hex
for i in `seq 0 31`; do
dd if=kb.bin bs=16 count=1 skip=$i status=none | \
xxd -p | grep -o .. | tac | echo "$(tr -d '\n')" | \
xxd -p -r >> kb1.bin
done
openssl enc -d -aes-256-ecb -K `cat kek1.hex` \
-nopad -in kb1.bin -out kb2.bin
for i in `seq 0 31`; do
dd if=kb2.bin bs=16 count=1 skip=$i status=none | \
xxd -p | grep -o .. | tac | echo "$(tr -d '\n')" | \
xxd -p -r >> kb3.bin
done
แล้วก็มาตรวจไฟล์อีกรอบ
hexdump -C kb3.bin
จะเห็น DEK1 ที่ แถว 00000100
ของเรา
000000f0 91 00 00 00 48 00 00 00 9d 00 00 00 b6 00 00 00 |....H...........|
00000100 44 45 4b 31 e2 c4 00 00 ec 7c d0 22 7a a2 f0 47 |DEK1.....|."z..G|
00000110 79 fb 6d bb 6e 5a 4a cc 27 21 3e 34 ab b3 c6 d5 |y.m.nZJ.'!>4....|
รันต่อไป
dd if=kb3.bin bs=1 skip=268 count=16 of=dek0.bin status=none
dd if=kb3.bin bs=1 skip=288 count=16 status=none >> dek0.bin
xxd -p -c 32 dek0.bin | grep -o .. | tac | \
echo "$(tr -d '\n')" > dek.hex
ที่นี้เราก็ต้องสร้าง lib เพื่อไว้ใช้ถอดรหัส drive
ก็ก๊อปโค้ดตามที่เขาบอกใน Appendix D (ของเราต้องเอา # end ออกไม่งั้น คอมไพล์ไม่ผ่าน)
รันตามที่เขาบอกไปกันยาวๆ
echo "obj-m := rev16.o" > Makefile
make -C /lib/modules/`uname -r`/build M=$PWD
sudo insmod rev16.ko
ที่นี้เราไม่รู้ว่า kernel เราอยู่ path ไหนเราก็เลยลองรัน
sudo modprobe rev16
ดู
มันก็ error บอกหาไฟล์ไม่เจอ
modprobe: FATAL: Module rev16 not found in directory /lib/modules/4.13.0-36-generic
เราก็เลยแก้คำสั่ง
sudo cp rev16.ko /lib/modules/3.13.2/kernel/crypto/
้เป็น
sudo cp rev16.ko /lib/modules/4.13.0-36-generic
แทน
แล้วก็
sudo depmod
แล้วก็เช็คว่ามี error อะไรไหมด้วยการรัน
sudo modprobe rev16
ถ้าไม่ขึ้นอะไรก็จบ
กลับมาต่อที่ค้างจากเดิม
ก็รันคำสั่ง ของเรา hdd อยู่ /dev/sdb ก็จะรันตามนี้
echo | sudo cryptsetup -d - -c rev16-ecb \
create wd-layer1 /dev/sdb
cat dek.hex | xxd -p -r | sudo cryptsetup -d - --hash=plain \
--key-size=256 -c aes-ecb create wd-layer2 /dev/mapper/wd-layer1
echo | sudo cryptsetup -d - -c rev16-ecb \
create wd /dev/mapper/wd-layer2
เสร็จแล้วก็เช็คดูด้วยการรัน
sudo file -sL /dev/mapper/wd
ของเราขึ้น
/dev/mapper/wd: DOS/MBR boot sector MS-MBR XP english at offset 0x12c "Invalid partition table" at offset 0x144 "Error loading operating system" at offset 0x163 "Missing operating system", disk signature 0x5f107; partition 1 : ID=0x7, start-CHS (0x0,32,33), end-CHS (0x3ff,254,63), startsector 2048, 3906961408 sectors
เป็นอันผ่าน
แต่มันก็ยังไม่โชว์ drive ให้เราเข้าได้ใน ubuntu อยู่ดี
ก็ต้องมา mount มัน
sudo kpartx -a /dev/mapper/wd
จบ แค่นี้เราก็สามารถเข้าถึงข้อมูลของเราได้แล้ว เฮ!!!
จากนั้นก็ก๊อปมันออกมายาวๆ ไป
กู้ชีพ WD My Book แบบไม่ง้อ Lab
วันนี้ HDD เจ้ากรรม WD mybook ได้กลับบ้านเก่าไปแล้ว
อาการคือ เสียบเจอ WD My Book แต่ไม่เจอ drive ใดๆ
ได้ฤกษ์ก็ทำการแกะมันออกมาหน้าตา ก็เป็น WD Green 2 TB บ้านๆธรรมดา
ตัวปัญหา
ก็ไม่คิดอะไร แบบบ้านๆเลยก็ทำการแต่สาย sata เข้ากับ คอมไปเลย จะได้ใช้เป็น internal HDD แทนสวยๆ
ปรากฏว่ามันไม่จบ เสียบปุ๊บเห็น HDD ไหงไม่เห็น drive อะไรใดๆเลย!!! เหมือนเป็น HDD ลูกใหม่
(ไม่ได้แคปรูปไว้)
งานเข้าแล้วทีนี้ก็เลยลอง Google ดูก็ถึงบางอ้อ... ไอตัว HDD Ext. นี้มันมีการ Encrypt ข้อมูลไว้
https://support.wdc.com/knowledgebase/answer.aspx?ID=15150
เอาหล่ะตอนนี้เริ่มท้อและ แต่ก็ยังคงหาข้อมูลต่อไป บ้างก็บอกว่ามัน encrypt แล้วฝังรหัสไว้ในชิพ แต่ก็มาเจอกระทู้นี้เข้า
https://community.wd.com/t/how-to-decrypt-a-wd-mybook-drive-after-its-removed-from-the-enclosure/146588
ตามคำตอบของคุณ โทมัส เขาบอกว่าจริงๆ key encryption นั้นฝังอยู่ใน HDD นี่แหละ อยู่ใน sector ท้ายๆของ HDD ก็ลองกดเข้าไปอ่านดู
https://github.com/themaddoctor/linux-mybook-tools
เขาบอกว่ามันสามารถ decrypt hdd ที่ใช้ chip external รุ่น JMS538S, SW6316, INIC1607E, OXUF943SE ได้เท่านั้นก็เลยไปเอาไฟส่องดูบนบอร์ด โชคดีตัวนี้ใช้ชิพ JMS538S รอดแล้วเรา แต่ต้องใช้กับ linux เท่านั้น.... Orz
*สำหรับสายช่าง hdd ที่เป็น external port usb แบบฝัง เขาลงข้อมูลการจัมพ์สาย sata ไว้ด้วย คราวนี้ hdd ก็จะไม่เสียเปล่าแล้วววว!!
http://blog.acelaboratory.com/pc-3000-hdd-how-to-solder-a-sata-adapter-to-the-usb-western-digital-drive.html
เอาหล่ะมาเริ่มกัน
สิ่งที่ต้องเตรียม
FlashDrive ตัวนึง (เอาไว้บูตเข้า linux)
ก่อนอื่นง่ายสุด เราโหลด Ubuntu มาใช้ในการกู้คืนแล้วก็ทำ usb boot ใน flashdrive
https://www.ubuntu.com/download/desktop
เราโหลดตัว Ubuntu 16.04.4 LTS
ส่วนวิธีทำ USB Boot ก็ตามนี้
https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-windows#0
หลังจากนั้นก็ รีเครื่องเพื่อ boot ไปติดตั้ง ubuntu แต่โชคดีที่มันไม่ต้องติดตั้งก็ได้ เราก็เลยเลือก try ubuntu แทน 555 (ไม่รกที่)
เราก็เริ่มเลยโดยอ้างอิงจากคู่มือนี้
https://github.com/themaddoctor/linux-mybook-tools/blob/master/Mounting%20encrypted%20WD%20disks%20in%20linux%200.5.1.pdf
ของเราเป็น ชิพ JMicron เขาบอกแค่ลง kernel development ก็พอด้วยการรัน คำสั่งนี้ใน terminal
sudo apt-get build-dep linux-image-$(uname -r)
ปรากฎว่าไม่ผ่าน ติด error เราก็เลย Google ไปหาวิธีว่าแก้ยังไง
https://wiki.ubuntu.com/Kernel/BuildYourOwnKernel
เขาบอกให้เรา apt-get source linux-image-$(uname -r)
ก็ทำเรียบร้อย ก็ยังขึ้น error อีก
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
builddeps:linux-hwe : Depends: dh-systemd but it is not installable
Depends: xmlto but it is not installable
Depends: docbook-utils but it is not installable
Depends: asciidoc but it is not installable
Depends: python-sphinx but it is not installable
Depends: python-sphinx-rtd-theme but it is not installable
ลองรันอีกรอบทีนี้ก็ไม่ error และ รอมันทำงานไปยาวๆ
เสร็จแล้วก็มาเริ่มกันต่อเลยเขาบอกให้หา drive ที่เป็น HDD เจ้าปัญหาก่อน
เราใช้วิธีเปิด Disks ของ ubuntu แล้วดู Device path ของเราได้ /dev/sdb
จากนั้นก็ลองเช็คดูตาม pdf sudo file -s /dev/sdb เราก็ได้ /dev/sdc: data ตามที่เขาบอก
จากนั้นสร้างโฟลเดอร์ไว้ทำงาน เรา cd ไปที่ /home ก่อนแล้วก็
mkdir wd
cd wd
ของเราไม่ได้ตั้ง password ก็รัน
echo 03141592653589793238462643383279fcebea6d9aca7686cdc7b9d9bcc7cd86 > kek.hex
ต่อเลย
HDD เรา 2TB ก็รันต่อ
sudo dd if=/dev/sdc bs=512 skip=3907024928 count=1 of=kb.bin
ตรวจสอบความถูกต้องด้วย
hexdump -C kb.bin
จะเห็น WDv1 อยู่ที่บรรทัดแรก
อันนี้ของเรา
00000000 57 44 76 31 12 4c 00 00 00 88 df e8 00 00 00 00 |WDv1.L..........|
00000010 00 00 00 00 00 00 f0 00 00 00 00 00 00 00 00 00 |................|
00000020 01 00 00 00 00 00 46 50 00 00 00 00 00 00 00 00 |......FP........|
00000030 00 02 ff 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
dd if=kb.bin bs=16 count=1 skip=$i status=none | \
xxd -p | grep -o .. | tac | echo "$(tr -d '\n')" | \
xxd -p -r >> kb1.bin
done
openssl enc -d -aes-256-ecb -K `cat kek1.hex` \
-nopad -in kb1.bin -out kb2.bin
for i in `seq 0 31`; do
dd if=kb2.bin bs=16 count=1 skip=$i status=none | \
xxd -p | grep -o .. | tac | echo "$(tr -d '\n')" | \
xxd -p -r >> kb3.bin
done
แล้วก็มาตรวจไฟล์อีกรอบ
hexdump -C kb3.bin
จะเห็น DEK1 ที่ แถว 00000100
ของเรา
000000f0 91 00 00 00 48 00 00 00 9d 00 00 00 b6 00 00 00 |....H...........|
00000100 44 45 4b 31 e2 c4 00 00 ec 7c d0 22 7a a2 f0 47 |DEK1.....|."z..G|
00000110 79 fb 6d bb 6e 5a 4a cc 27 21 3e 34 ab b3 c6 d5 |y.m.nZJ.'!>4....|
รันต่อไป
dd if=kb3.bin bs=1 skip=268 count=16 of=dek0.bin status=none
dd if=kb3.bin bs=1 skip=288 count=16 status=none >> dek0.bin
xxd -p -c 32 dek0.bin | grep -o .. | tac | \
echo "$(tr -d '\n')" > dek.hex
ที่นี้เราก็ต้องสร้าง lib เพื่อไว้ใช้ถอดรหัส drive
ก็ก๊อปโค้ดตามที่เขาบอกใน Appendix D (ของเราต้องเอา # end ออกไม่งั้น คอมไพล์ไม่ผ่าน)
รันตามที่เขาบอกไปกันยาวๆ
echo "obj-m := rev16.o" > Makefile
make -C /lib/modules/`uname -r`/build M=$PWD
sudo insmod rev16.ko
sudo modprobe rev16
ดู
มันก็ error บอกหาไฟล์ไม่เจอ
modprobe: FATAL: Module rev16 not found in directory /lib/modules/4.13.0-36-generic
เราก็เลยแก้คำสั่ง
sudo cp rev16.ko /lib/modules/3.13.2/kernel/crypto/
้เป็น
sudo cp rev16.ko /lib/modules/4.13.0-36-generic
แทน
แล้วก็
sudo depmod
แล้วก็เช็คว่ามี error อะไรไหมด้วยการรัน
sudo modprobe rev16
ถ้าไม่ขึ้นอะไรก็จบ
กลับมาต่อที่ค้างจากเดิม
ก็รันคำสั่ง ของเรา hdd อยู่ /dev/sdb ก็จะรันตามนี้
echo | sudo cryptsetup -d - -c rev16-ecb \
create wd-layer1 /dev/sdb
cat dek.hex | xxd -p -r | sudo cryptsetup -d - --hash=plain \
--key-size=256 -c aes-ecb create wd-layer2 /dev/mapper/wd-layer1
echo | sudo cryptsetup -d - -c rev16-ecb \
create wd /dev/mapper/wd-layer2
เสร็จแล้วก็เช็คดูด้วยการรัน
sudo file -sL /dev/mapper/wd
ของเราขึ้น
/dev/mapper/wd: DOS/MBR boot sector MS-MBR XP english at offset 0x12c "Invalid partition table" at offset 0x144 "Error loading operating system" at offset 0x163 "Missing operating system", disk signature 0x5f107; partition 1 : ID=0x7, start-CHS (0x0,32,33), end-CHS (0x3ff,254,63), startsector 2048, 3906961408 sectors
เป็นอันผ่าน
แต่มันก็ยังไม่โชว์ drive ให้เราเข้าได้ใน ubuntu อยู่ดี
ก็ต้องมา mount มัน
sudo kpartx -a /dev/mapper/wd
จบ แค่นี้เราก็สามารถเข้าถึงข้อมูลของเราได้แล้ว เฮ!!!
จากนั้นก็ก๊อปมันออกมายาวๆ ไป