Tải bản đầy đủ (.pdf) (9 trang)

Tài liệu Dọn dẹp Registry một cách có hiệu quả doc

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (486.75 KB, 9 trang )

Dọn dẹp Registry một cách có hiệu quả

Bài viết này sẽ giới thiệu cho bạn cách dùng kịch bản để
dọn dẹp registry hoặc thay đổi các profile của người dùng
trên một máy tính.
Chúng tôi cũng giới thiệu cách sử dụng phương pháp này
như thế nào đối với kịch bản khởi động của máy tính bên
trong Group Policy Object (GPO) để thay đổi tất cả profile
người dùng trong miền, site hoặc OU, thay đổi các thiết lập
registry người dùng bằng kịch bản khởi động máy tính….

Trong một số trường hợp bạn có thể được yêu cầu xóa,
thêm, hoặc thay đổi một số phần của registry – đối với tất cả người dùng trên máy tính cùng một
lúc.

Trong hầu hết các trường hợp chúng tôi sẽ sử dụng Group Policy Object đối với người dùng để
thêm, thay đổi một giá trị, tuy nhiên khi nói đến việc giải phóng các giá trị thì đôi khi sẽ sử dụng
các kịch bản. Cũng vậy, chúng tôi sẽ thực hiện một nhiệm vụ cleanup trong một tiến trình cụ thể
mà không phải đợi tất cả người dùng đăng nhập. Bài báo này sẽ thể hiện cho bạn cách thực hiện
các vấn đề trên một cách dễ hiểu nhất.

Chúng tôi sẽ xem xét cách nào có thể thực hiện việc thay đổi registry bằng một kịch bản – và kết
hợp nó với một GPO trên máy tính (khởi động và tắt máy), thay vì sử dụng một GPO trên đối
tượng người dùng (đăng nhập hoặc đăng xuất).

Tại sao chúng ta lại thực hiện điều này?

Vậy tại sao đó là một phương pháp thông minh? Có thể bạn muốn thực hiện “cleanup” suốt đêm,
và muốn bảo đảm rằng giá trị nào đó được thay đổi (xóa, bổ sung hoặc thay đổi) vào sáng hôm
sau – điển hình các khóa ‘Run’ hay ‘RunOnce’ trong phần người dùng của registry sau khi bị
virus tấn công – được kết hợp với thủ tục Wake-On-Lan (WOL) và như vậy bạn sẽ không còn có


thời gian để về nhà.

Trong một số trường hợp khác người dùng có thể không có các đặc quyền cần thiết để thực hiện
cleanup hoặc nhiệm vụ thay đổi. Khóa registry bạn muốn thay đổi có thể được bảo vệ bằng một
chính sách bảo mật, hãy làm cho nó không có hiệu lực để có thể sử dụng GPO của người dùng
(khi nó chạy trong nội dung của ng
ười dùng). Các kịch bản khởi động máy tính thực thi trong nội
dung của tài khoản hệ thống –có thể hữu dụng trong việc ghi nhớ nhiều tình huống.

Cảnh báo!

Mã được thể hiện trong bài báo này được chỉ được lập ra cho mục đích kiểm tra – sử dụng nó
trong sản xuất có thể gây cho bạn sự rủi ro. Mã trong bài là mã đơn giản để bạn đọc có thể dễ
hiểu. Phải xác nhận tính năng kịch bản trong môi trường kiểm tra trước khi thực hiện phần này
trong sản phẩm. Bạn cũng có thể gộp thêm vào các chức năng quản lý lỗi, ghi chép,… thay đổi
như bạn muốn!

Các thông tin cần biết thêm

Trước khi đi sâu vào trong code, một số điều về registry phải được làm rõ ràng.

Thông thường thì mọi người đều cho rằng phần HKEY_USERS của registry ở một nơi mà bạn
có thể nhìn thấy trong profile cục bộ trên máy tính. Tuy nhiên sự thật là danh sách profile của
HKEY_USERS được nạp trên máy để biết được các profile là tích cực trong bộ nhớ. Ngay khi
người dùng đăng nhập vào máy tính, mục nhập sẽ xuất hiện trong phần registry này.





















Như những gì thể hiện trong hình 1, bạn có thể thấy được một số profile đã được nạp – cho dù
chỉ một người dùng đăng nhập vào giao diện. Khi người dùng đăng xuất, Registry Hive (các
nhánh trong registry) sẽ không được nạp và nhanh chóng biến mất trong mục HKEY_USERS.
Đây là một giải thích vắn tắt về các mục được nạp:

“.DEFAULT” là profile người dùng mặc định – không phải là thứ mà tất cả người dùng s
ẽ nhìn
thấy (giống như một profile công cộng hoặc cho tất cả người dùng) và không thể sao chép sang
máy tính khác. Bằng các giá trị mặc định trong profile này bạn có thể thay đổi tùy chọn như màn
hình đăng nhập (Ctrl+Alt+Delete), các thiết lập phím Num/Caps Lock ban đầu,…

"S-1-5-18” là bộ nhận dạng bảo mật “Hệ thống” (SID)
"S-1-5-19" là “LocalService” SID
"S-1-5-20" là “NetworkService” SID


Một profile hoặc SID bắt đầu là "S-1-5-21-" và kết thúc "-500" là SID của tài khoản quản trị
viên. Các profile người dùng tích cực nằm trong tất cả các mục khác có trong phần

Hình 1
HKEY_USERS. Trong các ví dụ kịch bản trong bài, các profile là không thể chạm vào – chỉ
người dùng “thông thường” mới có thể được chạm tới – bạn có thể thay đổi một cách dễ dàng
bằng cách xóa một số dòng trong code.

Load Hive

Nếu bạn muốn thay đổi profile của một người dùng không đăng nhập hiện hành thì phải có ít
nhất hai tùy chọn:

1-Load hive thủ công trong Regedit
2-Tạo một kịch bản “Load hive” đó

Chúng ta hãy quan sát tùy chọn đầu tiên. Nếu bạn mở Regedit (Start > Run > Regedit) và tìm
đến mụ
c HKEY_USERS (bạn phải kích hoặc đánh dấu vào nó), sau đó vào menu File, sẽ có thể
chọn “Load Hive…” (xem hình 2)

















Ở đây chúng ta phải nhập vào đường dẫn đến file NTUSER.DAT (Hình 3)

Hình 2























File NTUSER.DAT được đặt trong thư mục profile người dùng. Ở trên, chúng ta có thể nhìn
thấy file NTUSER.DAT của người dùng ‘test2’. File này được đặt trong thư mục “C:\Documents
and Settings\test2\”– trên Windows Vista, các profile người dùng thường được lưu trong thư mục
“C:\Users\”. Nếu không thể thấy file NTUSER.DAT như trong hình 3 thì bạn nên vào tùy chọn
Tools > Folder và chọn “Show hidden files and folders”.

Khi thực hiện load hive tạm thời, chúng ta cần đặt tên cho chúng. Trong hình 4 và các ví dụ kịch
bản chúng ta sử dụng tên là ‘TmpLoadHive’.











Kích OK và cấu trúc hive sẽ xuất hiện như trong hình 5

Hình 3

Hình 4






















Trong hình 5, ‘TmpLoadHive’ có thể được mở rộng để xem cấu trúc của hive người dùng được
nạp – nó trông giống như các registry của người dùng khác và phân biệt với nhau bằng
HKEY_CURRENT_USER (HKCU) khi họ đăng nhập vào máy tính.

Khi đã thực hiện xong, bạn hãy nhớ upload hive của người dùng bằng các chọn ‘TmpLoadHive’
hive và vào File menu > “Unload Hive…” như trong hình 6

Quan trọng

Nếu không thực hiện unload hive thì bạn không thể thực hiện load hive lại cho tới khi khởi động
lại máy tính, bởi vì bạn không thể
load một hive đã được nạp.

Hình 5





















Thủ tục đó sẽ rất khó chịu nếu phải thực hiện nó cho tất cả profile người dùng trên tất cả máy
tính trong miền của bạn? Tuy nhiên may thay chúng ta có một phương pháp khác bằng việc sử
dụng “ônh bạn già tốt bụng” REG.EXE.

Sử dụng Reg.exe để cứu nguy

Lệnh REG.EXE. có hai tham số rất hữu dụng: LOAD và UNLOAD. Chúng thực hiện chính xác
những gì đã thực hiện thủ công ở trên. Chỉ cần phải chỉ ra tên hive tạm thời và đường dẫn đầy đủ
đến file NTUSER.DAT, file mà chúng ta muốn load vào bộ nhớ.


Bạn có muốn một kịch bản mẫu? OK, để thiết lập background cho profile người dùng mặc định
bạn có thể chạy code dưới đây:

REG.EXE LOAD HKU\DefU "C:\Documents and Settings\Default User\ntuser.dat"
REG.EXE ADD "HKU\DefU\Control Panel\Desktop" /v Wallpaper /d
"C:\Windows\Wallpaper.bmp" /f
REG.EXE UNLOAD HKU\DefU

Đoạn code ở trên sẽ LOAD hive cho profile người dùng mặc định vào hive tạm thời gọi là
“DefU” trong “HKEY_USERS” của cở sở dữ liệu registry. Sau đó nó sẽ thiết l
ập một giá trị
registry cho background của profile người dùng mặc định, nó là profile sẽ được tự động copy khi
một người dùng mới được tạo (thời điểm đầu khi họ đăng nhập). Cuối cùng nó sẽ UNLOAD hive
tạm thời đó.

Vậy có thể tìm file Ntuser.dat trong kịch bản bằng cách nào?


Hình 6
Khi muốn thực hiện load hive cho tất cả người dùng trên máy tính, chúng ta sẽ muốn tìm tất cả
profile người dùng trên máy tính đó một cách an toàn và dễ dàng ở mức có thể. Chúng ta sẽ tìm
đến thư mục trong “Documents and Settings” hoặc “Users” trên Vista/Windows Server 2008 –
nhưng có một phương pháp khác tốt hơn.

Trong giá trị registry dưới đây:

“HKLM\Software\Microsoft\Windows NT\CurrentVersion\ProfileList\XXX\ProfileImagePath”
bạn sẽ tìm thấy thư mục profile đúng cho tất cả người dùng cục bộ. XXX là SID của người dùng,
vì vậy bằng cách đi qua tất cả các key này, chúng ta sẽ có một đường dẫn đầy đủ cho các file
NTUSER.DAT cục bộ.


Chúng tôi đã viết một hàm VB Script để liệt kê danh sách các thư mục profile người dùng trên
máy tính (trong một chuỗi được phân biệt bằng ký tự “|”) – nó tồn tại cục bộ và từ xa. Các chức
năng loại trừ profile của Systemprofile, LocalService, NetworkService và tài khoản Local
Administrator – trong hầu hết các trường hợp không có yêu cầu cleanup, nhưng các câu lệnh
ElseIf có thể dễ dàng loại trừ được nếu cần. Hàm này có tên gọi là
“GetUserProfileDirsFromRegistry” và bạn có thể tìm thấy ở đây.

Bạn có thể hỏi gì về các profile Roaming? Các file NTUSER.DAT là tất cả những gì chúng ta
cần vì vậy nếu muốn thay đổi profile người dùng roaming thì bạn nên viết một kịch bản duyệt
thẳng đến vị trí mạng của profile roaming đó mà bạn có…

Xóa giá trị hoặc khóa

Giờ thì chúng ta đã biết cách thực hiện load hive (hoặc gán) bên trong một kịch bản, chúng ta chỉ
cần thay đổi một số thứ bên trong hive đó. Bạn có thể có đến hàng trăm thứ bên trong đó để thực
hiện, nhưng chúng tôi chỉ sử dụng hai chức năng – cả hai chức năng này đều dùng để xóa các
phần bên trong hive đã được load. Đây là một giải thích:

Sau khi một virus tấn công, bạn có thể phải thực hiện việc cleanup khóa “Run”:

“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run” cho tất cả
người dùng cục bộ. Có thể một số malware đã t
ạo một mục mà bạn cần phải xóa chúng – với
mục đích đó chúng tôi đã tạo một thường trình con DeleteSingleValueFromTmpLoadHive.
Thường trình này có thể xóa một giá trị trong registry.

Bạn cũng có thể muốn xóa toàn bộ một khóa registry, gồm có các khóa con và các giá trị,…
“HKEY_CURRENT_USER \Software\Windowsecurity.com”, với mục đích đó chúng tôi sẽ gộp
cả thường trình con DeleteKeyAndSubsFromTmpLoadHive


Sự kết hợp tuyệt vời

Khi kết hợp những gì đã học được ở đây và đang thực hiện một số kịch bản VBS cũ, chúng ta có
một kịch bản thực hiện các nhiệm vụ dưới đây:

Tìm tất cả các thư mục profile trên máy tính cục bộ bằng cách đọc các giá trị registry được đề
cập ở trên.

Bỏ qua các profile có liên quan đến hệ điều hành, gồm có tài khoản quản trị viên cục bộ

Thực hiện load hive cho registry từ các file NTUSER.DAT bên trong thư mục profile

Xóa khóa registry, gồm có tất cả các khóa con, các giá trị,… cho mỗi profile người dùng được
gắn (load).

Xóa giá trị registry cho mỗi profile người dùng được gắn (load) **
* ”\Software\Windowsecurity.com” (and all sub keys/values)
** ”\Software\Microsoft\Windows\CurrentVersion\Run\VirusExecutable”
Kịch bản không nhắ
c bạn xác nhận khi nó hoàn tất và bất kỳ lỗi nào cũng sẽ được triệt tiêu (sử
dụng cách quản lý ‘On Error Resume Next’). Hành vi này có thể được thay đổi hợp với nhu cầu
của bạn. Vì đây không phải là một bài về kịch bản thực sự nên chúng tôi không thể đi sâu vào
trong code của nó, tuy nhiên nếu bạn có một chút kiến thức về kịch bản thì có thể đưa ra những ý
tưởng tốt về những gì sẽ th
ực hiện.

Một ví dụ code hoàn thiện có thể dowload và xem tại đây. Nó đã được kiểm tra trên Microsoft
Windows XP, Windows Server 2003 và Windows Vista.


Hệ thống

Ở đây có thể “vấp phải” một máy tính đơn lẻ, máy tính cục bộ từ đó mà chúng ta thực thi kịch
bản – hoặc để chính xác hơn: tất cả các hive người dùng trên nó. Có một giới hạn lớn ở đây:
người dùng nhìn chung đều không phải là các quản trị viên, và vì vậy họ sẽ không thể thay đổi
registry cho những người dùng khác. Điều này có nghĩa là chúng tôi muốn chạy kịch bản quản trị
nội bộ cho các máy tính trong miền – hoặc thực hiện một số thứ có hiệu quả cao: sử dụng Group
Policy ở mức máy và cấu hình một kịch bản khởi động máy.

Một thứ thú vị về kịch bản khởi động máy tính là đầu tiên trên tất cả nó phải chạy trong ngữ cảnh
Local System, đây là một tài khoản mạnh (vì vậy bạn có thể thực hiện hầu hết các việc), và thứ
hai đó là nó có thể thiết lập để thực thi trên hàng nghìn máy tính trong vòng một vài phút, bằng
cách đặt GPO trên miền Active Directory, site hoặc Organizational Unit (OU)

Bạn cần phải biết rằng, lần load đầu tiên của GPO máy tính mới có thể thất bại, trong trường hợp
này chúng ta sẽ phải khởi động lại máy tính (và có thể thực hiện lệnh GPUPDATE /FORCE cho
chắc chắn). Bạn cũng nên đưa ra một kịch bả
n thời gian để thực thi trước khi đăng nhập – cả hai
đều liên quan đến các vấn đề có thể xuất hiện khi chính sách này được nạp lúc hệ thống khởi
động. Tuy nhiên chúng tôi sẽ không nhắm vào các tính năng sâu trong GP ở bài này.

Nếu có chức năng Wake-On-LAN (WOL) trên mạng thì bạn có thể khởi động các máy tính suốt
đêm để thực hiện việc cleanup và tắt máy tính sau đó. Bằng cách kết hợp kịch bản WOL và
Group Policy, chúng ta có thể thực hiện cleanup một cách có hi
ệu quả trong một thời gian ngắn
hoặc một số công việc mà chúng ta muốn thực hiện mà không cần phải làm quá nhiều công việc:
Khả năng sáng tạo không hạn chế!

Kết luận


Chúng ta đã thấy được cách kết hợp viết kịch bản và các kịch bản khởi động máy tính trong
Group Policy để thực hiện việc cleanup một cách có hiệu quả. Bây giờ chúng ta có thể cập nhật
profile người dùng thậm chí khi họ không được load vào bộ nhớ - không cần đăng nhập vào hệ
thống.

Phương pháp này có thể được phát triển xa hơn nữa để thay đổi các phần khác của profile, có thể
là các file và thư mục cho tất cả người dùng trên máy tính.

×