eXeL@B —› Программирование —› Помогите написать функцию на Delphi сканирования памяти |
Посл.ответ | Сообщение |
|
Создано: 29 июня 2012 17:36 · Личное сообщение · #1 Помогите написать функцию на Delphi сканирования памяти, т.е. массива байт (Aob Scan) как это реализовано в Cheat Engine или любой другой подобной программе. Рылся в исходниках, но там полная каша и куча ненужных мне модулей. На вход функции подавать Application Handle, и набор байт вида: AB CD ?? 01 02 03 ?? 04 ?? 05. Надеюсь на вашу помощь. Заранее большое Спасибо! |
|
Создано: 29 июня 2012 17:44 · Личное сообщение · #2 |
|
Создано: 29 июня 2012 17:50 · Личное сообщение · #3 |
Ранг: 419.0 (мудрец), 647thx Активность: 0.46↗0.51 Статус: Участник "Тибериумный реверсинг" |
Создано: 29 июня 2012 18:18 · Личное сообщение · #4 kid Одним ReadProcessMemory тут не обойтись. Исключая брут всего адресного пространства, по хорошему надо знать раскладку памяти процесса (GetSystemInfo, VirtualQueryEx), их атрибуты, тип. soulkeeper гуглите лучше! Code:
|
|
Создано: 29 июня 2012 18:40 · Личное сообщение · #5 |
|
Создано: 29 июня 2012 18:45 · Личное сообщение · #6 ELF_7719116 пишет: гуглите лучше! Code: var ProcessID, Addr, Value, BytesRead: DWord; ProcessHandle: THandle; Mbi: TMemoryBasicInformation; i: Cardinal; Buf: PChar; begin ProcessHandle := FindWindow(nil, PChar('Заголовок окна процесса')); GetWindowThreadProcessId(ProcessHandle, @ProcessID); Value := 12321; ProcessHandle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_ALL_ACCESS or PROCESS_VM_OPERATION, false, ProcessID); if ProcessHandle <> 0 then try Addr := 0; while VirtualQueryEx(ProcessHandle, Pointer(Addr), Mbi, SizeOf(Mbi)) <> 0 do begin if (Mbi.State = MEM_COMMIT) and not ((Mbi.Protect and PAGE_GUARD) = PAGE_GUARD) then begin GetMem(Buf, Mbi.RegionSize); try if ReadProcessMemory(ProcessHandle, Mbi.BaseAddress, Buf, Mbi.RegionSize, BytesRead) then begin for i := 0 to BytesRead - SizeOf(Value) do begin if PDWord(@Buf[i])^ = Value then Memo1.Lines.Add('$' + IntToHex(Integer(Cardinal(Mbi.BaseAddress) + i), 8)); end; end else finally FreeMem(Buf); end; end; Addr := Addr + Mbi.RegionSize; end; finally CloseHandle(ProcessHandle); end; end; Так тут же нет маски(( |
|
Создано: 29 июня 2012 18:46 · Личное сообщение · #7 |
|
Создано: 29 июня 2012 18:53 · Поправил: soulkeeper · Личное сообщение · #8 Vovan666 пишет: soulkeeper b3b0_29.06.2012_EXELAB.rU.tgz - Текстовый документ (2).txt Спасибо, сейчас буду разбираться, а пока все кажется сложным. Если есть еще варианты пишите, буду признателен. *** Добавлено *** Немного разобрался с исходником... Он не подходит, т.к. он ищет в файле, а не в процессе |
|
Создано: 29 июня 2012 19:04 · Личное сообщение · #9 |
|
Создано: 29 июня 2012 19:45 · Личное сообщение · #10 Детский сад какой-то. Уже и так написали, и эдак. Подумай хотя бы немного и допиши уже самостоятельно. | Сообщение посчитали полезным: plutos |
eXeL@B —› Программирование —› Помогите написать функцию на Delphi сканирования памяти |
Эта тема закрыта. Ответы больше не принимаются. |