| Автор
| Сообщение |
|
|
|
Цитата |
|
Хочу просить форум о помощи!
Мне необходимо написать приложение ктоторое запускало бы "ехе" файл вложенный в это приложение в виде MS : TMemoryStream
Как вложить ехе файлик в своё приложение, я разобрался, а вот запустить его из MemoryStream не создавая при этом на диске файл никак не могу придумать.
помогайте.. |
|
| В начало |
|
 |
|
|
 |
|
|
|
Цитата |
|
| Я думаю, что все-таки прийдется тебе вытащить этот файл, но после того, как поюзаешь, удалить к едрени фени. |
|
| В начало |
|
 |
 NikotiN
Розовый мамонт

Возраст: 26
Знак зодиака: 
Зарегистрирован: 18.03.2005
Сообщения: 2137
|
|
|
Цитата |
|
сохрани поток в файл, запусти, подожди пока закончится, удали.
есть оригинальный метод: ))))
запихнуть в память по адресу выполняемой инструкции твоей программы ))) или не твоей )) |
|
| В начало |
|
 |
 13-ый
Администратор

Возраст: 36
Знак зодиака: 
Зарегистрирован: 28.04.2002
Сообщения: 3551
Откуда: Москва
|
|
|
Цитата |
|
| Цитата: | есть оригинальный метод: ))))
запихнуть в память по адресу выполняемой инструкции твоей программы ))) или не твоей )) |
сымитировать взлом своей проги через переполнение буфера  _________________
http://fotki.yandex.ru/users/vladimir13
С уважением, 13-ый  |
|
| В начало |
|
 |
 Ktf
Администратор

Возраст: 32
Знак зодиака: 
Зарегистрирован: 15.05.2005
Сообщения: 1502
Откуда: localhost
|
|
|
Цитата |
|
в какой-то проге я видел очень странный прием защиты программы:
введенный пароль являлся частью исполняемого файла.
если быть точнее, он загружался в динамический байтовый массив, а потом осуществлялась передача управления по адресу массива (что-то типа jmp @bytearray).
если пароль неправильный, дальнейшее поведение проги было непредсказуемо  _________________ Пойду посплю перед сном. |
|
| В начало |
|
 |
DrPass
Знающий :) /Почетный Модератор/

Возраст: 31
Знак зодиака: 
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
|
|
|
Цитата |
|
Кстати, а CreateProcess сработает, если образ исполняемого файла лежит как memory-mapped? _________________ Да пребудет с вами Сила! |
|
| В начало |
|
 |
 NikotiN
Розовый мамонт

Возраст: 26
Знак зодиака: 
Зарегистрирован: 18.03.2005
Сообщения: 2137
|
|
|
Цитата |
|
| можно попробовать сделать ассемблерную вставку, в которой передавать управление памяти по определённому адресу (как раз jmp @bytearray) |
|
| В начало |
|
 |
DrPass
Знающий :) /Почетный Модератор/

Возраст: 31
Знак зодиака: 
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
|
|
|
Цитата |
|
| Цитата: | | можно попробовать сделать ассемблерную вставку, в которой передавать управление памяти по определённому адресу |
В винде? Это тебе надо сперва образ файла развернуть, пересчитать адреса, таблицы импорта... Нужно быть уж очень крутым и терпеливым кулхацкером для таких экспериментов _________________ Да пребудет с вами Сила! |
|
| В начало |
|
 |
 NikotiN
Розовый мамонт

Возраст: 26
Знак зодиака: 
Зарегистрирован: 18.03.2005
Сообщения: 2137
|
|
|
Цитата |
|
| есть же проги, их много и таблицу импорта делать, причём кажется легче именно разворачивать, чем упаковывать, и всё остальное, значит реализуемо. |
|
| В начало |
|
 |
|
|
 |
 Ktf
Администратор

Возраст: 32
Знак зодиака: 
Зарегистрирован: 15.05.2005
Сообщения: 1502
Откуда: localhost
|
|
|
Цитата |
|
| Цитата: | | Кстати, а CreateProcess сработает, если образ исполняемого файла лежит как memory-mapped? |
CreateProcess - нет, а вот CreateThread с этим запросто справится
| Цитата: | | надо сперва образ файла развернуть, пересчитать адреса, таблицы импорта... Нужно быть уж очень крутым и терпеливым кулхацкером для таких экспериментов |
не обязательно, изучаешь PE-формат - и вперед, к созданию упаковщиков, протекторов и прочей нечисти  _________________ Пойду посплю перед сном. |
|
| В начало |
|
 |
 Ktf
Администратор

Возраст: 32
Знак зодиака: 
Зарегистрирован: 15.05.2005
Сообщения: 1502
Откуда: localhost
|
|
|
Цитата |
|
вот, сваял специально для всех вас!
пример передачи управления коду, размещенному в байтовом массиве.
| Код: | procedure TForm1.Button1Click(Sender: TObject);
const
codemask: array [0..24] of byte =
($6a, $40, $68, $00, $00, $00, $00, $68, $00, $00, $00, $00,
$68, $00, $00, $00, $00, $B8, $00, $00, $00, $00, $ff, $d0, $c3);
msg: PChar = 'hello world';
cap: PChar = 'array call';
var
P: pointer;
code: array [0..24] of byte;
procedure WriteAddr(idx: integer; data: integer);
var
i: integer;
begin
for i:=0 to 3 do code[i+idx]:=byte(data shr (i shl 3));
end;
begin
CopyMemory(@code, @codemask, 25);
WriteAddr(3, integer(cap));
WriteAddr(8, integer(msg));
WriteAddr(13, handle);
WriteAddr(18, integer(@MessageBox));
p:=@code[0];
asm
mov eax, p
call eax
end;
end; |
_________________ Пойду посплю перед сном. |
|
| В начало |
|
 |
|
|
|
Цитата |
|
Хммм.... Я ещё не очень силён в Delphi ..
Приведённой функцией можно загружать из MemoryStream?
Если да, то как? |
|
| В начало |
|
 |
 Ktf
Администратор

Возраст: 32
Знак зодиака: 
Зарегистрирован: 15.05.2005
Сообщения: 1502
Откуда: localhost
|
|
|
Цитата |
|
| Цитата: | | Приведённой функцией можно загружать из MemoryStream? |
да нет, это скорее баловство с моей стороны, не воспринимай близко к сердцу...
а вообще мое мнение совпадает с мнением Gold_Dreamer-а.
чем изобретать способы запуска существующего только в памяти приложения, проще после извлечения сохранить его во временной папке, а оттуда уже запускать, ну и после завершения удалить.
инсталляторы почти все поголовно так делают. _________________ Пойду посплю перед сном. |
|
| В начало |
|
 |
|
|
|
Цитата |
|
ЭЭЭх... ладна СЕНКЮ!!!
Хороший у вас форум.. я тут задержусь     |
|
| В начало |
|
 |
|