|
หากเป็น User ของ Windows 9x,Me
ธรรมดา การแก้ Registry บ่อยครั้งที่ดูจะไม่คุ้มที่จะหาจุดเสีย
สำหรับคนที่ไม่ชำนาญ สู้ Format ลงโปรแกรมใหม่ไม่ได้ คนที่จะเล่น Registry
ก็จะเป็นพวกมือบอน อยากรู้อยากเห็นเป็นส่วนใหญ่ แต่หากเป็นระดับมืออาชีพ
หรือนักวางระบบแล้ว Registry มีประโยชน์อย่างยิ่ง ลองนึกภาพศูนย์บริการ
Internet ที่มีผู้ใช้ในระบบกว่าพันคน เกิดมีส่วนเล็ก ๆ ของระบบรวน
หรือเสียเนื่องจาก Registry แล้ว คงเป็นไปไม่ได้ที่จะ Format ลงโปรแกรม
และตั้งค่าใหม่ เพราะคงต้องใช้เวลาเป็นเดือน กว่าจะลงโปรแกรม ตั้งค่า ทดสอบ
กำหนดสิทธิ เช็กระบบความปลอดภัยกันใหม่หมด รวมทั้งเวลา แรงงาน
และลูกค้าที่จะเสียไปเนื่องจากงานชะงัก ไม่เพียงแต่เท่านั้น
การจะเพิ่มความสามารถและลูกเล่นหลาย ๆ อย่าง
เช่นการทำให้ระบบสามารถตรวจสอบยอดการใช้งาน ให้ลงทะเบียน Online
เพื่อเป็นสมาชิก Internet
เหล่านี้ล้วนต้องเขียนโปรแกรมลงทะเบียนให้เข้าไปแก้ผู้ใช้โดยอัตโนมัติ
แทนที่ผู้ใช้ลงทะเบียน และ e-mail มาให้เรานั่งสร้างผู้ใช้ทีละคน
สักสองวันผู้ใช้ค่อยเริ่มใช้ Internet ได้ พอเงินหมด ก็ให้โทรแจ้ง
เราก็ต้องมีคนคอยรับโทรศัพท์ นั่งแก้กำหนดสิทธิใหม่ อยู่ตลอดเวลา
นอกจากเปลืองค่าจ้าง ล่าช้า แล้วยังทำให้โอกาสผิดพลาดสูงอีกด้วย
เมื่อถึงจุดหนึ่ง การแก้ Registry จะไม่เป็นประโยชน์เพียงในการใช้งานเท่านั้น
แต่เราจะเขียนโปรแกรมเพื่อเรียกใช้งานมันโดยตรงจาก Application ที่เราสร้างเลย
จะเห็นได้ว่า Registry มีความสำคัญ
ถือเป็นหัวใจของ Windows เราจึงควรเตรียมการป้องกัน Registry
ก่อนที่มันจะเสียหาย โอกาสที่ Registry จะเสียหายมีอยู่ได้เสมอ ตั้งแต่ไฟตก
การอ่านเขียนข้อมูลผิดพลาด โปรแกรมบางตัวรวน หรือ Hang
โดยเฉพาะในช่วงที่ตลาดคอมพิวเตอร์มีการแข่งขันราคากันสูง อุปกรณ์ต่าง ๆ
ได้ถูกลดต้นทุน ตัวอย่างที่เห็นได้ชัดก็คือ RAM หลายปีก่อน เราสามารถเลือกซื้อ
RAM ที่มี Parity ซึ่งราคาจะแพงกว่า RAM ธรรมดาเล็กน้อย (สมัย EDO RAM )
แต่ในปัจจุบัน RAM เกือบทั้งหมดไม่มี Parity จนเราลืมกันไปเลย
ไม่เคยมีใครที่ประกอบ หรือซื้อเครื่องคอมพิวเตอร์จากร้าน แล้วถามว่า RAM มี
Parity ไหม ถึงถามก็ไม่มีขาย บางคนอาจสงสัยว่า Parity คืออะไร Parity
ก็คือบิตพิเศษ ที่ใช้ตรวจสอบว่า ข้อมูลที่เรารับส่งกันอยู่นั้นถูกต้องหรือไม่
ตลอดเวลาที่ RAM ติดต่อกับ CPU ทุก ๆ วินาทีมีข้อมูลเป็นล้าน ๆ ไบต์วิ่งไปมา
หากสักบิตหนึ่งในแสนล้านบิต
เกิดผิดพลาดและหากข้อมูลตรงช่วงนั้นเป็นข้อมูลเกี่ยวข้องกับระบบด้วยละก็
เครื่องก็อาจ Hang ไฟล์ Registry อาจเขียนผิดทำให้พัง Parity จะเป็นข้อมูลเล็ก
ๆ อีกชุดที่เกิดจากการเข้าสมการเพื่อตรวจเช็กความถูกต้องของข้อมูลทั้งหมดที่รับส่งกัน
การที่จะป้องกันปัญหาที่เกิดจาก
Registry เสียหายก็โดยเข้าใจก่อนว่า มันเก็บอยู่ที่ไหน อย่างไร
บางคนอาจเห็นว่าไม่จำเป็น เนื่องจากมี Utility เช่น scanreg หรือ backup
registry อยู่แล้ว นั่นเป็นความเข้าใจที่ผิด เพราะโปรแกรมเหล่านั้นช่วยได้จริง
แต่ไม่ครอบคลุมปัญหาทุกกรณี ยังมีปัญหาบางอย่างยังคงต้องแก้เองแบบ manual
เท่านั้น ปกติแล้ว เราเข้าไปแก้ Registry ผ่านโปรแกรม Regedit
โดยไม่เคยรู้เลยว่าแท้ที่จริงแล้ว มันอยู่ที่ไหน เป็นไฟล์ชื่ออะไร
บนสถาปัตยกรรมของ Windows 9x กับ NT นั้นไม่เหมือนกัน แม้ดูเผิน ๆ หน้าจอคล้าย
ๆ กัน แต่โครงสร้างต่างกันมาก บน Windows 2000 นั้น
คงเป็นสถาปัตยกรรมที่พัฒนามาจาก NT มีไฟล์หลายไฟล์ที่ประกอบรวมกันเป็น Registry
ที่เราเห็นกล่าวคือ
Default - เก็บข้อมูลทั่ว ๆ ไปของ
Registry (ไฟล์ไม่มีนามสกุล)
SAM - (Security Accounts Manager)
เกี่ยวกับฐานข้อมูลผู้ใช้ รวมทั้งรหัสผ่านที่ถูกเข้ารหัสไว้ (จะ crack
รหัสใครก็ทำตรงนี้แหละ) (ไฟล์ไม่มีนามสกุล)
Security -
เกี่ยวกับการตั้งค่าระบบ เพื่อความปลอดภัย (ไฟล์ไม่มีนามสกุล)
Setup.log -
เก็บข้อมูลเกี่ยวกับไฟล์ที่ถูกติดตั้งอยู่บนระบบ การ upgrade ไฟล์ รวมทั้ง
service pack
Software - เก็บข้อมูล Registry
ของ Application ที่ติดตั้ง (ไฟล์ไม่มีนามสกุล)
System - ข้อมูลระบบ เช่น Driver ,
Hardware (ไฟล์ไม่มีนามสกุล)
ไฟล์เหล่านี้ถูกเก็บอยู่ที่ %systemroot%\System32\config
คุณอาจสงสัยว่า เจ้า %systemroot% คืออะไร ? มันคือตัวแปรสภาพแวดล้อม
(ไม่อยากเรียกภาษาไทยเลย ไม่ค่อยตรงความหมาย ทับศัพท์ดีกว่าว่า ตัวแปร
environment) คนที่เขียนโปแกรมพวก VB, Delphi จะคุ้นเคยอยู่กับตัวแปรพวกนี้ %systemroot%
เป็นตัวแปรตัวหนึ่ง ที่เก็บค่าของ Directory ปัจจุบันของ Windows เช่น ถ้า
Windows ของคุณติดตั้งอยู่ที่ c:\winnt แล้วล่ะก็ ตัวแปร %systemroot%\System32\config
ก็จะหมายถึง c:\winnt\System32\config คุณอาจจะใช้ตัวแปรนี้ใน Dos ก็ได้ เช่น
CD %systemroot% จะเหมือนกับพิมพ็ CD c:\winnt และแน่นอนว่า หากนำไปใช้กับ DOS
ได้แล้ว คุณก็เอาวิธีการเดียวกันไปประยุกต์ใช้เขียนใน BAT ไฟล์ได้
กรณีเป็น Win9x (หมายถึง Win95,
98, osr2) แม้จะเข้าถึง Registry ได้โดยใช้โปรแกรม Regedit
ที่มีหน้าตาเหมือนกับใน Nt/2000 ก็ตาม แต่โครงสร้างไม่เหมือนกัน
ข้อมูลจะถูกเก็บอยู่ที่ Directory ที่เก็บตัว Windows เอง (เราใช้ %systemroot%
กับ Win9x จะหมายถึง c:\ แทน) เช่นถ้า Windows เก็บอยู่ที่ c:\windows แล้ว
Registry ไฟล์เก็บอยู่ที่นี่ ซึ่งจะมีอยู่ 2 ไฟล์หลัก ๆ
system.dat - เก็บข้อมูลต่าง ๆ
เกี่ยวกับระบบ hardware, driver (คล้าย ๆ กับ system.ini เดิม
user.dat - เก็บข้อมูลผู้ใช้ต่าง ๆ
เช่น Desktop (คล้าย ๆ กับ ไฟล์ win.ini เดิม)
ทั้งไฟล์ user.dat และ system.dat
เป็นไฟล์ที่ Hidden และ read-only ผมจะทดสอบให้ดูว่า
ไฟล์นี้มีโครงสร้างอย่างไรดังนั้นให้ copy ไฟล์มาไว้อีกที่ แล้วทำการปลด Hidden
กับ readonly ด้วย Windows explorer โดยการคลิกขวาที่ไฟล์ที่ copy มา แล้วกด
property ดังรูปที่ 8 จากนั้นเอาเครื่องหมายถูกออกที่ช่อง hidden และ readonly
ดังรูปที่ 9 หากใครถนัดจะใช้ DOS ก็ให้ใช้คำสั่ง attirb -h -r user.dat
ก็ได้เหมือนกัน
ในภาพที่ 7 แสดงการเปิดไฟล์
user.dat ด้วย โปรแกรม edit ของ DOS ธรรมดา โดยพิมพ์ edit user.dat ที่ command
ของ DOS โปรแกรม edit จะแสดงรายละเอียดภายในไฟล์ ซึ่งส่วนมากจะเป็นขยะ
แต่ก็พอจะเดาออกจากตรงที่พออ่านได้ว่า มันเก็บข้อมูลผู้ใช้
ข้อมูลตำแหน่งที่เก็บโปรแกรม ฯลฯ ในทางปฏิบัติเราใช้ Regedit
เปิดนั้นดีอยู่แล้ว ไม่มีความจำเป็นอะไรที่ต้องมา edit แบบนี้
ผมเพียงมีวัตถุประสงค์เพื่อให้เห็นโครงสร้างจริง ๆ
นอกจากนี้ยังชี้ให้เห็นด้วยว่า ไฟล์ registry
ที่คุณสำรองไว้นั้นทำให้คุณมีความเสี่ยงเพียงไร หากคนอื่นได้ไป
เขาจะรู้โครงสร้างทั้งหมดในเครื่องคุณ ใครอยากเขียนโปรแกรมประเภทเจาะระบบ
หรือฝังตัวเป็นไวรัสแบบดักข้อมูลคนอื่นเงียบ ๆ ก็เอาไฟล์นี้มาศึกษา
ในส่วนที่เป็นคล้าย ๆ ขยะนั้น เราสามารถถอดรหัสได้โดยการใช้โปรแกรม Debugger
หรือ Hex editor เช่น Hex workshop มาเปิดดูแต่ละไบต์ แล้วค่อย ๆ แกะ
หรืออาจจะใช้การเขียนโปรแกรมอ่านขึ้นมา
หรืออาจจะสำรองข้อมูลบนเครื่องเราไว้ก่อน จากนั้นเอาไฟล์ Registry ที่ได้
มาทับไฟล์ในเครื่องเรา แล้วเปิดดู regedit ในเครื่องเราเองก็ได้
รูปที่ 7 แสดงการเปิดไฟล์
user.dat ด้วยโปรแกรม edit
รูปที่ 8 โครงสร้างของไฟล์
User.dat
รูปที่ 9 ผลของการคลิก
property
ดังนั้น เมื่อเรารู้แล้วว่า
Registry เก็บอยู่ที่ไหน จึงมีวิธีการสำรองข้อมูลใน Registry ได้หลายวิธี
1. Copy
ไฟล์ที่ทำหน้าที่เป็น Registry ตรง ๆ ไปเก็บไว้ โดยอาจเขียนเป็นไฟล์ BAT
เพื่อให้สะดวกใช้ โดยใช้คำสั่ง xcopy หรือ copy ของ DOS หากจะใช้ xcopy
ก็ให้แน่ใจด้วยว่า มีไฟล์ xcopy.exe อยู่ด้วยจึงจะ copy ได้ ข้อดีก็คือ xcopy
สามารถใช้สวิทช์ /s เพื่อ copy ไดเรกทอรีย่อยได้ด้วย นอกจากนี้ยังมีสวิทช์ /h
เพื่อให้สามารถ copy ไฟล์ที่เป็น hidden, readonly ได้
หากสงสัยว่ามีสวิทช์อะไรให้ ก็พิมพ์ "xcopy /? |more" ที่ DOS ดู จะมีคำอธิบาย
หากใช้ copy จะ copy ไฟล์ hidden ไม่ได้ ต้องยุ่งยากมาแก้ attribute ก่อน
เสี่ยงต่อไฟล์เสียหายเหมือนกัน หรือใครชอบจะใช้ pkzip ซึ่งเป็น utility
ที่มีใช้กันแพร่หลาย หาง่าย ๆ ใน internet เขียนเป็นไฟล์ bat ก็ดีเหมือนกัน
ไฟล์ bat เป็น text ไฟล์ง่าย ๆ
คุณอาจสร้างมันขึ้นมาด้วย notepad หรืออาจใช้ edit ของ dos ธรรมดาก็ได้
โดยการพิมพ์คำสั่งของ DOS เข้าไปในไฟล์ text นี้
มันก็จะทำงานเสมือนคุณพิมพ์คำสั่ง DOS จาก keyboard เมื่อคุณเรียกใช้มัน
คุณอาจเรียกใช้มันโดยการพิมพ์ชื่อไฟล์ bat ที่ได้ตรง ๆ ใน DOS
โดยไม่ต้องพิมพ์นามสกุล หรือโดยการดับเบิลคลิกไฟล์ดังกล่าวใน Windows ก็ได้
2. ใช้โปรแกรม Backup
2.1 ใน Win9x ไม่มีโปรแกรม backup
ให้ จึงต้องใช้วิธีการอื่น
2.2 ส่วน Win NT 4 จะมีโปรแกรม
Rdisk ซึ่งโปรแกรมจะทำการสร้างแผ่นฉุกเฉิน หรือแผ่นกู้ระบบ
แผ่นนี้เองที่จริงแล้วก็คือการนำเอาข้อมูลเกี่ยวกับ Registry ไปเก็บไว้ในแผ่น
แต่เนื่องจากไฟล์ Registry มีขนาดใหญ่มาก จึงไม่สามารถ copy ลงไปบน Diskett
ได้หมด Microsoft จึงออกแบบให้ copy เพียงรายละเอียด และที่ตั้งของไฟล์
Registry ส่วนตัวไฟล์ Backup จะนำไปเก็บไว้ที่ %systemroot%repair
เวลาจะเรียกคืนก็ต้องใส่แผ่นกู้ (เรียกว่าแผ่น ERD - Emergency repair disk)
พร้อมทั้งเรียกตัว Setup ของ NT ขึ้นมาใหม่ แล้วเลือกเมนูเพื่อ Repair
ดังนั้นหาก Harddisk เสียวิธีการนี้ไม่สามารถช่วยได้ เพราะข้อมูล Registry
ยังคงเก็บอยู่ใน Harddisk อยู่นั่นเอง
2.3 ใน Windows 2000 ไม่มีโปรแกรม
rdisk แต่หากสร้าง ERD หรือแผ่นกู้ จะทำการ copy ไฟล์ autoexec.nt , config.nt
และ setup.log ซึ่งไฟล์ setup.log จะถูกใช้ในการเรียกคืนค่า Registry
ส่วนตัวไฟล์ Backup ของRegistry จะเก็บอยู่ที่ %systemroot%\system32\repair
3. ใช้ Export ของ Registry
editor
ในโปรแกรม Regedit เราสามารถ
นำเข้า (Import) หรือส่งออก (Export) ข้อมูลใน Registry
ของเราไปเป็นไฟล์ข้อความ (Text) ได้ โดยการคลิกที่ไอคอน My computer ในโปรแกรม
Regedit เพื่อบอกว่าเราต้องการ Export Registry ทั้งหมด จากนั้นจึงคลิกที่เมนู
Registry/Export registry file... สำหรับการส่งออก ดังรูปที่ 10
ข้อมูลที่ส่งออกจะได้เป็น Text ไฟล์ที่อ่านเข้าใจได้ เมื่อทำแล้ว จะมี Dialog
box ให้เราตั้งชื่อเป็นไฟล์ที่จะ save ซึ่งจะมีนามสกุล .REG ดังรูปที่ 11
ปกติผมจะตั้งชื่อไฟล์นำหน้าด้วยชื่อเครื่องตามด้วยวันเดือนปี เป็นชื่อไฟล์
เมื่อได้ไฟล์นี้แล้วควรเก็บไว้ในที่ปลอดภัย
เพราะนอกจากจะเกี่ยวข้องกับระบบความปลอดภัยแล้ว ไฟล์ reg นี้จะเชื่อมกับโปรแกรม
regedit โดยหากใครไปดับเบิลคลิกเล่นที่ไฟล์ .REG นี้ ตัว Windows
จะเอาข้อมูลในไฟล์ที่ save ไปเขียนทับใน Registry เดิม อาจเกิดความเสียหายได้
รูปที่ 10
แสดงนำเข้าหรือส่งออกของข้อมูลใน Registry
รูปที่ 11 การตั้งชื่อและ Save
จะมีนามสกุล .REG
4. Registry
ที่ระบบทำการสำรองให้อยู่แล้ว
ในระบบของ Win9x จะมีโปรแกรม
utility ตัวหนึ่งให้มาด้วยก็คือ Scanreg ซึ่งระบบจะทำการสำเนา Registry
ให้เราทุกครั้งเมื่อเรา Shutdown เครื่อง โปรแกรม Scanreg มี สวิทช์ที่น่าสนใจ
2 ตัว คือ /Fix และ /Restore หากเราพิมพ์ scanreg /store ที่ Dos prompt แล้ว
จะมีรายชื่อของ Registry ที่ระบบสำรองให้ 5 ครั้งล่าสุด ให้เราเลือกเอา
โดยควรเลือกจากวันที่ใกล้ที่สุดก่อน หากยังไม่ได้ผล ก็เลือกวันก่อนหน้าไปเรื่อย
ๆ ก่อนจะ Restore ควร copy ไฟล์ registry เก็บไว้เสียก่อนเสมอ เผื่อพลาด
โปรแกรม scanreg นี้จะทำงานได้ใน Dos แท้ ๆ เท่านั้น ใช้ใน Dosshell ไม่ได้
ดังนั้น หากเราใช้คำสั่ง scanreg /store ใน dos shell ของ Windows
โปรแกรมจะฟ้องดังรูป 12 วิธีแก้ก็คือ ให้ใช้แผ่น Boot Dos หรือไม่ก็เข้า
Windows แบบ DOS แท้ ๆ ตั้งแต่ต้น โดยการกด F8 หลังจากกระบวนการ POST ของ
Mainboard แต่ก่อนที่ Windows จะโหลดตัวเอง จะมีเมนูขึ้นมาให้เลือก Command
prompt only จากนั้นจึงค่อยพิมพ์ scanreg /restore ใน NT/2000 ไม่มี DOS
แบบนี้ให้เข้าจึงใช้วิธีนี้ไม่ได้
รูปที่ 12 แสดงการใช้คำสั่ง
Scanreg
ปัญหายุ่งยากเกิดขึ้น
หากเราใช้พาร์ติชันแบบ NTFS ใน NT/2000 นั้น เราสามารถเลือกใช้ NTFS
เพื่อเหตุผลด้านความปลอดภัยของข้อมูล ซึ่ง Dos ไม่สามารถอ่านข้อมูลจากพาร์ติชัน
NTFS ได้จึงเกิดปัญหา ทางแก้ก็คือให้ลง Windows 2000 เสีย 2 ตัว
อีกตัวหนึ่งไม่ต้องลงโปรแกรมใช้งาน แต่ใช้เพื่อกู้ระบบ สมมุติว่า Registry
เราเกิดปัญหา เราก็สามารถเข้าสู่ระบบโดยใช้ Windows 2000 อีกตัวใน harddisk
เดียวกัน หรือจะต่าง harddisk ก็ตาม เพื่ออ่านเขียนข้อมูล Registry ที่สำรองไว้
กลับคืนไปได้ ถึงแม้ว่าบางคนอาจจะแย้งว่า มี utility ที่สามารถทำให้ dos ใช้งาน
NTFS ได้ แต่ทำได้แค่การอ่านเท่านั้น เราไม่สามารถเขียนได้
จึงจำเป็นที่จะต้องติดตั้ง Windows 2 ตัว อย่างไรก็ตามมี utility
ตัวหนึ่งสามารถใช้ทั้งอ่านและเขียนข้อมูลบน NTFS ได้ ให้ไปดูที่ website
http://www.sysinternals.com/
ให้ระวังด้วยว่า Registry
มีหลายไฟล์ที่เกี่ยวข้อง แต่ก็มีความสัมพันธ์กันอย่างใกล้ชิด
เราจะไม่เอาไฟล์ที่อยู่ในชุดสำรองคนละชุดมาผสมกัน ค่าต่าง ๆ ที่สัมพันธ์กันอยู่
จะส่งผลให้เกิดความขัดแย้งในแต่ละไฟล์ ทำให้ระบบล้มเหลวได้ และเช่นกัน
เราไม่สามารถนำเอาไฟล์ Registry จากเครื่องหนึ่งมาไว้ยังอีกเครื่องได้ เพราะ
Hardware และ Software และการติดตั้งค่าต่าง ๆ ไม่เหมือนกัน
ถึงแม้จะพยายามอาจจะได้ แต่ระบบจะรวนอย่างไม่น่าเชื่อ จนไม่น่าใช้เลยครับ |