Форум: "Основная";
Текущий архив: 2004.07.11;
Скачать: [xml.tar.bz2];
ВнизХранение данных в EXE... Найти похожие ветки
← →
MetalFan © (2004-06-23 17:01) [0]как можно читать/писать в ресурс EXE файла.
сочиняю нечто типа SFX архива.
подскажите, в какую сторону двигаться?!
спасибо за внимание!
← →
wicked © (2004-06-23 17:05) [1]BeginUpdateResource/UpdateResource/EndUpdateResource...
но работает тока на NT...
или как вариант - дописывать с сигнатурой в конец екзешника - сигнатура, потом данные и служ. инфо (размер всего, размер ориг екзешника и размер данных).... служебная информация нужна для проверки целостности и для корректного извлечения данных из файла...
← →
MetalFan © (2004-06-23 17:07) [2]
> дописывать с сигнатурой в конец екзешника
а пример можно где-нибудь подсмотреть?
← →
evvcom © (2004-06-23 17:09) [3]
> сочиняю нечто типа SFX архива
Значит exe будешь формировать "с нуля"? Тогда ищи формат исполняемых файлов (формат PE).
← →
MetalFan © (2004-06-23 17:18) [4]
> Значит exe будешь формировать "с нуля"?
ну не так сложно...
мысль двигается так: пишется некий екзешник-обертка, который будет уметь "извлекать" из себя хранимый exeшник, запускать его, ждать закрытия и прибиваться) а другая прога должна будет уметь "засунуть" любой файл в "обертку". воть)
какие будут советы?
← →
wicked © (2004-06-23 17:23) [5]пример на cbuilder"е....
запись:bool __fastcall MergeStreams(TStream * deststream, TStream * exestream, TStream * albumstream)
{
int albumsize = albumstream->Size;
bool result = true;
try{
deststream->CopyFrom(exestream, 0);
deststream->CopyFrom(albumstream, albumsize);
MergeStreamsData(deststream, exestream->Size, albumstream->Size);
}
catch(...){
result = false;
}
return result;
}
bool __fastcall MergeStreamsData(TStream * deststream, int exesize, int albumsize)
{
int totalsize = exesize + albumsize + sizeof(int) * 3;
bool result = true;
try{
deststream->Write(&totalsize, sizeof(int));
deststream->Write(&exesize, sizeof(int));
deststream->Write(&albumsize, sizeof(int));
}
catch(...){
result = false;
}
return result;
}
здесь MergeStreams соединяет два потока, а MergeStreamsData - дописывает нужную информацию в конец файла...
проверка правильности потока (возвращает размер присоединенных данных):int __fastcall EXEValidStream(TStream * stream)
{
int totalsize = 0, exesize = 0, albumsize = -1;
int orgpos = stream->Position;
try{
int pos = stream->Seek(-((signed int)(sizeof(int)*3)), soFromEnd);
stream->Read(&totalsize, sizeof(int));
stream->Read(&exesize, sizeof(int));
stream->Read(&albumsize, sizeof(int));
if(totalsize != (exesize + albumsize + ((signed int)sizeof(int) * 3)))
albumsize = -1;
else {
pos -= albumsize;
stream->Position = pos;
// тут начинается проверка сигнатуры, skipped....
}
}
catch(...){
albumsize = -1;
}
stream->Position = orgpos;
return albumsize;
}
чтение данных:TCustomMemoryStream * __fastcall GetAlbumStream(TCustomMemoryStream * stream)
{
if(!stream) return NULL;
int albumsize = EXEValidStream(stream);
TCustomMemoryStream * result = NULL;
try{
if(albumsize < 0) result = stream;
else {
void * start = ((char *)stream->Memory) + ((int)stream->Size - (albumsize + (sizeof(int) * 3)));
result = new TwacROMemoryStream(start, albumsize);
}
}
catch(...){
if(result != stream){
delete result;
}
result = NULL;
}
return result;
}
здесь TwacROMemoryStream - read-only поток в памяти с адресом start и размером albumsize....
во всех примерах читать album, как "данные".... ;)
← →
MetalFan © (2004-06-23 17:28) [6]
> wicked © (23.06.04 17:23) [5]
big thnx! буду разбираться!
← →
MetalFan © (2004-06-23 17:46) [7]а вот еще вопросик!
можно ли запустить EXE на выполнение не сохраняя его на диске?
типа вытащили "засунутуй" exe (например в memorystream)и сразу запустили...
← →
8ung (2004-06-23 20:17) [8]
> MetalFan © (23.06.04 17:46) [7]
> а вот еще вопросик!
> можно ли запустить EXE на выполнение не сохраняя его на
> диске?
> типа вытащили "засунутуй" exe (например в memorystream)и
> сразу запустили...
Теоретически(скорей всего и практически) невозможно, я тоже хоте добиться этого(и, кажись, даже знаю, зачем тебе это)
← →
Anatoly Podgoretsky © (2004-06-23 20:46) [9]SFX архив можно делать ничего не зная про ЕХЕ, если записывать архив в конец заранее заготовленного ЕХЕ
← →
Dimaxx (2004-06-23 22:51) [10]Толян опередил! Запущенный экзешник мона запросто открыть через TFileStream и читать из него что угодно.
← →
MetalFan © (2004-06-24 11:07) [11]
> ...кажись, даже знаю, зачем тебе это
и зачем? )))
> Запущенный экзешник мона запросто открыть через TFileStream
> и читать из него что угодно.
читать то не проблема... а как запустить сразу на выполнение приаттаченый EXEшник... чтобы нельзя его было запускать извне)
вот в чем вопрос!
← →
evvcom © (2004-06-24 12:53) [12]
> а как запустить сразу на выполнение приаттаченый EXEшник...
> чтобы нельзя его было запускать извне)
Записываешь его на диск и запускаешь как дочерний процесс. Как только дочерний завершает свою работу, сразу его удаляешь. Чтобы нельзя было извне запустить вторую копию, делаешь в нем анализ на уже запущенную копию. Как? Примеров в сети - море.
← →
MetalFan © (2004-06-24 14:22) [13]
> evvcom © (24.06.04 12:53) [12]
но тогда отследить и скопировать в другое место записанный на диск ЕХЕшник можно будет(
и еще, как создать дочюпроцесс? CreateProcess ?
← →
Digitman © (2004-06-24 14:24) [14]
> MetalFan © (24.06.04 11:07) [11]
> а как запустить сразу на выполнение приаттаченый EXEшник...
> чтобы нельзя его было запускать извне)
> вот в чем вопрос!
пошевели малясь мозгами-то ... ресурсы-то свои ГДЕ будет искать тот процесс, который ты умудрился запустить "из памяти" ?
← →
evvcom © (2004-06-24 14:59) [15]
> но тогда отследить и скопировать в другое место записанный
> на диск ЕХЕшник можно будет
Блин, ну что за мания преследования какая-то? От кого все так хотят бесследно спрятаться? Ну запишешь куда-нибудь в temp-папку этот exe, ну отследит его хакер и скопирует куда-нибудь, в чем проблемы? Как ты не ухищряйся, все равно опытный хакер выдернет в конце концов из ресурсов твой exe и запишет на диск.
Чтобы этот (дочерний) exe не запускался без родителя, тоже можно сделать. Идея аналогична обнаружению запущенной копии программы, только в случае обнаружения копии второй не запускается, а здесь не запускается в случае необнаружения первичного exe. Всего делов-то...
← →
MetalFan © (2004-06-24 15:07) [16]
> Digitman © (24.06.04 14:24) [14]
пошевелил... значит надо как-то запретить его копировать... чтоли
← →
MetalFan © (2004-06-24 15:09) [17]
> Чтобы этот (дочерний) exe не запускался без родителя, тоже
> можно сделать. Идея аналогична обнаружению запущенной копии
> программы, только в случае обнаружения копии второй не запускается,
> а здесь не запускается в случае необнаружения первичного
> exe. Всего делов-то...
а дело то вот в чем) дочерний ЕХЕ может быть абсолютно сторонний... не имеющий ко мне отношения)
← →
evvcom © (2004-06-24 15:23) [18]
> дочерний ЕХЕ может быть абсолютно сторонний... не имеющий
> ко мне отношения
Тогда укажи мне хоть одну причину, по которой его надо так "хорошо" запрятать? И если этот сторонний exe стал доступен тебе, то почему он не может быть доступен кому бы то еще?
Честно сказать, не тем делом Вы занялись, молодой человек. ИМХО.
← →
RagE © (2004-06-24 15:28) [19]Читаю вот тут и вжиу что многие из вас заблуждаются. Начинаю рассказывать.
2 Bung
>Теоретически(скорей всего и практически) невозможно
Все возможно я как раз такой проект делаю. И скажу тебе запускаются файлы. Пока правда не все.
2 Digitman
>пошевели малясь мозгами-то ... ресурсы-то свои ГДЕ будет искать >тот процесс, который ты умудрился запустить "из памяти" ?
Вот как раз в памяти он их и будет искать. Перед запускам весь образ исполняемого файла помещается в память в том числе и ресурсы.
Опять же те проги которые мне удалось пока запустить на ресурсы не жаловались.
2 evvcom
Согласен что кто очень сильно захочет все равно выдернет, но если файл предварительно зашифровать то задача ему усложнится существенно.
Вобщем все это возможно вопрос только в том насколько действительно это требуется. Цель должна окупать свои средства.
← →
MetalFan © (2004-06-24 15:42) [20]
> RagE © (24.06.04 15:28) [19]
...И скажу тебе запускаются файлы...
эт конечно наглость... но не поделитесь ли опытом? ))
← →
Digitman © (2004-06-24 16:36) [21]
> MetalFan © (24.06.04 15:07) [16]
> пошевелил... значит надо как-то запретить его копировать...
> чтоли
плохо пошевелил
любой неявный loadresource-вызов требует хэндл модуля
хэндла модуля у тебя нет. ибо не грузил ты его из файла
← →
MetalFan © (2004-06-24 19:00) [22]
> любой неявный loadresource-вызов требует хэндл модуля
> хэндла модуля у тебя нет. ибо не грузил ты его из файла
ну а если "выгружать" его во временный файл, то как можно запретить его куда-нибудь содрать? )
← →
ПсихЪ_клон (2004-06-25 00:20) [23]Рой где-то в области своей ОС. В настройка ОСи сделай эту опцию и тогда ни один злобный хакер не скопирует твою мега-секретную прогу!!!
(ибо не будет ставить твою глупую ОС)
(:
← →
Digitman © (2004-06-25 08:17) [24]
> MetalFan © (24.06.04 19:00) [22]
> ну а если "выгружать" его во временный файл, то как можно
> запретить его куда-нибудь содрать? )
это совершенно иной вопрос, никак не связанный с сабжем
← →
MetalFan © (2004-06-25 10:21) [25]
> это совершенно иной вопрос, никак не связанный с сабжем
мысль понял)
← →
RagE © (2004-06-30 13:14) [26]2 MetalFan
Отчего ж не поделится опытом. Поделюсь. На данный момент вот что делаю.
Считываю заголовок.
Размещаю секции и устанавливаю соответствующие права.
Гружу необходимые длл и настраиваю Таблицу импорта.
При необходимости использую Relocation Table.
Далее идет запуск. Запуск начал осуществлять путем замещения своего процесса запускаемым. 99% запускаемых программ вылетают с ошибкой. В основном на попытках обратиться к стеку. Есть подозрения что стек надо устанавливать новый. Может подскажите как и что делается. Также не используется вовсе TLS. Вобщем еще кучу всего делать но ощущается нехватка информации.
← →
wicked © (2004-06-30 13:58) [27]гых... пишем вирус всем форумом...
для сфх достаточно тока склеивания данных с готовым екзешником и выделения этих же данных из него...
← →
RagE © (2004-06-30 14:21) [28]2 wicked
С тобой согласен. Хотя в моем случае это кусок протекта файлов но как подумаю что можно с такой функцией потом делать аж мурашки по коже бегут.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.07.11;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.033 c