WEB HACKING Security Thailand :::::: ::127.0.0.1   :: TC.16:::::::: : : : xxx
|หน้าหลัก | บทความ | ทฤษฏี| เทคนิคแนวปฏิบัติ | เครื่องมือ| ภาพ | วิจารณ์ | เนื้อหา | หนังสือ | CD | Port  | ลิงค์| Serial  | กระทู่ | สนทนา : สมุดเยียม

 Registry หัวใจของวินโดวส์ 2000

โดย อนิวรรตน์ สมาธิวัฒน์

Registry ทำอะไรบ้าง        พร้อมรับมือกับปัญหา Registry

รีจีสตี้คืออะไร
ข้อมูลพื้นฐาน และการแก้ไข
หน้าที่ของ Key ต่างๆ
การค้นหาค่าในรีจีสตี้
การสำรองรีจีสตี้
ทดลองปรับแต่งวินโดวส์
เข้าไปดูข้อมูลของโปรแกรม
การนำรีจีสตี้ไปกลั่นแกล้ง
 

Registry ถือเป็นโครงสร้างที่สำคัญของระบบปฏิบัติการวินโดวส์ เพราะถ้าไม่มี Registryแล้ว Windows ก็เหมือนกับไม่มีหัวใจอีกต่อไป

สวัสดีครับมาศึกษา เข้าใจการทำงานและโครงสร้างของ Registry กันแบบเจาะลึก ในที่นี้จะเน้น Registry สำหรับ Windows 2000 เป็นหลัก แต่ท่านก็ยังสามารถนำความรู้เดียวกันนี้ ไปปรับใช้กับ Windows 95, 98 , Me ได้อีกด้วย

สำหรับท่านที่คลุกคลีกับ Windows มากันนาน ๆ ตั้งแต่ Windows 3.1 สมัยนั้น ๆ คงยังพอจำกันได้ว่า มีไอคอนอยู่ไอคอนหนึ่งใน Control panel ชื่อว่า Registry editor ไม่รู้เอาไว้ทำอะไร ดู ๆ ไปจะไม่ค่อยมีประโยชน์เท่าไร (ซึ่งก็ไม่รู้จะเอาไปทำอะไรได้จริง ๆ นั่นแหละ ในตอนนั้น Microsoft คงกำลังพยายามจะนำเสนอความสามารถนี้ แต่ยังคงทำไม่เสร็จดี) บางท่านอาจยังคุ้นเคยกับการที่ต้องเข้าไปแก้ หรือลบไฟล์ Win.ini , System.ini สองไฟล์นี้ ที่มีปัญหาบ่อย ๆ เจ้าตัวดีนี้มักจะเสีย ทำให้วินโดวส์ของเรา Error หรือ Load ไม่ขึ้น บางทีก็เกิดบรรทัดแจ้งเตือนเป็นสิบ ๆ ครั้งให้เป็นที่หงุดหงิดรำคาญใจ ผมจะพูดเป็นลำดับต่อไปโดยละเอียดว่า แต่ละส่วนมีประโยชน์ และเราจะทำอะไรกับมันได้บ้าง

ระบบปฏิบัติการของเครื่องคอมพิวเตอร์นั้น จำเป็นจะต้องมีสถานที่ ไว้สำหรับเก็บข้อมูลของระบบ (Configuration) ซึ่งใน Windows ก่อนเวอร์ชัน 95 จะใช้ไฟล์ Win.ini และ System.ini ซึ่งอยู่ในรูปของ Text ไฟล์ เก็บอยู่ใน Directory ของโปรแกรม Windows เช่น C:\windows (ไฟล์ข้อความธรรมดา คุณสามารถเปิดดูได้โดยใช้ Note pad, Word pad หรือแม้กระทั่ง MS Word) ข้อมูลที่เก็บก็มีตั้งแต่ข้อมูลการปรับแต่งหน้าจอ การติดต่อกับผู้ใช้ ระบบภาษา ไดรเวอร์ ที่ใช้เชื่อมต่อกับอุปกรณ์ต่าง ๆ , ข้อมูลผู้ใช้ และทุก ๆ อย่างที่คุณจะปรับแต่งได้ใน Windows นอกจากนี้ โปรแกรมต่าง ๆ ที่ติดตั้งลงไป ยังมาระดมกันใช้งานกันที่นี่ ด้วยเหตุผลที่ว่าจะได้ประสานงาน และแลกเปลี่ยนข้อมูลจากโปรแกรมหนึ่ง กับอีกโปรแกรม จึงเป็นไปได้ที่จะมีตาราง Excel อยู่บน โปรแกรม Power point ปัญหาที่เกิดขึ้นก็คือ ไฟล์ทั้งสอง มีขนาดใหญ่ขึ้นทุกทีตามจำนวนโปรแกรมที่ติดตั้งลงไป และเนื่องจากอยู่ในรูปไฟล์ข้อความ (Text file) จึงทำให้ล่าช้าในการสืบค้นข้อมูล ดังจะเห็นได้ว่า ยิ่งติดตั้งโปรแกรมลงบนวินโดวส์มากเท่าไร มันก็จะยิ่งทำงานช้าลงเรื่อย ๆ จนถึงวันที่คุณทนไม่ไหว ต้อง Format มันทิ้ง นั่นยังไม่นับรวมถึงปัญหาอื่นๆ เช่น การที่ต้องมีไฟล์นามสกุล ini ซึ่งเป็นไฟล์ Configuration ของโปรแกรมที่ติดตั้งเพิ่มเข้าไป ต่างคนต่างสร้างเยอะแยะเป็นขยะกระจายไปในเครื่อง อย่างกับสวนยุง กำจัดไม่รู้จักหมด

พอไมโครซอฟท์ ประกาศเปิดตัว Windows 95 หลาย ๆ อย่างก็เปลี่ยนไป มีการนำเอา Registry เข้ามาใช้แทนไฟล์ ini แบบดั้งเดิม มายุบรวมไว้ที่เดียว มีคุณสมบัติในเชิงฐานข้อมูล สืบค้นค่าต่าง ๆ ได้รวดเร็ว และรองรับขนาดที่ใหญ่มากขึ้นได้ คุณสมบัตินี้ถูกนำไปใช้ใน Windows NT, 98 , ME จนถึง Windows 2000 ในขณะที่ไฟล์ win.ini กับ system.ini จะยังคงมีให้เห็นอยู่เพียงเพื่อให้สนับสนุน Application รุ่นเก่า ๆ ได้ ซึ่งถ้าไม่ได้ใช้โปรแกรมรุ่นเก่าๆ เหล่านั้น จะลบไฟล์นี้เสียก็ไม่เป็นไร

ลักษณะการเก็บข้อมูลใน Registry เปรียบได้กับไฟล์ และโฟลเดอร์ โดย Registry จะแบ่งเก็บข้อมูลออกเป็นส่วนหลัก ๆ ที่เรียกว่า Hive ซึ่งเปรียบเสมือนโฟลเดอร์แรก ในแต่ละ Hive ก็จะมีที่เก็บข้อมูลคล้าย ๆ กันกับโฟลเดอร์เช่นกัน เรียกว่า Key หรือ Sub Key ในแต่ละ key จะมีข้อมูลเก็บอยู่ เรียกว่า Value (Key แรกที่อยู่ถัดจาก Hive เราเรียก Key เฉย ๆ ถ้าย่อยลงมาจึงจะเรียก Sub key) เราสามารถเข้าถึง Registry ได้หลายวิธี ที่ง่ายที่สุดโดยการ Click ที่ปุ่ม Start และ Click ที่ Run...(ดังภาพที่ 1) จากนั้นพิมพ์ Regedit แล้วกด OK (ดังภาพที่2)โปรแกรม Registry editor จะปรากฎขึ้นมา

รูปที่ 1 Start Menu

รูปที่ 2 พิมพ์คำว่า Regedit จะขึ้นโปรแกรม Registry editor ขึ้นมา

รูปที่ 3 แสดงโครงสร้างของ Registry

รูปที่ 3 แสดงโครงสร้างของ Registry ซึ่งเปิดโดยใช้โปรแกรม Regedit จะเห็น Hive ซึ่งได้แก่กิ่งสาขาแรกจาก My computer จะนำหน้าด้วย HKEY_xxxxxxx_xxxx (HKEY มาจากคำว่า Hive Key) และจะเห็น HKEY_LOCAL_MACHINE มี Key ได้แก่ Config , Driveer, Hardware, Enum เป็นสมาชิก ในคีย์ Hardware ก็จะมีคีย์ย่อย หรือ Sub key ได้แก่ Description ซึ่งก็จะมี Sub key ชื่อ System , Central Processor และ 0 ย่อยลงไปตามลำดับ หน้าต่างทางขวามือจะแสดง Value ซึ่งอยู่ในคีย์ HKEY_LOCAL_MACHINE\Hardware\Description\System\CentralProcessor\0 ซึ่งเป็นรายละเอียดของ CPU ของเครื่องเรา นี่เป็นแค่ตัวอย่างเท่านั้น ใน Registry ยังเก็บข้อมูลเด็ด ๆ อีกมาก ซึ่งเราสามารถปรับแต่งเล่นได้ อย่างไรก็ตามในช่วงแรก ๆ ขณะที่ยังไม่ชำนาญ ควรใช้ความระมัดระวัง เพราะ Registry เป็นหัวใจของ Windows การปรับแต่งโดยขาดความรู้ และไม่รู้วิธีแก้ ก็อาจทำให้ windows พัง ซึ่งผมจะกล่าวถึงการแก้ Registry เจาะลึกโดยละเอียดในบทต่อ ๆ ไป ในตอนนี้ เรามาทำความรู้จักกับมันให้ดีก่อนดีกว่า

ขนาดของ Registry ที่แน่นอนนั้นขึ้นกับ RAM ที่คุณมี ประมาณ 80% ของ RAM ที่มีอยู่ แต่เต็มที่ก็ราว ๆ ไม่เกิน 150 MB ก็แย่แล้ว ใน Registry ยังเก็บข้อมูลไว้เป็นค่า (Value entry) ซึ่งแต่ละค่าเป็นได้ตั้งแต่ข้อความ ตัวเลข ไบนารี และข้อมูลแบบอื่น ๆ ที่หลากหลายกว่าแบบเดิมที่เก็บได้แต่ข้อความ แต่ละ Value จะถูกจำกัดขนาดไม่เกิน 1 MB บางทีคุณจะเห็น Key เปล่า ๆ ไม่มี Value อยู่ข้างใน ไม่ได้หมายความว่ามันไม่ได้ใช้งาน แต่ระบบอาจเตรียมพื้นที่ส่วนนี้ไว้สำหรับใช้อะไรบางอย่าง ซึ่งหากคุณลบ Key เปล่านี้ทิ้งโดยไม่รู้จริงว่ามันใช้ทำอะไร อาจทำให้เกิดปัญหาที่คาดไม่ถึงได้ (รวน , Hang ฯลฯ)

โปรแกรมต่าง ๆ ที่ติดตั้งลงบน Windows ก็นิยมใช้ Registry ด้วยเช่นกัน ค่าของโปรแกรมบางอย่าง ผู้ออกแบบโปรแกรมอาจจะเก็บค่าไว้ในพื้นที่ของโปรแกรมเอง แต่หลาย ๆ ค่าก็เอามาเก็บไว้ที่ส่วนกลางด้วยเช่นกัน ซึ่งจะทำให้โปรแกรมอื่น ๆ รวมทั้งตัว Windows เอง สามารถเข้ามาใช้งานร่วม หรือแลกเปลี่ยนข้อมูลระหว่างโปรแกรมได้ แต่ก็จะทำให้ขนาดของ Registry นั้นใหญ่ขึ้นเรื่อย ๆ ตามจำนวนโปรแกรมที่ติดตั้งลงไป นอกจากนี้แล้ว บ่อยครั้งที่คุณจะพบว่าเกิดขยะใน Registry ที่เกิดจากการถอนโปรแกรมไม่เกลี้ยง ทำให้เกิด Dialog box เตือน ที่น่ารำคาญ และทำให้ Windows ต้องเสียเวลาไปกับการอ่านค่าที่ไม่ได้ใช้แล้ว ผมแนะนำ Utility ตัวหนึ่งก็คือ Quarterdec Cleansweeper จะมีเครื่องมือในการทำความสะอาด Registry value ที่ไม่ได้ใช้ ได้อย่างปลอดภัย ลองไปเล่นดูสิครับ (โปรแกรมเป็นของเสียเงิน แต่ใน Internet เห็นมีให้ Download อยู่บ้าง 

รูปที่ 4 แสดงข้อมูลของโปรแกรม Regedit

รูปที่ 4 แสดงข้อมูลที่ปรากฎอยู่ในหน้าต่างด้านซ้ายของ โปรแกรม Regedit แสดง HIVE KEY ต่าง ๆ ซึ่งใน Windows ทั่ว ๆ ไป จะเห็น 6 คีย์ ยกเว้น Windows 2000 จะไม่มีคีย์ HKEY_DYN_DATA โดยทาง Microsoft ได้ยุบเอาข้อมูลใน คีย์นี้ไปรวมไว้กับคีย์อื่นแล้ว เดิมทีคีย์นี้เก็บข้อมูลสำหรับทำ Plug and play ให้ Windows สามารถตรวจสอบ ค้นหาอุปกรณ์ Hardware ต่าง ๆ ได้โดยอัตโนมัติ สำหรับ windows nt 4 ซึ่งไม่สนับสนุน plug and play ที่นี่จะว่างเปล่า

คีย์ที่ปรากฎได้แก่

HKEY_CLASSES_ROOT สำหรับเก็บการเชื่อมโยงข้อมูลระหว่างโปรแกรมใช้งาน OLE

HKEY_CURRENT_USER ข้อมูล configuration ของผู้ใช้คนที่กำลัง Logon เข้าใช้งานอยู่ ได้แก่หน้าตาของวินโดวส์สำหรับผู้ใช้คนนั้น ๆ การแชร์ไดรฟ์ ไฟล์ เครื่องพิมพ์ การเชื่อมต่อเครือข่าย การต่อ Modem , configuration ของโปรแกรมที่ผู้นั้นมีสิทธิใช้ เป็นต้น ในการ Logon เข้า windows แต่ละครั้งจะได้ข้อมูลใน Hive นี้ไม่เหมือนกัน โดย Windows จะเชื่อมโยง ข้อมูล profile และ configuration ของผู้ใช้นั้น ๆ ตามที่เก็บอยู่ใน HKEY_USERS มาใช้ จริง ๆ แล้ว เป็นเทคนิคของ Microsoft ที่จะเชื่อมโยงข้อมูลจากฐานเดียวกัน แต่ให้เห็นและเข้าถึงได้จากหลายที่ จึงไม่ต้องแปลกใจหากแก้ไขข้อมูลที่นี่แล้ว ข้อมูลใน HKEY_USERS จะเปลี่ยนตามโดยอัตโนมัติ เพราะมาจากแหล่งเดียวกัน (เราเรียกการเชื่อมโยงนี้ว่า alias)

HKEY_LOCAL_MACHINE เก็บค่าต่าง ๆ ที่เห็นใน Control panel, Hardware number , configuration ของโปรแกรมที่ติดตั้งอยู่ , ค่า configuration ต่าง ๆ ของ windows รวมทั้งระบบความปลอดภัยของ windows

HKEY_USERS เป็นที่เก็บ profile ของผู้ใช้ต่าง ๆ ในระบบ รวมทั้งมี profile ทั่วไป (.default) สำหรับผู้ใช้ที่ไม่มี profile ข้อมูลจะเหมือน ๆ กับ HKEY_CURRENT_USER เพราะที่นี่จะเป็นต้นแบบให้ลอกไปอีกที

HKEY_CURRENT_CONFIG เกี่ยวกับการปรับแต่ง config ซึ่งหลาย ๆ ค่าในนี้ก็เป็น alias จาก HKEY_LOCAL_MACHINE อีกที

HKEY_DYN_DATA เก็บข้อมูลเกี่ยวกับ hardware และระบบ plug and play

 

Registry ทำอะไรบ้าง

Registry จะถูกใช้งานตลอดเวลาตั้งแต่เราเปิดเครื่องคอมพิวเตอร์ ระบบจะทำการตรวจสอบ Hardware ใหม่ หากพบก็จะทำการแก้ไขปรับปรุงค่า ในขณะโหลดโปรแกรม Windows มันก็จะอ่านค่าต่าง ๆ จาก Registry ออกมาตั้งแต่ ว่ามีอุปกรณ์อะไรบ้าง การ์ด พอร์ต จอ ทำการติดตั้ง Driver ที่เชื่อมต่อ ปรับโหมดสี หน้าจอ และตรวจสอบติดตั้งอะไรต่อมิอะไรอีกมากมายก่ายกอง กว่าจะเป็นหน้าจอ windows ที่เราเห็นกัน เราจะเห็นว่ามันใช้เวลาโหลดอาจจะครึ่งนาที หรืออาจจะมากกว่าหนึ่งนาที หากมีโปรแกรมติดตั้งอยู่มาก แน่ครับ เพราะถ้ามีโปรแกรมติดตั้งอยู่มาก ขนาดของฐานข้อมูลมากขึ้น ใช้เวลาในการค้นหาข้อมูลก็มากขึ้น เครื่องก็ทำงานช้าลง

ในขณะที่เราใช้งาน Windows อยู่ (หากผมพูดถึง Windows อย่างเดียว ไม่ได้ระบุว่าเป็น 98, 95, 2000 แล้วล่ะก็ ก็หมายถึง ทุก windows นะครับ) เมื่อเราเปิดใช้งานโปรแกรมใด โปรแกรมนั้น ๆ ก็จะเข้ามาใช้ Registry ด้วยเหตุผลต่าง ๆ กัน ตั้งแต่ การกำหนดค่าเริ่มต้นสำหรับผู้ใช้ (อย่างเช่นพวก Tip of this day) กำหนดขนาดกว้าง x สูง ของหน้าต่าง ตามที่เคยปรับไว้จากการใช้งานครั้งก่อน (ลองคิดดูสิว่าจะน่าเบื่อแค่ไหน ถ้าต้องมาปรับ โยกย้ายตำแหน่งของหน้าต่างโปรแกรมใหม่ทุกครั้งที่เปิดโปรแกรมนั้น ๆ ขึ้นมาใช้งาน) กำหนดค่าที่เหมาะสมสำหรับติดต่อกับอุปกรณ์ และฟังก์ชันต่าง ๆ ของระบบให้ตรงกับความต้องการของโปรแกรม (เช่น เกมส์แต่ละเกมส์อาจจะใช้ค่าความละเอียดสี โหมดของเสียงไม่เหมือนกัน) เก็บค่าการเชื่อมโยงไฟล์โปรแกรมกับ Task menu ตำแหน่งที่ตั้งของไฟล์โปรแกรม ไปจนถึงใช้งานเพื่อป้องกันการ copy หรือเก็บค่า version ของโปรแกรม ผมจะยกตัวอย่างให้เห็นภาพดังรูปที่ 5 โปรแกรม ACDSee ที่ผมติดตั้งลงไป ได้สร้าง Key ที่HKEY_LOCAL_MACHINE\Software\ACD Systems\ACDSee32 เก็บค่าชื่อ และเลขที่ลงทะเบียน ถ้าไม่มีเลขที่ลงทะเบียนตรงนี้ ผมจะใช้งานได้เพียง 30 วันก็จะหมดอายุ ส่วน key เปล่าชื่อ 2.3 นั้น ถึงจะเป็นคีย์เปล่า ๆ ก็เพื่อจะบอกว่าเป็นเวอร์ชัน 2.3 ขณะเดียวกันก็เก็บค่าต่าง ๆ เกี่ยวกับตำแหน่งที่เก็บโปรแกรม ไฟล์สุดท้ายที่เปิด ขนาด และตัวเลือกต่าง ๆ ที่เราปรับแต่งในโปรแกรม เก็บอยู่ที่ HKEY_CURRENT_USER\SOFTWARE\ACD Systems\ACDSee32 ดังรูป 6 ที่ผมพูดมาทั้งหมดนี้ เป็นแต่เพียงบางส่วน เพื่อให้เห็นภาพโดยง่ายว่า Registry ทำอะไรบ้าง ซึ่งรายละเอียดการเจาะลึกจะกล่าวต่อไปทีหลัง

รูปที่ 5 แสดงค่า Registry ของ Hardware

รูปที่ 6 แสดงค่า Registry ของ Software

ไม่มีรูปแบบที่แน่นอนในการจัดเก็บข้อมูลใน Registry สำหรับ Application ที่ติดตั้งลงไป ผู้พัฒนาโปรแกรมรายไหนๆ ก็มีแนวคิดในการประยุกต์ใช้งานที่แตกต่างกัน ดังนั้น การตั้งชื่อ ตำแหน่งที่ตั้งจึงอาจกระจาย โดยเฉพาะหากเป็นส่วนของการลงทะเบียนเสียเงินใช้งานด้วยแล้ว โปรแกรมเมอร์อาจเขียนซุกไว้ตรงไหน ๆ แถมยังใช้ชื่อหลอกให้สับสนคิดว่าเป็นระบบของ windows ตามด้วยเข้ารหัสอีกต่างหากก็ได้ จึงต้องอาศัยประสบการณ์ ที่แย่ไปกว่านั้นคือ ไม่มีข้อมูลรายละเอียดเกี่ยวกับเรื่องนี้ให้ศึกษา ต้องแกะเอาเอง เว้นแต่จะเป็นเจตนาของผู้ผลิตโปรแกรมที่จะเปิดเผย ก็จะเผยแพร่มาในรูปของ Resource kit ดังนั้น หากต้องการแกะโครงสร้างโปรแกรมใด เมื่อติดตั้งโปรแกรมลงไปก่อน แล้วเข้าไปดูว่ามีอะไรเปลี่ยนแปลงใน Registry บ้าง ส่วน Registry ในส่วนที่เป็นของระบบ Windows เองนั้น มีค่า และรูปแบบที่เป็นมาตรฐานอยู่ หลาย ๆ ส่วนต้องอ้างอิงกับเอกสารจาก Microsoft ในรูปของ Windows Resource Kit หากเป็นโปรแกรมชุด Office ก็มี MS Office Resource kit เป็นต้น อย่างไรก็ตามมีเทคนิคหลาย ๆ อย่างที่ไม่มีในตำราผู้เขียนจะทยอยเขียนออกมาเรื่อย ๆ 

นอกจากขณะโหลด และใช้งานโปรแกรมแล้ว ในขณะที่ Shut down ตัว Windows เองก็จะทำการเก็บค่าที่ผู้ใช้เปลี่ยนแปลงไปขณะใช้งาน นี่เอง เป็นเหตุผลที่ทำให้ระบบปฏิบัติการรวนได้ หากปิดเครื่องโดยไม่ Shutdown ก่อน ทำให้การแก้ไขค่ายังไม่สมบูรณ์ หรือการเขียนไฟล์ล้มเหลว Registryไฟล์อาจพัง

เมื่อ Registry พัง วินโดวส์ก็ทำงานไม่ได้ เราอาจเปิดโปรแกรม Windows ไม่ขึ้น หรืออาจถูกบังคับให้เข้า Safe mode ตลอดเวลา ส่วนมากเราจะแก้ไขปัญหาโดยการติดตั้งโปรแกรมทับ ซึ่งอาจได้ผลบ้าง ไม่ได้ผลบ้าง การติดตั้งโปรแกรมทับเป็นการเสริมไฟล์ที่หายไปเสียมากกว่า ในส่วนของ Registry นั้น ตัวติดตั้งจะทำการเช็ก Registry อีกครั้ง และพยายามซ่อมหากพบว่าเสียหาย จากนั้นก็เอา Registry เดิมที่ซ่อมนั้นแหละมาใช้ใหม่ Windows จะพยายามรักษาข้อมูลเดิมเอาไว้ให้มากที่สุด จึงไม่ต้องสงสัยเลยว่า หลังจากติดตั้งทับแล้วจะได้ Wall paper เดิม รวมทั้งบน Task menu ยังคงมีโปรแกรมเดิม ๆ อยู่ครบ นี่เป็นการขี่ช้างจับตั๊กแตนดี ๆ นี่เอง เพราะคนส่วนมากไม่รู้ เสียเวลาติดตั้งใหม่เป็นชั่วโมง ทั้ง ๆ ที่ส่วนที่เสียแค่ Registry ซึ่งใช้โปรแกรมตรวจซ่อม Registry เพียงไม่กี่นาทีก็เสร็จแล้ว และหากเป็น Windows NT การติดตั้งทับ หมายถึงการทับ Registry ใหม่เลย พอติดตั้งทับเสร็จโปรแกรมต่าง ๆ ที่เคยติดตั้งไว้ก็หายไปจาก Task bar จนหมด 

ดังนั้นเราจึงต้องแก้ปัญหาให้ตรงจุด ใน Windows ยังมีอะไร ๆ ที่เร้นลับอีกมากให้ศึกษากันได้เป็นปี ๆ เฉพาะในส่วนของ Registry นี้ หากเข้าใจมันดีพอ คุณจะเป็นเซียนของ Windows แกะ แต่ง ดัดแปลง และแก้ปัญหาตรงจุดแทนที่จะ Format ลงโปรแกรมใหม่

 

พร้อมรับมือกับปัญหา Registry

หากเป็น 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 และการติดตั้งค่าต่าง ๆ ไม่เหมือนกัน ถึงแม้จะพยายามอาจจะได้ แต่ระบบจะรวนอย่างไม่น่าเชื่อ จนไม่น่าใช้เลยครับ

คัดลอกจาก หนังสือ micro เขียนโดย คุณ อนิวรรตน์ สมาธิวัฒน์

URL:http://se-ed.net/hacking Email: hacking@se-ed.net IE.5.x  800x600 16bit
หน้าหลัก | บทความ | ทฤษฏี| เทคนิค | แนวปฏิบัติ | เครื่องมือ| วิจารณ์ | เนื้อหา | อ้างอิง| Port | กระทู่ | สนทนา | ลิงค์ | รายการCD