500分 如何通过修改ntoskrnl.EXE中的位图资源而达到修改W2K和WXP的启动画面? (100分)

  • 主题发起人 主题发起人 zoulin
  • 开始时间 开始时间
Z

zoulin

Unregistered / Unconfirmed
GUEST, unregistred user!
function ChangeBmpFormExe:Integer;
function MAKELANGID(p,s:Word):Word;
begin
Result:=((s shl 10) or p);
end;
const
SysLogoExe='ntoskrnl.exe';
WinLogoExe='WinLogo.exe';
RunLogoExe='RunLogo.exe';
BootFile ='C:/BOOT.INI';
var
hResLoad:HRSRC; // handle to loaded resource
hExe:THANDLE; // handle to existing .EXE file
hRes:THANDLE; // handle to res. info. in hExe
hUpdateRes:THANDLE; // update resource handle
lpResLock:Pointer ;
ResId:PChar;
Buf:array[0..MAX_PATH] of Char;
SouExe,ObjExe,WinSysDir:String;
Bootini:TstringList;
i,iMax:Integer;
NewString:String;
begin
GetSystemDirectory(Buf,sizeof(Buf));
WinSysDir:=String(Buf)+'/';
Result:=1;
if FileExists(WinSysDir+SysLogoExe) then begin
if FileExists(WinSysDir+RunLogoExe)=False then begin
end;
FileCopy(WinSysDir+SysLogoExe,WinSysDir+RunLogoExe);
if FileExists(WinSysDir+WinLogoExe) then begin
SouExe:=WinSysDir+WinLogoExe;
ObjExe:=WinSysDir+RunLogoExe;
ResId:=PChar(1);
hExe := LoadLibraryEx(PChar(SouExe),0,LOAD_LIBRARY_AS_DATAFILE);
hRes := FindResource(hExe,ResId,RT_BITMAP);
hResLoad:= LoadResource(hExe, hRes);
lpResLock:= LockResource(hResLoad);
hUpdateRes:= BeginUpdateResource(PChar(ObjExe), False);
if not UpdateResource(hUpdateRes, // update resource handle
RT_BITMAP, // change Icon resource
ResId, // Icon name
MAKELANGID(LANG_CHINESE,SUBLANG_SYS_DEFAULT), // neutral language ID
lpResLock, // ptr to resource info
SizeofResource(hExe,hRes)) // size of resource info.
then Result:=0;
if (not EndUpdateResource(hUpdateRes, FALSE)) then Result:=0;
FreeLibrary(hExe);
end else Result:=-1;
if Result=1 then begin
FileCopy(BootFile,WinSysDir+'Boot.ini');
Bootini:=TstringList.Create;
Bootini.LoadFromFile(BootFile);
for i:=0 to Bootini.Count-1 do begin
if Pos(_SystemSet[13],Bootini.Strings)>0 then begin
iMax:=Pos('=',Bootini.Strings);
if iMax>0 then begin
NewString:=Copy(Bootini.Strings,1,imax-1);
WriteIniData(BootFile,'operating systems',NewString,
'"'+_SystemSet[13]+'" /fastdetect /kernel=RunLogo.exe');
end;
Break;
end;
end;
Bootini.Free;
end;
end else begin
end;
end;
WinLogo.exe:通过最初印象生成的。
通过以上程序的确实现了位图资源的替换,而且使用eXeScope.exe检查也正常,但是系统就是启动不了,报告说资源损坏。
当然最好是用位图文件直接替换ntoskrnl.EXE中的资源
请大家指教!
 
分数不够可以另外增加到500分,盼指教!
 
SUOCY5
能具体点吗?
 
8d = 不懂
我估计window校验了。怎么说也是关键系统文件啊,又不是普通的DLL
 
window实时监控该程序,会自动恢复,现在那些可以修改bootskin的软件,不是直接修改该软件的;而是通过类似欺骗的方法来实现不同的开机画面的。[:)]
 
后退
顶部