∟DarkPan Опубликовано 28 декабря, 2014 Поделиться Опубликовано 28 декабря, 2014 ребята , помогите не хочет сканировать и менять сигнатуру , сканирую в браузере опера вообще не катит, вот функциии прроцедуры 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: заголовок темы изменил, с "ПОМОГИТЕ" на более информативный - "Проблема с поиском по сигнатуре". На будущее прошу учесть, что темы нужно называть информативно, чтобы заголовок отражал суть вопроса. Предупреждение устное, на этот раз. Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 28 декабря, 2014 Поделиться Опубликовано 28 декабря, 2014 Код в порядке, вроде. Вот по поводу маски - сомневаюсь. Попробуй выставить (в обработчике OnClick sCheckBox1) не 'xxxxxxxxxx', а примерно такую: 'x????x????x????xx????xx'. Ссылка на комментарий Поделиться на другие сайты Поделиться
∟DarkPan Опубликовано 28 декабря, 2014 Автор Поделиться Опубликовано 28 декабря, 2014 (изменено) Код в порядке, вроде.Вот по поводу маски - сомневаюсь. Попробуй выставить (в обработчике OnClick sCheckBox1) не 'xxxxxxxxxx', а примерно такую: 'x????x????x????xx????xx'.Можешь дать скайп, у меня есть вопрос приватный =), да и код всёравно не сканирует, возможно сканирует, но не заменяет! Изменено 28 декабря, 2014 пользователем ∟DarkPan Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 28 декабря, 2014 Поделиться Опубликовано 28 декабря, 2014 код всёравно не сканирует, возможно сканирует, но не заменяет!Перепилил код под Delphi 7 - все отлично работает. Разве что замену по сигнатуре не проверял, но поиск - вполне. Только код GetPID отваливается временами, почему - разбираться не стал, но с этим сам уже разберешься. Можешь дать скайп, у меня есть вопрос приватный =)Задавай здесь, или в личном сообщении. Мой скайп - моя крепость SigScanner.zip Ссылка на комментарий Поделиться на другие сайты Поделиться
∟DarkPan Опубликовано 28 декабря, 2014 Автор Поделиться Опубликовано 28 декабря, 2014 Спасиб, яуже разобрался Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения