Code: procedure patch_exe; var f: file; l: Longint; FileName, oldstring, newstring, s: string; begin oldstring := Что меняем; newstring := На что меняем; FileName := Имя файла; s := oldstring; AssignFile(f, FileName); Reset(f, 1); for l := 0 to FileSize(f) - Length(oldstring) - 1 do begin Application.ProcessMessages; Seek(f, l); BlockRead(f, oldstring[1], Length(oldstring)); if oldstring = s then begin seek(f, l); BlockWrite(f, newstring[1], Length(newstring)); end; Application.ProcessMessages; end; CloseFile(f); end;
Для этого тебе нужно знать что менять, в статье как создать билдер троя на vb Это было... кажись я видел эту статью на хакзоне...
я пишу билдер фэйков)) сорсы естесственно выложу)) так что всем будет интерессно и ваша помощь имеет значние
Вот кусок кода: Писался столет назад, когда еще криптерами занимался Смысл кода - из одного файла взять занчек, в другой пнуть. т.е. непосредственно работа с ресурсами. Чтобы разобраться во всем почитай про функции BeginUpdateResource - открытие файла для изменения ресурсов UpdateResource - зама замена, удаление, добавление EndUpdateResource - закрытие Code: function szUpdateResource(hModule: THandle; lpszType: PChar;lpszName: PChar;hUpdate: Cardinal): BOOL; stdcall; var hRes,hResLoaded,nSizeOfRes:dword; pData:pointer; begin result:=true; if (NOT ALL_ICON) and (LOAD_ICON) then exit; hRes:=FindResource(hModule,lpszName,lpszType); hResLoaded:=LoadResource(hModule,hRes); pData:=LockResource(hResLoaded); nSizeOfRes:=SizeofResource(hModule,hRes); UpdateResource(hUpdate,lpszType,lpszName,0,pData,nSizeOfRes); FreeResource(hResLoaded); LOAD_ICON:=true; end; procedure AddResIcon(to_file:string;from_file:string); var hFile,hCopy:DWORD; begin hCopy:=LoadLibrary(pchar(from_file)); if hCopy=0 then begin MessageBox(0,'ICON FILE OPEN ERROR','WARNING',MB_OK+MB_ICONINFORMATION); exit; end; hFile:=BeginUpdateResource(pchar(to_file),FALSE); LOAD_ICON:=false; EnumResourceNames(hCopy,RT_ICON,@szUpdateResource,hFile); LOAD_ICON:=false; EnumResourceNames(hCopy,RT_GROUP_ICON,@szUpdateResource,hFile); EndUpdateResource(hFile,FALSE); FreeLibrary(hCopy); end;
slesh, а hModule - это указатель на файл? т.е. как передать ему файл? так? Code: hMod := LoadLibrary('c:\123.exe');
Это если ты собираешься выдирать ресурсы из чужого файла. ТО его в оперативу загружай через LoadLibrary. В примере всё есть. Хотя лучше грузить через LoadLibraryEx с флагом LOAD_LIBRARY_AS_DATAFILE это более безопасно и быстрее
Насколько я знаю стандартным апи нельзя добавлять новые ресурсы,можно только заменять только те что уже есть.
Slesh, касательно той функции, что ты привел. Как задать имя ресурса? допустим я укажу тип: RT_BITMAP, а как ему имя задать? всеравно иконка не меняеца в файле((
Вобщем, когда-то писал для таких же целей, прошу прощения за неграмотность Code: procedure ReplaceRes(ResType, ResName, filename, replace:string; ResLang:integer); var FS: TFileStream; S,F: Cardinal; P: pointer; begin FS:= TFileStream.Create(replace,fmOpenRead); S:= FS.Size; GetMem(P,S); FS.ReadBuffer(P^,S); F:= BeginUpdateResource(pchar(filename),False); UpdateResource(F,pchar(ResType),pchar(ResName),ResLang,P,S); EndUpdateResource(F,False); Freemem(P,S); end; ResType, ResName, ResLang - думаю понятно filename - путь к экзешнику replace - путь к файлу, который выступает в роли заменяемого ресурса Итак, пример использования: Code: .................. begin ................. ReplaceRes('Menu', '272', 'CCleaner.exe', 'c:\MyMenu.txt', 2057); ................. end; .........................