Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.11;
Скачать: CL | DM;

Вниз

Хранение данных в 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;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.053 c
3-1087390988
1008
2004-06-16 17:03
2004.07.11
Проверка возможности подключения и наличия базы.


3-1086944771
Manfred8
2004-06-11 13:06
2004.07.11
Вопрос по Sql


14-1087980688
miwa
2004-06-23 12:51
2004.07.11
Links (FreeBSD-port) поддержывает coocies?


1-1088599378
Provodnick
2004-06-30 16:42
2004.07.11
PasteExcelTable не работает в Word


1-1088351380
tytus
2004-06-27 19:49
2004.07.11
TEdit