Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Можно ли как нибудь из своей программы менять ее же exe? [D5, Win95/98, Win2k]


Страницы:   1 2

TankMan ©   (2002-11-25 21:22:00) 

У меня проблема, нужно записать из самой программы в момент ее работы, строку в ехе файл, ее же самой, может, это как-то возможно? Ведь программа, насколько я знаю, всеравно все в память загружается, и что мешает мне ее исправить? Вообщем может подскажет кто, как это можно реализовать (елси возможно)?


Набережных С.   (2003-01-16 17:48:00) [1]

>Dr.Dron (16.01.03 09:12)
Есть пища для размышлений?

Не особенно. С дискеты файл копируется в файл подкачки и уже оттуда запускается. Попробуй:
Вставь дискету, запусти с нее приложение, закрой его, снова запусти. Есть разница?


Anatoly Podgoretsky   (2003-01-16 16:19:00) [2]

Dr.Dron (16.01.03 09:12)
Есть теперь попробуй его поменять, конечно не вынимая дискету и не перенося ее на другой компьютер.


ZeroDivide   (2003-01-16 16:14:00) [3]

Вообще говоря я написал это в "потрепаться", но думаю что ошибся
http://www.delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1042213825&n=3


Dr.Dron   (2003-01-16 09:12:00) [4]

Вставили дискетку с программой, запустили...
и вынули дискетку... программа работает...
т.е. файл на диске ей уже не требуется.
(Во временный каталог она не копируется проверял)
Есть пища для размышлений?


ION T   (2002-12-27 11:29:00) [5]

/А мне как раз и нужно, чтобы была универсальноесть - т.е. работала и под 9x и под NT... и всетаки... что нет тут специалистов по
хукам?/
говорили, балакали - сіли й заплакали:)

ЗЫ: почему под Мозиллой не пашут кнопочки справа?


TankMan   (2002-12-27 05:52:00) [6]

А мне как раз и нужно, чтобы была универсальноесть - т.е. работала и под 9x и под NT... и всетаки... что нет тут специалистов по хукам? Или они все настолько ленивые, что не могут помочь человеку?... или занятЫе?


[NIKEL]   (2002-12-22 23:11:00) [7]

не ну на самом деле, если надо, то под NT можно править свои же ресурсы BeginUpdateRecource, UpdateRecource, EndUpdateRecource
и все! под 9х такое не прокатит (с этими функциями) но там можно по другому - смотреть на planet-source-code.com


Карлсон   (2002-12-22 22:43:00) [8]

а зачем собственно обходиться без файла?
неужели в Worms Armageddon никто не играл?
вот там сведения о командах хранятся в отдельном файле.
если его просто переписать, из папки в папку, а потом обратно, то все настройки с командами собьются.
а дело все в том, что, как мне кажется, программа проверяет дату последнего изменения файла.
если она не такая, какая нужна, то прога отказывается работать.
а запись о дате изменения, можно вносить в реестр в зашифрованном виде.


FUF   (2002-12-22 21:26:00) [9]

Можно создать вторую программу, которая открывает изменённую программу и забивает её предыдущую версию...


Zmey_Gorinich   (2002-12-20 19:39:00) [10]

Предлагаю воспользоваться функциями для работы с ресурсами. В NT возможно редактировать собственные ресурсы.(если я не ошибаюсь.. я такое делал года 4 назад).


TankMan   (2002-12-13 23:51:00) [11]

>>paul_shmakov
Я думал над этим воросом... отдельный файл можно удалить... зашифровать его не проблема, расшифровать ОЧЕНЬ большая проблема, но вот его можно просто удалить... и списать если что на случайность.... а вот с данными зашифрованными в самом ехе, так не поступишь...я ж не просто так спрашиваю...


paul_shmakov   (2002-12-10 14:52:00) [12]

2 TankMan:
"метод защиты от перенастройки, другими людьми..."
храните свои настройки в зашифрованном виде в отдельном файле или в реестре.


TankMan   (2002-12-09 20:31:00) [13]

Зачем это нужно? вобщем прочитай мой первый вопрос, как можно изменить свой же ехе из самого себя... мне это нужно, чтобы записывать туда определенные параметры - метод защиты от перенастройки, другими людьми...не получающими доступ к настройкам через саму программу.


alex134   (2002-12-09 18:02:00) [14]

Поведай нам зачем это нужно ?


TankMan   (2002-12-09 14:28:00) [15]

Так никто мне ничем не поможет (в плане примера)?


paul_shmakov   (2002-12-04 14:41:00) [16]

2 TankMan:
это вполне реальное решение, практически идеинтично пункту 3) в моем предыдущем постинге. тот пункт, правда, лучше. по той причине, что временный файл удаляется сразу после удаления основного, а вот dll удалится только тогда, когда она из всех процессов выгрузится.

2 Fantasist:
"Ага. Интересно. Но вот мне известно утверждение, что система при нехватке памяти выгружает код неиспользуеммых процессов, а потом, при необходимости, снова его подгружает с диска. И что, система не рушиться?"

все верно, система по своему усмотрению свопит содержимое оперативной памяти в файл подкачки. (правда, с модулями (exe, dll и т.д.) она поступает несколько иначе - в качестве файла подкачки используется файл этого модуля [конечно при условии, что вы не правили в рантайме код этого модуля - тогда эти изменения будут скидываться в общий файл подкачки]).
но нас все это не волнует абсолютно! :) это внутренние механизмы операционной системы работы с памятью. и это никак не сказывается на том, о чем мы говорим.
мы систему нигде не обманываем - мы явно с помощью winapi выгружаем модуль.

"> все оказалось просто - его значение под nt/2k всегда равно
> 4
Обалдеть! :) И как это, интересно, выяснилось?"


ну автора этой информации я сейчас не смогу назвать - не помню. но можно и самостоятельно этот факт отследить - скачайте processexplorer от Марка Руссиновича (www.sysinternals.com), посмотрите у всех процессов список хэндлов. и увидите, что с номером 4 всегда section (memory mapped file) с типом IMAGE и размером, равным размеру образа из PE-заголовка. можно сделать некоторые выводы, которые подтверждаются тестовыми приложениями.


Fantasist   (2002-12-04 07:16:00) [17]


> хмм.. лучше было бы конечно ту ветку найти


Не находиться она, к большому сожалению. Или ее где-то в архивах надо рыть?


> файл освободится. т.е. файл можно будет удалить.


Ага. Интересно. Но вот мне известно утверждение, что система при нехватке памяти выгружает код неиспользуеммых процессов, а потом, при необходимости, снова его подгружает с диска. И что, система не рушиться?



> все оказалось просто - его значение под nt/2k всегда равно
> 4


Обалдеть! :) И как это, интересно, выяснилось?


TankMan   (2002-12-04 01:41:00) [18]

Ох ёё! У меня вот такая идея есть.. (вобщем я не сильно в хуках разбираюсь, точнее не разбираюсь вовсе.. так немного понимаю), ну вобщем идея такая... программка, в ней в ресурсах есть длл-ка, ее при запуске разжимаем и устанавливаем хук (т.е. в ней все функции реализованы), программка работает, хук тоже, и заодно проверяет, не завершилась ли программка, и если завершилась, удаляет ее, и выгружается сам... возможно такое, и если да... то примерчика не найдется или советы хоть какие нибудь? (я просто выдвинул теорию - с моей точки зрения (с учетом той инфы, что я знаю) - это возможно, но как реализовать на Дельфи, не знаю :( )


paul_shmakov   (2002-12-03 14:58:00) [19]

2 TankMan:
"Так всетаки можно его удалить или нет?"
а то как же!

"Я той ветки, про которую вы говорите, не видел, и не в курсе тех разговоров...насколько я понял из текста, если решили вопрос о закрытии mmf, то значит и файл можно удалить, может кто пример покажет, или всетаки тогда не только эта проблема была?"
у меня той ветки тоже не сохранилось.. но пример этого кода можно найти без проблем - это ни какой-нить секрет.
на самом деле, вариантов самоудаления (без необходимости перезагрузки) достаточно много.
1) этот вариант (под xp не работает)
2) создавать и запускать bat-файл, который удаляет exe-шник после завершения процесса
3) копировать свой же exe-шник во временный файл, открывать этот файл с флагом FILE_FLAG_DELETE_ON_CLOSE (что удалит этот файл после его закрытия) и доступом FILE_SHARE_READ, потом запускать процесс из этого временного файла, сообщая ему через командную строку, что его задача - удаление первого экземпляра. после этого первый экземпляр завершается; второй ждет завершения первого и удаляет его файл. после этого завершается сам, а операционная система определив, что все ссылки на файл закрыты удаляет и его файл.
4) и т.п.


Digitman   (2002-12-03 11:04:00) [20]

>paul_shmakov


> осуществлять перехват вызова ExitProcess и код трюка выполнять
> из этого перехватчика


Согласен. Наилучший вариант, хоть и не самый простой.
Единственное, что может помешать - мультиэкземплярность процесса. Но и это в принципе решаемо.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо