กู้ชีพ WD My Book แบบไม่ง้อ Lab

กระทู้สนทนา
[คำเตือน 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


จบ แค่นี้เราก็สามารถเข้าถึงข้อมูลของเราได้แล้ว เฮ!!!



จากนั้นก็ก๊อปมันออกมายาวๆ ไป

แก้ไขข้อความเมื่อ
แสดงความคิดเห็น
อ่านกระทู้อื่นที่พูดคุยเกี่ยวกับ  Hard Disk ฮาร์ดแวร์
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่