| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Как загрузить форму из памяти |
| Автор: Monty 24.10.2003, 19:15 |
| На это меня натолкнула одна статья по защите программ http://www.delphikingdom.com/mastering/safe/add.htm О защите: я пытался затирать адреса из готовой программы .... тем самым программа умирала .... и переименовывать тоже нельзя! .... Единственно что я добился, это то что DeDe (Дельфи Декомпилер), не может "разковырять" программу из памяти |
| Автор: <Spawn> 25.10.2003, 10:50 |
| Monty А если сохранить расшифрованый exe где нить в директории винды и оттуда запустить? Конечно это можно обнаружить, но я думаю вряд ли тебе удасться написать загрузчик для твоей задачи. |
| Автор: Monty 25.10.2003, 11:59 |
| Да нет, мне всего лишь надо запустить форму из DFM ...... я знаю что так можно Шифруются _только_ формы и их надо загружать самому (как-то), но уже расшифрованые! Есть ли в природе функция похожия на CreateFormFromStream ? |
| Автор: Dmitry V.Abramov 25.10.2003, 15:48 | ||
Monty DFM - это результат сохранения TForm. TForm - наследник TComponent. TComponent умел сохраняться и восстанавливаться в поток еще в Delphi1.
Примеры есть в самом TForm.pas или в Classes.pas в классах TWriter/TReader. |
| Автор: Monty 25.10.2003, 16:11 |
| Dmitry V.Abramov тогда я могу обойтись этими функциями? т.е. этой ReadComponentRes |
| Автор: Monty 25.10.2003, 16:27 |
| Не выходит ..... можно скромный пример? |
| Автор: Dmitry V.Abramov 25.10.2003, 19:33 |
| Monty Так ведь привел бы свой "не выходимый"... - стало бы понятно, куда у тебя мысли думают. И писать, опять же, меньше бы пришлось... |
| Автор: Monty 25.10.2003, 23:40 | ||
Dmitry V.Abramov
Как то так |
| Автор: Monty 25.10.2003, 23:45 |
| Ааа ...... точно! Не правильно! |
| Автор: Dmitry V.Abramov 26.10.2003, 01:55 |
| Monty Правильно что неправильно |
| Автор: Monty 26.10.2003, 18:11 | ||
Dmitry V.Abramov Проблема была в том что у новых версий дельфей новый формат DFM, а для ReadComponentRes() нужен старый
|
| Автор: Monty 26.10.2003, 18:16 |
| А такой вопрос |
| Автор: Monty 26.10.2003, 18:28 | ||||||
Я опять ошибся
|
| Автор: Dmitry V.Abramov 26.10.2003, 18:51 |
| Monty Да. В CreateForm. Там же видно, что конкретно загрузкой из ресурса заведует InternalReadComponentRes. Зашифрованные dfm'ы он не загрузит. А зачем? Пусть грузит обычные, но НЕ ТЕ, что ты будешь использовать в дальнейшем. Ты же, прежде чем начать работу, прибьешь изначально груженные формы и переоткроешь на их месте свои (зашифрованные). На 80% нынешних мега-кул-ксацкепов этого должно хватить. |
| Автор: Monty 26.10.2003, 21:01 | ||
Dmitry V.Abramov понятно
Unit2a.dfm это форма с Edit'om ...... если на Form2 нет этого компонента, то программа ругается что "Class TEdit not found" ....... как это можно решить? Так как я хочу в _пустую_ форму загрузить зашифрованую с кучей компонентов Многие кулхацкеры так и ломают, грузят ДеДе смотрят адрес Кнопки REGISTER и меняют джамп Интересно будет увидеть лицо того кто в ДеДе не увидет ни одной формы |
| Автор: Dmitry V.Abramov 26.10.2003, 21:34 |
| Monty А вот это уже из другой оперы - из Runtime Form Designing... Сразбегу не готов ничего путного советовать. Но уверен, что все ответы можно найти в ($DELPHI)\Source\Rtl По поводу отсутствия форм вообще - это сразу натолкнет на мысль о другом методе хрюка - bpx CreateDialogParam и идти на последний адрес в стеке. Вот когда в .exe наличествует (якобы) интересующая форма и кнопке прописан OnClick event и по этому адресу вычисляется нечто жуткое, то гарантировано энное время на осознание того, что это "фальшивка". И есть шанс, что это осознание так и не придет. |
| Автор: Monty 26.10.2003, 23:10 |
| Dmitry V.Abramov я придумал, а что если убрать все события присвоенные элементам в "доступной формы" Я еще знаю что DeDe умеет находит *.PAS модули и дизассамблировать |
| Автор: Monty 27.10.2003, 05:06 |
| Прятанье формы БЕСПОЛЕЗНО! Еще раз почитаю статью про то как работает DeDE http://xtin.km.ru/view.shtml?id=123 ..... и надо что то придумать .... т.к. он находит имена и адрес всех процедур! |
| Автор: <Spawn> 27.10.2003, 08:16 |
| Monty Не можешь кинуть пожалста етот DEDE, т.к. в ближайшем будущем я думаю начаьб проект, в котором нужно будет делать какую то защиту. Тож не помешало бы поэксперементировать. |
| Автор: Dmitry V.Abramov 27.10.2003, 10:52 | ||
Перестал что-либо понимать... Только что обсуждали, что спрятать форму очень даже полезно... Все имена и адреса он найти либо не может, либо он стал умнее чем IDA. Второе маловероятно. Принципиально не должны находиться имена процедур (не методов!) в секции implementation (не объявленные в interface). А если немного постараться, то и сам код процедур не найдет. Где хостится этот DeDE? Уже любопытно стало... |
| Автор: Dmitry V.Abramov 27.10.2003, 11:03 | ||
Интереса ради - проверь, сколько процедур он найдет вот в этом:
Накорябано наспех и неряшливо. Главное что работает и выдает в конце строчку 'DeDE?'. А вот видит ли ДеДЕ процедуру print2 ? |
| Автор: Monty 27.10.2003, 11:57 |
| Этим {$APPTYPE CONSOLE} все сказано только оконные Вот сам виновник всего происходящего здесь http://m0nty.nm.ru/soft/DeDe%20v3.5/DeDe.3.50.03.1625.exe.only.rar ....... разберитесь с ним |
| Автор: Monty 27.10.2003, 12:04 |
Dmitry V.Abramov вот что он нашел![]() Но я сразу скажу что толком им пользоваться не умею |
| Автор: Dmitry V.Abramov 28.10.2003, 20:14 | ||||||
Что именно этим сказано? Для доказательства нераспознования обычных процедур этого примера предостаточно. И это все, что он должен был сказать... Нужны окна? Убери {$APPTYPE CONSOLE} и замени writeln() на ShowMessage.
Похоже, что у нас проблемы с терминологией... Ты оставил процедуру или метод ? Оставил в юните или в реализации класса? Я тебе об использовании процедур для "скрытности", ты мне об открытости всех методов формы... Нашел метод-обработчик, оставленный в published секции и обложенный всей возможной RTTI??? Потрясающая наглость с его стороны...
Он читает RTTI и добросовестно пользуется тем, о чем ты сам ему подробно рассказываешь, порождая потомков от TPersistent. Не хочешь никому ничего рассказывать? Не наследуйся от TPersistent и не используй {$M+} |
| Автор: Dmitry V.Abramov 28.10.2003, 20:33 | ||||
Картинка, увы, говорит лишь, что судя по великоватым адресам, ты пользуешься D7. Скачал DeDE. Добротное изделие. Далеко ушло от CodeRevenger'a с которого начиналось... От superbred он грохнулся с окошком "Stream Error". У меня D6. Если убрать
Сдается мне, что именно это и предполагалось, рассказывалось и показывалось примером. |
| Автор: Monty 28.10.2003, 22:58 |
| Dmitry V.Abramov спасибо |