Форум С++

 

Ответить на сообщение

Вернуться к теме

Вы отвечаете на сообщение:

Автор: Ниkоза   (13.03.2007 в 21:45)
Конечно можно. Работает ведь загруженный в память ексешник. а сам файл *.exe лежит мёртвым грузом. Можно что угодно с ним сделать.
Но можно изменить файл даже прямо в памяти. Можно вообще творить всё что угодно.
Вот простейший пример вставки в exe - файл.

asm:
.586
.model flat, stdcall
option casemap :none

include \MASM32\INCLUDE\windows.inc
include \MASM32\INCLUDE\kernel32.inc
includelib \MASM32\LIB\kernel32.lib
includelib \MASM32\LIB\shell32.lib
includelib \MASM32\LIB\user32.lib
BSIZE equ 128

.data

fName BYTE "C:\test.exe", 0
fHandle DWORD ?
cRead DWORD ?
cWrite DWORD ?
cWritten DWORD ?
comma BYTE "Изучайте мануалы, и Вы проживёте долгую жизнь!"
buf BYTE BSIZE dup (?)
.code

start:

invoke CreateFile, ADDR fName, ;Открываем exe.файл fName

GENERIC_READ+GENERIC_WRITE, ;Для чтения и записи
0, NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, 0
mov fHandle, eax ;Запоминаем Хендл
invoke SetFilePointer, fHandle, 0, ;Перемещаем указатель на самую 1 позицию (т.е. в начало файла)...
NULL, FILE_BEGIN ;От начала файла
invoke ReadFile, fHandle, ADDR buf, ;А всё что после - пока копируем в буфер...
BSIZE, ADDR cRead, NULL
invoke SetFilePointer, fHandle, 1,
NULL, FILE_BEGIN ;Такс, теперь опять возвращаемся на первую позицию (т.е. в самое начало файла)
invoke WriteFile, fHandle, ADDR comma, ;Вставляем нашу заготовку (адрес - comma )
20, ADDR cWrite, NULL ; И для этого раздвигаем место для 46 знаков
invoke WriteFile, fHandle, ADDR buf, ; А теперь дописываем из буфера наш скопированный файл
cRead, ADDR cWrite, NULL
invoke CloseHandle, fHandle
invoke ExitProcess, 0 ; Вот и всё...
end start

Вместо ексешника можно переписать любой файл.
Правда, при повторном запуске ексешник не откроется...
так сказать, "зашифровали" мы его... Хрен кто его запустит...


А вернуть всё на место также легко - немного переписать код. Сначала ставим указатель на 46 позицию (считая ноль), копируем всё это в буфер. (это мы скопировали наш прежний файл без добавки), теперь обрезаем файл до нуля, теперь ставим указатель на 1 позицию, и пишем из буфера. Теперь закрываем файл.


Ваше имя:

Пароль:

Цитировать

Используйте тэги для выделения текста:
Код: [code][/code]
Жирный: [b][/b]
Наклонный: [i][/i]
URL: [url][/url]

Сообщение:

Прикрепить: