![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Кто нибудь может объяснить как можно на Delphi сделать программу которая склеивает два файла чтоб при запуске запускались оба? (С помощью Blockread и Blockwrite не получается т.к. запускается только один файл.Может что-то стоит добавить или исправить или удалить, вот исходник:
![]() Код:
AssignFile(f,'C:\1.exe');{Первый файл} AssignFile(f2,'C:\finally.exe'); {Исходный, склеинный первый и второй} Reset(f,1); Rewrite(f2,1); while not eof(f) do begin BlockRead(f,buf,sizeof(buf),done); BlockWrite(f2,buf,done); Application.ProcessMessages; end; CloseFile(f); AssignFile(f,'C:\2.exe');{Второй файл} Reset(f,1); done:=FileSize(f); BlockWrite(f2,done,4); while not eof(f) do begin BlockRead(f,buf,sizeof(buf),done); BlockWrite(f2,buf,done); Application.ProcessMessages; end; CloseFile(f); CloseFile(f2); DroNNN: Ясно! Последний раз редактировалось DroNNN, 20.06.2008 в 20:09. |
#2
|
|||
|
|||
![]() У каждого исполняемого файла есть так называемая "точка входа", команды процессору, с которых начанается выполнение программы. "Склеенные" вместе два приложения все равно будут иметь только одну такую "точку входа".
Вход во второе прицепленное следом приложение будет просто скрыто и вторая программа никогда не запуститься, какие бы усилия не предпринимать в этом направлении. Можно представить такое следующим образом. На Delphi делается небольшая программа (консольное приложение), которая будет запускать сначала одно приложение, затем другое. Выглядеть это будет так, как будто программы запустились одновременно. На последнем этапе (если так надо) "склеить" все три приложения, первым из которых будет этот "запускатель" на Delphi. Но простая "склейка" здесь не пройдет - "запускателю" надо знать какое смещение (начало приложения) в едином файле имеет первая программа и какое вторая. Не забывайте делать резервные копии Последний раз редактировалось san-46, 21.06.2008 в 11:44. |
#3
|
||||
|
||||
![]() Используй джойнеры (Joiners). Только есть одна проблема джойнеров не выносят антивирусы, ибо очень часто джойнеры используют для протаскивания троянов. Можно написать свой джойнер. Если файлы можно подсоединять во время компиляции, то можно прятать в ресурсы.
Хорошо написанная программа не требует документации ICQ 9-184-668. |
#4
|
|||
|
|||
![]() Есть написаный мною джоинер, можно, что вложеные файлы запускались или в реестр в авторан писались.........
Могу выложить.......... |
#5
|
|||
|
|||
![]() Код:
VaZoNeZ Есть желание, но нет учителя, есть мотивация, но нет концентрации, есть голова, но нет девушки программистки |
#6
|
|||
|
|||
![]() имхо можно организовать через ресурсы данное
|
#7
|
||||
|
||||
![]() VaZoNeZ, интересно глянуть, давай ссыль
![]() А в инете джойнеров много, шифруй и палится не будет. |
#8
|
||||
|
||||
![]() Я лично проверял несколько джойнеров, все они были с подвохом, а некоторые еще и своего трояна к склееным файлам добавляли. Джойнер PEGlue32 зачем-то скопировался в папку Windows (!) и стал скрытым. Я нашел его поиском. А другие джойнеры сидели в процессах после перезагрузки.
Лучше свою прогу для склейки написать. Я тоже над этим думаю. Пиши на donetskrus@mail.ru |
#9
|
||||
|
||||
![]() Чтобы склеить 2 ехе надо:
1. Добавить к первому или второму ехе секцию. 2. Тупо слепить их в одну екзешку. 3. Поставить точку входа на добавленную секцию. 4. В секцию дописать код запуска 2-ух exe. Я выкладывал исходник добавления к ехе секции с формированием в ней кода установки пароля (pe-exe-coder) его можно легко переделать под слепливатель. |
#10
|
|||
|
|||
![]() Код:
AssignFile(F1,'1.exe');AssignFile(F2,'2.exe');Assignfile(FOut,'3.exe'); Reset(F1,1);Reset(F2,1);Rewrite(FOut,1);Count:=FileSize(F1); GetMem(Buf,Count);ZeroMemory(Buf,Count);BlockRead(F1,Buf^,Count); BlockWrite(FOut,Buf^,Count);CloseFile(F1);FreeMem(Buf); Count:=FileSize(F2);GetMem(Buf,Count);ZeroMemory(Buf,Count); BlockRead(F2,Buf^,Count);BlockWrite(FOut,Buf^,Count);CloseFile(F2); FreeMem(Buf);CloseFile(FOut); Цитата:
![]() они тебе не скажут т.к не знаю. ![]() |
#11
|
|||
|
|||
![]() По моему все можно сделать проще: Просто упаковать оба эксэшника, только в коде распаковщика указать, чтоб каждый распакованый файл удалялся после закрытия...
|