ребята , помогите не хочет сканировать и менять сигнатуру , сканирую в браузере опера вообще не катит, вот функциии прроцедуры var m_pID: integer; m_hProc: THandle; module: TModuleEntry32; m_Sign: integer; procName: string; function DataCompare(data: PByte; sign: PByte; mask: PAnsiChar): boolean;begin while mask^ <> #0 do begin if ((mask^ = 'x') and (data^ <> sign^)) then begin result := false; exit; end; inc(mask); inc(data); inc(sign); end; result := true;end; function GetModuleInfo(const module_name: PChar; main_process: boolean): TModuleEntry32;var snapshot: THandle; module: TModuleEntry32;begin snapshot := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, m_pID); module.dwSize := sizeof(TModuleEntry32); if (Module32First(snapshot, module)) then begin if (main_process) then begin CloseHandle(snapshot); result := module; end; while (Module32Next(snapshot, module)) do begin if (StrIComp(PChar(ExtractFileName(module.szModule)), PChar(module_name)) = 0) then begin CloseHandle(snapshot); result := module; end; end; end; result := module;end; procedure GetPID;var snapshot: THandle; pInfo: PROCESSENTRY32;begin snapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); pInfo.dwSize := sizeof(PROCESSENTRY32); if (Process32First(snapshot, pInfo)) then begin while (Process32Next(snapshot, pInfo)) do begin if pInfo.szExeFile = procName then begin m_pID := pInfo.th32ProcessID; CloseHandle(snapshot); exit; end; end; end; end; procedure Write(ProcessID: SIZE_T; WriteAdress: Integer; WriteValue: array of Byte);var pHandle:LongInt; Bytes : SIZE_T; Aob_old_Protect_OFF: dword; Aob_old_Protect_ON:dword;begin pHandle:=OpenProcess(PROCESS_VM_READ or PROCESS_VM_WRITE or PROCESS_VM_OPERATION,false,ProcessID); VirtualProtectEx(pHandle,ptr(WriteAdress),SizeOf(WriteValue),PAGE_EXECUTE_READWRITE,Aob_old_Protect_OFF);//Снятие протекции с памяти Application.ProcessMessages; WriteProcessMemory(pHandle,ptr(WriteAdress),(@WriteValue),SizeOf(WriteValue),Bytes); VirtualProtectEx(pHandle,ptr(WriteAdress),SizeOf(WriteValue),Aob_old_Protect_OFF,Aob_old_Protect_ON);//Востановление протекции с памяти CloseHandle(pHandle);End; function ScanSignature(base: Cardinal; size: SIZE_T; sign: PByte; mask: PAnsiChar): integer;var mbi: MEMORY_BASIC_INFORMATION; offset: integer; buffer: PByte; BytesRead: SIZE_T; i: integer;begin offset := 0; while (offset < size) do begin VirtualQueryEx(m_hProc, Pointer(base + offset), &mbi, sizeof(MEMORY_BASIC_INFORMATION)); if (mbi.State <> MEM_FREE) then begin GetMem(buffer, mbi.RegionSize); ReadProcessMemory(m_hProc, mbi.BaseAddress, buffer, mbi.RegionSize, BytesRead); for i := 0 to mbi.RegionSize do begin if (DataCompare(buffer + i, sign, mask)) then begin FreeMem(buffer); result := integer(mbi.BaseAddress) + i; exit; end; end; FreeMem(buffer); end; offset := offset + mbi.RegionSize; end; result := 0; // end; procedure TForm2.sCheckBox1Click(Sender: TObject);const poisk: array [0..10] of byte = ($66,$0F,$D6,$8D,$58,$FF,$FF,$FF,$C7,$85,$60); //Сигнатура поиска zamena: array [0..10] of byte = ($90,$90,$90,$90,$90,$90,$90,$90,$C7,$85,$60); //Сигнатура замены Mask = 'xxxxxxxxxx';begin if sCheckBox1.Checked then begin GetPID(); if (m_pID <> 0) then begin module := GetModuleInfo(nil, true); m_hProc := OpenProcess(PROCESS_ALL_ACCESS, false, m_pID); m_Sign := ScanSignature(integer(module.modBaseAddr), module.modBaseSize, @poisk, Mask); if m_Sign = 0 then begin sCheckBox1.Caption := 'Ошибка'; end else begin Write(m_pID,m_Sign,zamena); sCheckBox1.Caption := 'Деактивировать'; end; end; CloseHandle(m_hProc); end else if sCheckBox1.Checked = False then begin Write(m_pID,m_Sign,poisk); sCheckBox1.Caption := 'Активировать'; end;end; Как я понял, нету просто доступа к правам памяти( ReadOnly/ и т.д.) но как же мне поправить это делоделаю на ХЕ5 //NullAlex: заголовок темы изменил, с "ПОМОГИТЕ" на более информативный - "Проблема с поиском по сигнатуре". На будущее прошу учесть, что темы нужно называть информативно, чтобы заголовок отражал суть вопроса. Предупреждение устное, на этот раз.