· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.RESEARCH —› Как пропатчить загруженный процесс ?

Посл.отвђт Сообщенiе


Дата: Янв 7, 2004 19:12:41

Запускается прога.
В запущенном процессе нужно изменить пару байт.
Как это сделать?
Может кто приведет пример?
Желательно на MASM32 by Hutch :))


Дата: Янв 7, 2004 19:53:36

Легко :-)

OpenProcess
ReadProcessMemory
WriteProcessMemory

или

CreateRemoteThread
и дальше делай что хочешь.


Дата: Янв 8, 2004 01:53:18

исходник есть, тока если нужен пиши на мыло
kerghan(at)pisem(dot)net


Дата: Янв 8, 2004 05:40:52 · Поправил: Asterix

.386
.model flat, stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib

.data

OldProtect     dd 0
hProcess       dd 0
Pid            dd 003B8h  ; pid процесса, свой поставишь перед компиляцией
AddressToWrite dd 0401000h
ByteToWrite    db 0CCh

.code

start:
   invoke OpenProcess, PROCESS_ALL_ACCESS, FALSE, Pid
   test eax, eax
   jz @error
   mov hProcess, eax
   invoke VirtualProtectEx, hProcess, AddressToWrite, SIZEOF BYTE,\
                            PAGE_EXECUTE_READWRITE, OFFSET OldProtect
   invoke WriteProcessMemory, hProcess, AddressToWrite, OFFSET ByteToWrite, SIZEOF BYTE,  NULL
   test eax, eax
   jz @F
   invoke VirtualProtectEx, hProcess, AddressToWrite, SIZEOF BYTE,\
                            OldProtect, OFFSET OldProtect
@@:
   invoke CloseHandle, hProcess
@error:
   invoke ExitProcess, 0
end start


Дата: Янв 8, 2004 07:13:49

Спасибо за ответы :)
На самом деле ситауция такая:
Моя прога запускает другую.
Эту другую надо пропатчить.
Та часть кода, которую надо пропатчить выполняется при запуске проги (проверка регистрации).
Получается моей проге надо успеть получить PID процесса и успеть его пропатчить до проверки регистрации.
Реально ли это сделать ?


Дата: Янв 8, 2004 07:51:59

WELL12
Тогда нужно запускать процесс той проги со флагом CREATE_SUSPENDED, патчить нужные байты (как в предыдущем примере by Asterix) и напоследок вызывать ResumeThread.


Дата: Янв 8, 2004 08:47:36

Quantum Спасибо.
Может кто дополнит пример Asterix'a ?


Дата: Янв 8, 2004 13:11:23

Все! Разобрался :)
Спасибо всем за помощь.


Дата: Янв 8, 2004 13:46:46

WELL12

Гы-гы, ты бы сразу так и писал, хочу написать Loader, у тебя вдобавок ещё и файл наверно запакован, тогда нужно опрашивать требуемое место в файле по таймеру, когда распакуется патчить.


Дата: Янв 8, 2004 14:02:57

Забыл добавить, можно не опрашивать, можно подождать, вот, смотри статью как писать loader.

24732259__loader.txt


Дата: Янв 8, 2004 15:04:44

Asterix Благодарю


Дата: Янв 10, 2004 03:54:51 · Поправил: Asterix

Вот написал loader, может, иногда ;-), пропатчить и запакованный файл :-) правда это fasm :-).
; Loader PE example

format PE GUI 4.0
entry start

include '%fasminc%\win32a.inc'

section '.data' data readable writeable

hProcess       dd 0
OldProtect     dd 0
szFileName     db "target.exe",0
AddressToWrite dd 0401000h
ByteToWrite    db 06Ah
StartupInfo    STARTUPINFO
ProcessInfo    PROCESSINFO
align 4
Buff           rb 001h

section '.code' code readable executable

start:
    mov [StartupInfo.cb], STARTUPINFO
    invoke CreateProcess, szFileName, NULL, NULL, NULL, FALSE, CREATE_SUSPENDED,\
                          NULL, NULL, StartupInfo, ProcessInfo
    test eax, eax
    jz @exit
align 4
@loop:
    invoke ReadProcessMemory, [ProcessInfo.hProcess], [AddressToWrite], Buff, 001h, NULL
    test eax, eax
    jz @error
    cmp BYTE [Buff], 0CCh
    je @found
    invoke ResumeThread, [ProcessInfo.hThread]
    invoke Sleep, 0
    invoke SuspendThread, [ProcessInfo.hThread]
    jmp @loop
@found:
    invoke VirtualProtectEx, [ProcessInfo.hProcess], [AddressToWrite], 001h,\
                             PAGE_EXECUTE_READWRITE, OldProtect
    invoke WriteProcessMemory, [ProcessInfo.hProcess], [AddressToWrite], ByteToWrite, 001h, NULL
    test eax, eax
    jz @error
    invoke VirtualProtectEx, [ProcessInfo.hProcess], [AddressToWrite], 001h,\
                             [OldProtect], OldProtect
    invoke ResumeThread, [ProcessInfo.hThread]
@close:
    invoke CloseHandle, [ProcessInfo.hThread]
    invoke CloseHandle, [ProcessInfo.hProcess]
@exit:
    invoke ExitProcess, 0
@error:
    invoke TerminateProcess, [ProcessInfo.hProcess], 0
    jmp @close


section '.idata' import data readable writeable

library kernel, 'KERNEL32.DLL'

import kernel,\
         CreateProcess, 'CreateProcessA',\
         VirtualProtectEx, 'VirtualProtectEx',\
         WriteProcessMemory, 'WriteProcessMemory',\
         ReadProcessMemory, 'ReadProcessMemory',\
         Sleep, 'Sleep',\
         SuspendThread, 'SuspendThread',\
         ResumeThread, 'ResumeThread',\
         TerminateProcess, 'TerminateProcess',\
         CloseHandle, 'CloseHandle',\
         ExitProcess, 'ExitProcess'
                                    


Дата: Янв 11, 2004 12:39:18

а ты не жадный
не то что некоторые жиды (не будем называть их имён).


Дата: Янв 11, 2004 15:05:46

2Asterix:
А если надо патчить не сам ЕХЕ , а DLL которую он грузит , пробовал через DebugAPI , но нич не получилось ...


Дата: Янв 11, 2004 15:27:02

xCoRe

Dll можно пропатчить из самого exe, если exe'шник, например, не запакован а dll'ка запакована, или можно вписать патч в саму dll'ку вариантов предостаточно ;-)


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.241