發新話題

DIY愛好者 - 批處理的極限運用 [註冊表篇]

DIY愛好者 - 批處理的極限運用 [註冊表篇]

DIY愛好者 - 批處理的極限運用 [註冊表篇]



=============代碼開始=================
複製內容到剪貼板
代碼:
@echo off
color 0b
setlocal
title windows大補丸 v1.0
rem 6park專用
rem Written by heroest
rem May 29th、2006
echo ############################################################
echo # windows大補丸 v1.1 #
echo. # #
echo. # #
echo # *當系統的註冊表被改得面目全非時候 #
echo # 註冊表也被鎖定,嘗試下本軟體吧 #
echo # *特點:使用了INF格式的系統檔案的方法來修復注 #
echo # 冊表,可以繞過絕大部分非法軟體的限制措施 #
echo. # #
echo ############################################################
echo.
echo 正在初始化程序
if exist %systemroot%\restore.pif del %systemroot%\restore.pif
copy %systemroot%\system32\rundll32.exe %systemroot%\ >nul
ren %systemroot%\rundll32.exe restore.pif
if not exist restore.inf goto fileError
type restore.inf | find "InfVersion">ver.txt
echo 現在使用的restore.inf的版本信息是:
echo ________________________________________________________________
type ver.txt
echo ________________________________________________________________
del ver.txt
echo.
:start
echo 1.開始修復
echo 2.退出程序
echo.
set /p choice=請輸入選項:
if /i %choice%==1 goto fix
if /i %choice%==2 goto quit
if {%choice%}=={} goto start
rem =====================fix.cmd=====================
echo.
:fix
echo 開始修復註冊表...
more +1c:\final.inf
restore.pif setupapi,InstallHinfSection DefaultInstall 128 c:\final.inf
del c:\final.inf
echo 修復完畢!
echo.
echo 清理系統中...
echo.
del %systemroot%\restore.pif
echo ***清理完成!感謝使用本軟體***
echo.
echo.
goto quit
rem ======================================================
:fileError
echo 檢測不到INF檔案,程序終止運行
:quit
echo.
echo 按任意鍵退出程序
pause>nul
======================代碼結束============================
請將以上代碼複製到notepad中,保存為fix.cmd
以前中過類似註冊表修改病毒的朋友應該知道是什麼體會:開機跳出對話框;IE被改的面目全非;程序檔案全打不開;想補救的時候註冊表編輯器也打不開;更有變態者把reg檔案也封鎖了
所以在網上查找各種操作註冊表的方法,終於找到一種比較獨特的古老的方法:INF檔案."INF檔案格式小結INF檔案全稱Information File檔案,是Winodws操作系統下用來描述設備或檔案等資料信息的檔案。INF檔案是由標準的ASCII碼組成,您可以用任何一款文字編輯器查看修改其中的內容。"一般常作為驅動的安裝檔案存在,因為它裡面包含好多硬體以及驅動程序的信息.然而它的另一個不怎麼被使用的功能就是它對註冊表的操作.

TOP

以下介紹文章轉載自CSDN:

INF檔案的組成有節(Sections),鍵(Key)和值(value)三部分。
關鍵節有
[Version]版本描述信息,主要用於版本控制。
[Strings]字符串信息,用於常量定義。
[DestinationDirs]定義系統路徑信息。
[SourceDisksNames]指明源盤信息。
[SourceDisksNames]指明源盤檔案名。
[DefaultInstall]開始執行安裝。
其它的節可以自定義,下面用一實例來具體講解。


程序代碼
[Version]
複製內容到剪貼板
代碼:
Signature=$Chicago$
Provider=%Author%
[Strings]
複製內容到剪貼板
代碼:
Product="添加檔案關聯演示"
Version="1.0"
Author="Xunchi"
Copyright="Copyright 2005"
CustomFile="inf" ;修改您需要的檔案名後綴
Program="NOTEPAD.EXE" ;修改您需要關聯的應用程序名
[Add.Reg]
複製內容到剪貼板
代碼:
HKCR,"."%CustomFile%,"",FLG_ADDREG_TYPE_SZ ,%CustomFile%File
HKCR,%CustomFile%File,"",FLG_ADDREG_TYPE_SZ,安裝信息
HKCR,%CustomFile%"File\shell","",FLG_ADDREG_TYPE_SZ,open
HKCR,%CustomFile%"File\shell\open\command","",FLG_ADDREG_TYPE_SZ,%program% %1
[DefaultInstall]
引用:
AddReg=Add.Reg
  在[Version]節中"Signature"項定義了該INF檔案需要運行在何種操作系統版本中。有$Windows NT$、$Chicago$、or $Windows95$三個值供選擇,一般選擇$Chicago$即可。項Provider中定義了該檔案的創作來源,%Author%指引用Author項的值。您也可自定其它項來描述該INF檔案的版本信息。該INF檔案的作用是關聯檔案,所以主要是對註冊表的操作,我們來看[Add.Reg]節,共四條語句,格式都是一樣。HKCR表示根HKEY_CLASSES_ROOT,第二個參數是子鍵的路徑名,第三個參數是表明值的類型,最後是值(具體見附表)。以上都是對操作的定義與過程,在節[DefaultInstall]中是開始執行要安裝的流程,AddReg表明是對註冊表進行操作,操作對像是Add.Reg節中的定義。如果您把AddReg換成DelReg則是刪除註冊表中的鍵值。當滑鼠單擊該INF檔案在彈出的選單中選擇「安裝」就開始執行您所定義的操作。該示例在系統的INF檔案右鍵選單中增加了查看編輯功能並設置了預設動作,因為在安裝了不瞭解的INF文件有可能對系統產生不良的影響,這樣雙擊檔案就可打開編輯該檔案了。


  再看看INF檔案在檔案操作方面的能力吧。請看下面的一個例子。

程序代碼
[Version]
引用:
Signature=$Chicago$
Provider=%Author%
[Strings]
Product="檔案複製和安裝演示"
Version="1.0"
Author="Xunchi"
Copyright="Copyright 2005"
[FileList]
ProcessList.exe ;此檔案已在當前目錄下,下同。
引用:
[FileList1]
Wordpad.exe
[DestinationDirs]
FileList=11 ;安裝到Windows的系統目錄
FileList1=10 ;安裝到Windows目錄
[DefaultInstall]
Copyfiles=FileList,FileList1
  相同的節的作用與上一例類似,請注意新出現的節[FileList],這是我自定義的節名,它表示了一個檔案組,[FileList1]也類似。在節[DestinationDirs]中需定義每個檔案組複製到的目錄(各個常量的意義見附表)。Copyfiles指明了需要進行複製的檔案組。


  INF檔案的操作還包括服務(NT系統)程序的安裝和卸載,INI檔案的轉換等。由於這些操作都比較的複雜和繁瑣,且有一定的危險性故下次有機會再向大家進行深入探討。
  最後我們來看一下INF檔案的執行機制,這時你也許要問不就是簡單的執行一下「安裝」嗎?知其然不知其所以然知識水平是不會提高的。在「檔案夾選項」中的「檔案類型」找到INF檔案的「安裝」命令看到一串命令。「rundll32.exe setupapi,InstallHinfSection DefaultInst_all 132 %1」它表示了運行Dll檔案setupapi.dll中的命令InstallHinfSection並傳遞給它起始節的名字 DefaultInstall。可見起始節是可以自定義的。INF檔案的執行也可用在各種支援API調用的編程工具中。至此INF 檔案的結構和運行機制我們已基本瞭解,現在就讓你的思維開動起來,讓它更好的為我們工作吧。

TOP

註冊表操作的常量定義:
----------------------------------------------------------
常量 根值
HKCR HKEY_CLASSES_ROOT.
HKCU HKEY_CURRENT_USER.
HKLM HKEY_LOCAL_MACHINE.
HKU HKEY_USERS.
-----------------------------------------------------------
FLG_ADDREG_APPEND 在多字符串後添加字符
FLG_ADDREG_TYPE_SZ 字符類型
FLG_ADDREG_TYPE_MULTI_SZ 字符串類型
FLG_ADDREG_TYPE_EXPAND_SZ 擴展字符串類型
FLG_ADDREG_TYPE_BINARY 二進制值
FLG_ADDREG_TYPE_DWORD DWord值
FLG_ADDREG_TYPE_NONE NULL值
----------------------------------------------------------


[DestinationDirs]節中所定義的常量路徑
----------------------------------------------------------
01 源目錄(後跟路徑)
10 Windows目錄
11 Windows系統目錄
12 驅動目錄
17 INF檔案目錄
18 幫助檔案目錄
20 字體目錄
21 根目錄
24 應用程序目錄
25 共享目錄
30 當前根目錄
50 System目錄
51 Spool 目錄
52 Spool 驅動目錄
53 用戶配置目錄
----------------------------------------------------------

[DefaultInstall]節中定義的操作
----------------------------------------------------------
LogConfig Log日誌檔案配置
Copyfiles 複製檔案
Renfiles 檔案改名
Delfiles 刪除檔案
UpdateInis 更新Inis
UpdateIniFields 更新Ini字段
AddReg 添加註冊項
DelReg 刪除註冊項
Ini2Reg Ini檔案轉換為Reg檔案
----------------------------------------------------------

TOP

INF的功能

1 複製檔案、刪除檔案、或重新命名檔案。
2 新增或刪除註冊表(Registry)中的項目。
3 修改重要的系統設置檔案(如 Autoexec.bat、Config.sys、.INI 等)

INF的規則

INF是純文本檔案,它是分節的,這點和INI檔案類似,每節以"[]"擴起來,每一個節名最長為255個字符(Windows 2000/XP/2003操作系統中)或28個字符(Windows 98操作系統中)。在節與節之間的內容叫條目,每一個節又是由許多的條目組成的,每一個條目都由=分開,如a="b"。如果每一個條目的等號後有多個值,則每一個值之間用","號分隔開。INF對大小寫不敏感,行註釋語句命令是";",類似VB裡的』。如果一行寫不下,使用"\"來換行。

INF的運行

.INF檔案是由Windows的SetupAPI解釋執行的腳本檔案,它的運行過程很簡單,是一種線性的執行,線性的意思就是.INF檔案的運行過程不存在分支語句,也就是沒有條件語句,一旦開始執行,就是沿著固定的路線運行。它的運行是按照節為單位來執行的,從某一個[Install]節開始執行,從上到下執行該節中的條目,如果該條目是一個節,那麼就一條條執行子節中的條目,如此遞歸執行。在WINDOW上運行只要右擊這個檔案,點擊安裝即可。

INF的語法結構

;指定版本和簽名節
[VERSION]
;系統根據Signuture看是不是適合當前版本,如果適合的話就執行,否則不執行,當然強制安裝是可以的
;用於WIN9X
Signature="$CHICAGO$"
;WINNT+
;Signature="$Windows NT$"
;指定安裝檔案佈局,該行是可選的,如果沒有提供佈局信息檔案,則在INF檔案內必須包含[SourceDisksNames]和[SourceDisksFiles]節
LayoutFile=filename.inf
[SourceDisksNames]節
[SourceDisksNames]節羅列源檔案所在盤符序列碼、盤描述符、盤捲標號和盤序列號。
[SourceDisksNames]節內語句的語法為:
disk-ordinal=「disk-de***ion」,disk-label,disk-serial-number
其中disk-ordinal為必選項,是盤符序列碼,標識一個源盤,具有惟一性,一般可設置為從1開始遞增的整數,0不是一個有效的盤符序列碼。當存在多個源盤時,盤符序列碼之間不能重複。
disk-de***ion為必選項,是盤描述符,用雙引號括起的字符串或字符串宏描述盤的內容或目的。安裝引擎將該字符串顯示在對話框內以提示用戶。
disk-label為源盤的卷標識。
disk-serial-number未使用,但必須被設置為0。
[SourceDisksFiles]節
[SourceDisksFiles]節指定安裝時使用的源檔案和盤符序列碼、盤描述符。 [SourceDisksFiles]節內語句的語法為:
file-name=disk-number[,subdir] [,file-size]
其中file-name為必選項,是源盤上檔案的名稱。
disk-number是包含file-name指定檔案所在源盤的盤符序列碼,該盤符序列碼需在[SourceDisksNames]節中列出,並大於或等於1。
Subdir為可選項,指定檔案所在源盤的子目錄,如省略則源盤為預設安裝路徑。
file-size為可選項,表明檔案的大小,以字節為單位。

[DestinationDirs]
;指定CopyFiles、RenFiles或DelFiles入口的預設操作目錄
;語法file-list-section=LDID,[Subdir]
;LDID列表如下:
;01 ;current directory
;04 ;backup directory
;10 ;windows directory
;11 ;system dir
;12 ;iosubsys
;13 ;command
;14 ;control panel directory
;15 ;printers directory
;16 ;workgrou dir
;17 ;inf dir
;18 ;help dir
;19 ;administration dir
;20 ;fonts
;21 ;viewers
;22 ;vmm32
;23 ;color dir
;25 ;shared dir
;26 ;winboot
;28 ;host winboot
;30 ;root of boot drive
;31 ;root of host drive of a virtual boot drive
;32 ;old windows dir if exists

;以下例子為安裝到window\web目錄下
;DefaultDestDir=10,"web"
;[Install]節提供了一個INF檔案安裝過程的總覽,它識別檔案內其他包含安裝信息節的詳細動作,是Windows內建安裝函數識別安裝過程和內容的真正入口
[Install]
;[Install]節分[DefaultInstall]和[OtherInstall]兩類
;[DefaultInstall]節節名DefaultInstall如前面表格內容所述被顯式地在註冊表中指定。
;該節也是系統獲取INF檔案中安裝信息的首要入口,當用戶右擊INF檔案選「安裝」時該節內容被執行。
;[OtherInstall]與[DefaultInstall]節遵循相同的語法,但必須被顯式地調用,常被用來定義反安裝動作

;預設安裝節
[DefaultInstall]
;指明添加註冊表的子節,等號後面的為自定義節名,例子見[add]節
ADDREG=add

;指明要刪除的註冊表子節,等號後面的為自定義節名
DELREG=del

;指明要要複製的檔案子節,用於安裝,Copyfiles命令可以替換系統正在訪問的檔案。這些功能通過普通的del和copy命令都無法實現
CopyFiles=cfile

;指明要要刪除的檔案子節,用於反安裝,多個節以逗號隔開,該命令如果發現要刪除的檔案被鎖定,就會把檔案放到系統刪除隊列中排隊
;等系統重啟動的時候,該檔案就自動被刪除了
DelFiles=刪除檔案段
;[刪除檔案段]
;檔案名列表
;例子:
;a.exe
;b.sys
;重命名檔案段
;RenFiles=重命名檔案段
;[重命名檔案段]
;語法:
;[file-list-section]
;new-file-name,old-file-name
;file1,file2 ;修改檔案名file1為file2

;更新INI檔案段內容子節
UpdateInis = 更新INI檔案段
;[更新INI檔案段]
;ini-file、ini-section、[old-ini-entry]、[new-ini-entry]、[flags]
;ini-file 包含要更改條目的 .ini 檔案名
;ini-section 包含要更改條目的節名
;old-ini-entry 可選,常用形式為 Key=Value
;new-ini-entry 可選,常用形式為
;Key=Value。flags 是可選操作標記
;例子
;%01%\wincmd.ini、Configuration,,"InstallDir=%01%"
;%01%\wincmd.ini、Configuration,,"Mainmenu=%01%\LANGUAGE\TCExtMenu.mnu"
;更新ini檔案值內容
updateinifield =
;ini檔案更新註冊表
ini2reg=aa.ini
;更新config.sys內容
updatecfgsys=更新autoexec.bat段
[更新autoexec.bat段]
;更新autoexec.bat內容
updateautobat=更新autoexec.bat段
[更新autoexec.bat段]

;定義資源節,像資源檔案,調用時使用%REG_SZ%就代表了0x00000000
[Strings]
REG_SZ=0x00000000
REG_BINARY=0x00000001
REG_DWORD=0x00010001
;自定義添加註冊表項的節
[add]
;注意格式:HKEY(根鍵縮寫),Subkey(子鍵),Valuename(鍵值名),Type(鍵值類型),Value(鍵值)
;HKCU -> HKEY_CURRENT_USER
;HKCR -> HKEY_CLASSES_ROOT
;HKLM -> HKEY_LOCAL_MACHINE
;HKU -> HKEY_USERS
;HKU -> HKEY_USERS
;HKCC -> HKEY_CURRENT_CONFIG
;HKDD -> HKEY_DYN_DATA

TOP

作為菜鳥的我們是不是需要用那麼複雜的方法手工編輯自己的INF檔案呢?
當然不用,因為費時費力.解決方法就是用 reg2inf 這個小軟體
使用方法: DOS下執行命令reg2inf.exe -w -t xxx.reg xxx.inf
下載地址:訪客無法瀏覽此圖片或連結,請先 註冊登入會員
我們只需要將我們自己導出的REG檔案轉為INF檔案就行了
INF的使用方法有2種,一種是圖形界面下,單擊INF檔案,然後選擇[安裝]便可
還有種方法就是在DOS界面下用rundll32.exe來安裝.
使用方法:
rundll32.exe setupapi,InstallHinfSection DefaultInstall 128 INF檔案名
知道了基礎知識,我們來看程序,其實都是些很簡單的代碼,只有一個比較重要的地方,因為考慮到exe檔案有可能也被程序封鎖,所以我又特地找了一些資料,終於找到一個比較隱蔽的檔案名.pif檔案.PIF是曾經DOS中使用的一種格式檔案,描述為"指向MS-DOS的快捷方式",這種檔案最大的特點,將任意一個可執行程序的後綴名改成pif也可以正常運行.所以程序一開始便將rundll32.exe改名為pif格式檔案並保存到windows目錄以便我們使用.
介紹了程序的主要流程,大家應該可以對檔案有個瞭解了吧.
後記:文章比較老,可能用的方法更加之古老,但是有效的方法就是好方法,我經過測試,的確可以從一定程度上修復註冊表,但是由於知識有限,只能將我所知註冊表容易被惡意修改的項目寫在INF裡.所以我希望如果大家覺得這個好用的話請一起來完善這個INF檔案(因為想保持更新這個INF檔案,所以在檔案中加入了時間信息,如果大家想圖形界面安裝的話請去掉restore.inf檔案中的第一行,然後保存遍可.
=========================restore.inf=====================
InfVersion: written by heroest May 28th,2006
[Version]
Signature="$CHICAGO$"
Provider=heroest、2006

[DefaultInstall]
; DelReg=restore_DelReg
AddReg=restore_AddReg

[restore_DelReg]

[restore_AddReg]
hkcu,"Software\Microsoft\Windows\CurrentVersion\Policies\System","DisableTaskMgr",0x10001,00,00,00,00
hkcu,"Software\Microsoft\Windows\CurrentVersion\Policies\System","DisableRegistryTools",0x10001,00,00,00,00
hkcu,"Software\Microsoft\Windows\CurrentVersion\Policies\System","NoDispCPL",0x10001,00,00,00,00
hkcu,"Software\Microsoft\Windows\CurrentVersion\Policies\System","NoDispBackgroundPage",0x10001,00,00,00,00
hkcu,"Software\Microsoft\Windows\CurrentVersion\Policies\System","NoDispScrSavPage",0x10001,00,00,00,00
hkcu,"Software\Microsoft\Windows\CurrentVersion\Policies\System","NoDispAppearancePage",0x10001,00,00,00,00
hkcu,"Software\Microsoft\Windows\CurrentVersion\Policies\System","NoDispSettingsPage",0x10001,00,00,00,00
hkcu,"Software\Microsoft\Windows\CurrentVersion\Policies\System","NoColorChoice",0x10001,00,00,00,00
hkcu,"Software\Microsoft\Windows\CurrentVersion\Policies\System","NoSizeChoice",0x10001,00,00,00,00
hkcu,"Software\Microsoft\Windows\CurrentVersion\Policies\System","NoVisualStyleChoice",0x10001,00,00,00,00
hkcu,"Software\Microsoft\Windows\CurrentVersion\Policies\System","NoVirtMemPage",0x10001,00,00,00,00
hkcu,"Software\Microsoft\Windows\CurrentVersion\Policies\System","NoFileSysPage",0x10001,00,00,00,00
hkcu,"Software\Microsoft\Windows\CurrentVersion\Policies\System","NoDevMgrPage",0x10001,00,00,00,00

hkcu,"Software\Microsoft\Windows\CurrentVersion\Policies\Explorer","NoAddPrinter",0x10001,00,00,00,00
hkcu,"Software\Microsoft\Windows\CurrentVersion\Policies\Explorer","NoDeletePrinter",0x10001,00,00,00,00
hkcu,"Software\Microsoft\Windows\CurrentVersion\Policies\Explorer","NoFind",0x10001,00,00,00,00
hkcu,"Software\Microsoft\Windows\CurrentVersion\Policies\Explorer","NoRun",0x10001,00,00,00,00
hkcu,"Software\Microsoft\Windows\CurrentVersion\Policies\Explorer","NoLogOff",0x10001,00,00,00,00

hku,".DEFAULT\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer","NoNetSetupIDPage",0x10001,00,00,00,00
hku,".DEFAULT\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer","NoNetSetup",0x10001,00,00,00,00
hku,".DEFAULT\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer","NoEntireNetwork",0x10001,00,00,00,00
hku,".DEFAULT\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer","NoClose",0x10001,00,00,00,00
hku,".DEFAULT\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer","NoRecentDocsHistory",0x10001,00,00,00,00
hku,".DEFAULT\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer","NoNetHood",0x10001,00,00,00,00
hku,".DEFAULT\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer","NoSetFolders",0x10001,00,00,00,00
hku,".DEFAULT\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer","NoDestop",0x10001,00,00,00,00
hku,".DEFAULT\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer","NoSetTaskBar",0x10001,00,00,00,00

hklm,"SOFTWARE\Microsoft\Internet Explorer\Main","Start Page",,"about:blank"
hklm,"SOFTWARE\Microsoft\Internet Explorer\Main","Window Title",,"Microsoft Internet Explorer"

hkcr,".exe",,,"exefile"
hkcr,".exe","Content Type",,"application/x-msdownload"

hkcr,".reg",,,"regfile"

hkcr,".txt",,,"txtfile"

hkcr,"exefile\shell\open\command",,,"""%%1"" %%*"

hkcr,"regfile\shell\open\command",,,"regedit.exe ""%%1"""

hkcr,"txtfile\shell\open\command",,0x20000,"%%SystemRoot%%\system32\NOTEPAD.EXE %%1"

[Strings]
==========================================================
將以上代碼複製粘貼到notepad中,保存為restore.inf與文章開始的fix.cmd檔案放在同一個目錄下,使用時直接運行fix.cmd.

最後的最後:這僅僅是作為一個電腦愛好者的個人作品,與商業軟體沒有可比性,只想作為公益軟體與大家分享,希望大家喜歡~

TOP

發新話題

本站所有圖文均屬網友發表,僅代表作者的觀點與本站無關,如有侵權請通知版主會盡快刪除。