![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Можно ли как нибудь из своей программы менять ее же exe? [D5, Win95/98, Win2k]
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 и код трюка выполнять
> из этого перехватчика
Согласен. Наилучший вариант, хоть и не самый простой.
Единственное, что может помешать - мультиэкземплярность процесса. Но и это в принципе решаемо.