Посл.ответ |
Сообщение |
Ранг: 5.0 (гость) Активность: 0.01↘0 Статус: Участник
|
Создано: 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.02↘0 Статус: Участник anarchist
|
Создано: 04 ноября 2004 23:38 · Личное сообщение · #2
ужс ты на чем пишешь?, про мasm32 не слышал?
| Сообщение посчитали полезным: |
 Ранг: 266.8 (наставник), 5thx Активность: 0.22↘0.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.26↘0 Статус: Участник
|
Создано: 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.01↘0 Статус: Участник
|
Создано: 05 ноября 2004 15:37 · Личное сообщение · #5
Под Винду, мне надо и то и другое, т.к. я хочу научиться и тому и другому
| Сообщение посчитали полезным: |
Ранг: 450.1 (мудрец) Активность: 0.26↘0 Статус: Участник
|
Создано: 05 ноября 2004 16:19 · Личное сообщение · #6
monrus
> Под Винду, мне надо и то и другое,
На каком языке программирования? ;)
| Сообщение посчитали полезным: |
Ранг: 5.0 (гость) Активность: 0.01↘0 Статус: Участник
|
Создано: 05 ноября 2004 16:54 · Личное сообщение · #7
Asterix, если у тебя есть желание помочь, то на MASM, если можешь - C/C++
| Сообщение посчитали полезным: |
Ранг: 5.0 (гость) Активность: 0.01↘0 Статус: Участник
|
Создано: 05 ноября 2004 16:56 · Личное сообщение · #8
И под ДОС. лоадер-патчер тоже под ДОС
| Сообщение посчитали полезным: |
Ранг: 450.1 (мудрец) Активность: 0.26↘0 Статус: Участник
|
Создано: 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.26↘0 Статус: Участник
|
Создано: 05 ноября 2004 17:20 · Личное сообщение · #10
> И под ДОС. лоадер-патчер тоже под ДОС
Под DOS не пишу, это без меня ;)
| Сообщение посчитали полезным: |
Ранг: 5.0 (гость) Активность: 0.01↘0 Статус: Участник
|
Создано: 05 ноября 2004 18:18 · Личное сообщение · #11
Asterix, Спасибо хотя бы за это!
| Сообщение посчитали полезным: |
 Ранг: 266.8 (наставник), 5thx Активность: 0.22↘0.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
Спасибо.
| Сообщение посчитали полезным: |