Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-1088357174
Sphinx
2004-06-27 21:26
2004.07.11
Объеденение текста в RichEdit


1-1087995815
BFG9k
2004-06-23 17:03
2004.07.11
Не работает метод broadcast


14-1088116517
Феликс
2004-06-25 02:35
2004.07.11
Тест с картинкой


3-1087119568
Axelrodm
2004-06-13 13:39
2004.07.11
Чтение курсора (c BLOB )из Хранимой процедуры ORACLE в BDE


1-1087842373
Mishenka
2004-06-21 22:26
2004.07.11
Как сделать в MainMenu чтобы кнопка Help была всегда справа?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский