Сейчас на форуме: ==DJ==[ZLO], Magister Yoda, Rio, Dart Raiden (+6 невидимых)

 eXeL@B —› Основной форум —› помогите разобраться с патчингом
Посл.ответ Сообщение

Ранг: 5.0 (гость)
Активность: 0.010
Статус: Участник

Создано: 04 ноября 2004 23:14
· Личное сообщение · #1

здесь исходник, который патчит 10 байт файла. А как сделать,
чтобы можно было пропатчить подряд любое заданное кол-во байт?
Дайте пожалуйста исходники. И если можете, то и на memory patcher(патчит файл в памяти).

CSEG segment
assume cs:CSEG, es:CSEG, ds:CSEG,ss:CSEG
org 100h

Begin:

openfile:

mov ax,3d02h
mov dx,offset FileName
int 21h

mov handle,ax
cmp ax,02h
je filedontexist

Write:

mov ax,4200h
mov bx,handle
mov cx,0000h
mov dx,0001h
int 21h

mov ah,40h
mov bx,handle
mov dx,offset String
mov cx,0ah
int 21h

jmp Exit

filedontexist:

mov dx,offset notfound
mov ah,9
int 21h
jmp Exit

Exit:

mov ah,3eh
mov bx,handle
int 21h

mov ax,4c00h
int 21h


handle dw ?
FileName db 'c:\1.exe',0,'!$'
notfound db 0dh,0ah,"File not found!$"
String dt 0EBEBEBEBEBEBEBEBEBEBh,0

CSEG ends
end Begin



Ранг: 28.0 (посетитель)
Активность: 0.020
Статус: Участник
anarchist

Создано: 04 ноября 2004 23:38
· Личное сообщение · #2

ужс ты на чем пишешь?, про мasm32 не слышал?




Ранг: 266.8 (наставник), 5thx
Активность: 0.220.03
Статус: Участник
very WELL :)

Создано: 05 ноября 2004 01:35
· Личное сообщение · #3

monrus пишет:
И если можете, то и на memory patcher

Вот. 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




Ранг: 450.1 (мудрец)
Активность: 0.260
Статус: Участник

Создано: 05 ноября 2004 09:37
· Личное сообщение · #4

monrus
> И если можете, то и на memory patcher(патчит файл в памяти).

Ты определись что тебе нужно, патчер или лоадер-патчер, под какую OS, может ты хочешь сделать, так называемый, inline патч - тогда придётся покодить в HiEW

WELL
Кстати лучше вместо PROCESS_ALL_ACCESS применять
PROCESS_VM_OPERATION or PROCESS_VM_READ or PROCESS_VM_WRITE, а вместо PAGE_EXECUTE_READWRITE -
PAGE_READWRITE



Ранг: 5.0 (гость)
Активность: 0.010
Статус: Участник

Создано: 05 ноября 2004 15:37
· Личное сообщение · #5

Под Винду, мне надо и то и другое, т.к. я хочу научиться и тому и другому



Ранг: 450.1 (мудрец)
Активность: 0.260
Статус: Участник

Создано: 05 ноября 2004 16:19
· Личное сообщение · #6

monrus
> Под Винду, мне надо и то и другое,

На каком языке программирования? ;)



Ранг: 5.0 (гость)
Активность: 0.010
Статус: Участник

Создано: 05 ноября 2004 16:54
· Личное сообщение · #7

Asterix, если у тебя есть желание помочь, то на MASM, если можешь - C/C++



Ранг: 5.0 (гость)
Активность: 0.010
Статус: Участник

Создано: 05 ноября 2004 16:56
· Личное сообщение · #8

И под ДОС. лоадер-патчер тоже под ДОС



Ранг: 450.1 (мудрец)
Активность: 0.260
Статус: Участник

Создано: 05 ноября 2004 17:19
· Личное сообщение · #9

Вот пара лоадеров..
Мне честно говоря на masm сейчас лень писАть, а готового под рукой нет, есть на 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
@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_READWRITE, OldProtect
test eax, eax
jz @error
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

library kernel32,'KERNEL32.DLL'


include '%fasminc%\APIA\KERNEL32.INC'


И есть на дельфи, более продвинутый для ASPack'а, приаттачил, хотя ошибочки(неточности, ляпы) в коде
есть некоторые вещи я бы сейчас сделал более правильно, и гораздо компактнее, но переделывать лень.

_363766305__LOADER.HTM



Ранг: 450.1 (мудрец)
Активность: 0.260
Статус: Участник

Создано: 05 ноября 2004 17:20
· Личное сообщение · #10

> И под ДОС. лоадер-патчер тоже под ДОС

Под DOS не пишу, это без меня ;)



Ранг: 5.0 (гость)
Активность: 0.010
Статус: Участник

Создано: 05 ноября 2004 18:18
· Личное сообщение · #11

Asterix, Спасибо хотя бы за это!




Ранг: 266.8 (наставник), 5thx
Активность: 0.220.03
Статус: Участник
very WELL :)

Создано: 05 ноября 2004 22:48
· Личное сообщение · #12

Asterix пишет:
Кстати лучше вместо PROCESS_ALL_ACCESS применять
PROCESS_VM_OPERATION or PROCESS_VM_READ or PROCESS_VM_WRITE, а вместо PAGE_EXECUTE_READWRITE -
PAGE_READWRITE

Спасибо.


 eXeL@B —› Основной форум —› помогите разобраться с патчингом
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати