Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Технологии
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 16.06.2009, 10:16
Аватар для march
march march вне форума
Начинающий
 
Регистрация: 04.05.2009
Сообщения: 110
Репутация: 18
По умолчанию Перекомпиляция программы самой себя

В общем, звиняйте если не в этот раздел, через поиск ниче не нашел, google, yandex, тоже ничевразумительного
Собственно вопрос:
Как можно сделать так, чтобы программа сама изменила свой исходный код(при том по-разному, в зависимости от определенных условий)?
З.Ы. рад любой информации(дополнительный компонент, ссылка на статью ит.п.)
Заранее благодарен.
Ответить с цитированием
  #2  
Старый 16.06.2009, 11:39
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Неее... если только компилятор в саму прогу зашить, а это такой гемор... не проще "в зависимости от определённых условий" выполнять разные варианты кода? А какой вариант определять при запуске.
Просто и логично.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #3  
Старый 16.06.2009, 12:01
Аватар для march
march march вне форума
Начинающий
 
Регистрация: 04.05.2009
Сообщения: 110
Репутация: 18
По умолчанию

Цитата:
Сообщение от DJ PhoeniX
не проще "в зависимости от определённых условий" выполнять разные варианты кода? А какой вариант определять при запуске.
Просто и логично.
до определнного момента так и делал, но обстоятельства и цели немного изменились, так что это уже не проходит
Цитата:
Сообщение от DJ PhoeniX
Неее... если только компилятор в саму прогу зашить, а это такой гемор...
вот поподробней на счет этого гемора и хотелось бы узнать
Ответить с цитированием
  #4  
Старый 16.06.2009, 14:53
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

1. Если интересует именно изменение логики работы, то тут тебе помогут скрипты. Есть много компонентов PASCAL-скриптов.
2. Если надо просто менять сам код, не меняя его сути (как полиморфные вирусы), то тут надо очень хорошо предсталять себе как устроен исполняемый файл изнутри. в принципе, есть заменяемые операторы (по смыслу). Например, mov ax,0 можно заменить на xor ax,ax смысл тот же, но код другой.
Ответить с цитированием
  #5  
Старый 16.06.2009, 15:09
Аватар для march
march march вне форума
Начинающий
 
Регистрация: 04.05.2009
Сообщения: 110
Репутация: 18
По умолчанию

надо поменять именно код, вот только проблема со знанием ассемблера(точнее с незнанием сего), вот и интересно нет никаких компонентов, упрощающих это дело?
Ответить с цитированием
  #6  
Старый 16.06.2009, 15:29
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Нет, таких компонентов нету. Вообще-то, полиморфный код используется всего в 2х видах программ: вирусы и протекторы. Сомневаюсь, что ты пишешь протектор...
Ответить с цитированием
  #7  
Старый 16.06.2009, 16:08
Аватар для march
march march вне форума
Начинающий
 
Регистрация: 04.05.2009
Сообщения: 110
Репутация: 18
По умолчанию

знать бы что такое протектор....
просто хочу на программу защиту поставить по принципу:
при первом запуске собирает инфу и перекомпилируется, отправляет что-то наподобие хеша себя на сервер; дальше перед запуском программа (уже перекомпилированная) отправляет запрос на этот сервер, сервер отвечает: "добро" или "нет", от этого зависит будет ли работать программа;
хранить значения где-нито на винте - опасно, в реестре тоже; так что без перекомпиляции думаю сложно обойтись;
то есть я так понял мне ассемблер надо изучать? или есть еще варианты
Ответить с цитированием
  #8  
Старый 16.06.2009, 16:42
Аватар для Vayrus
Vayrus Vayrus вне форума
Исполняемый Ретровирус
 
Регистрация: 09.08.2008
Адрес: Umbrella Corporation
Сообщения: 743
Репутация: 1293
Лампочка

Цитата:
Сообщение от lmikle
Нет, таких компонентов нету. Вообще-то, полиморфный код используется всего в 2х видах программ: вирусы и протекторы. Сомневаюсь, что ты пишешь протектор...

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

Последний раз редактировалось Vayrus, 16.06.2009 в 16:45.
Ответить с цитированием
  #9  
Старый 16.06.2009, 18:42
Аватар для march
march march вне форума
Начинающий
 
Регистрация: 04.05.2009
Сообщения: 110
Репутация: 18
По умолчанию

Vayrus, поподробней можно?
то есть сразу после последнего символа моей программы можно писать все что угодно? или как?
"перекомпилятор" - где его взять готовый (если переписывать ассемблерный код(самостоятельно), то это можно и не из ресурсов, а прямо в "теле" программы)
Ответить с цитированием
  #10  
Старый 16.06.2009, 19:09
Аватар для Vayrus
Vayrus Vayrus вне форума
Исполняемый Ретровирус
 
Регистрация: 09.08.2008
Адрес: Umbrella Corporation
Сообщения: 743
Репутация: 1293
Лампочка

Цитата:
Сообщение от march
Vayrus, поподробней можно?
то есть сразу после последнего символа моей программы можно писать все что угодно? или как?
"перекомпилятор" - где его взять готовый (если переписывать ассемблерный код(самостоятельно), то это можно и не из ресурсов, а прямо в "теле" программы)

Да, такой способ используют инсталляторы и, н-р, SFX RAR архив, который по сути состоит из программы и "приклеенного" сзади RAR архива. "Перекомпилятор" - этоя я имел ввиду образно программу, которая будет что то менять, н-р, в оверлее или тех же ресурсах, но ее не обяз-но распологать в ресурсах, можно просто положить рядом с основной прогой. А про все остальное прочитай описание формата PE. Кстати, здесь в исходниках есть то, что тебе нужно, вроде называется "Добавление текста к любым файлам", ну короче ищи, все есть.
Ответить с цитированием
  #11  
Старый 16.06.2009, 19:25
Аватар для march
march march вне форума
Начинающий
 
Регистрация: 04.05.2009
Сообщения: 110
Репутация: 18
По умолчанию

спасибо за инфу(реально просветил на счет добавления в конец файла)
но если кто найдет данный компонент тоже было бы неплохо , только любопытней стало
Ответить с цитированием
  #12  
Старый 08.12.2009, 10:14
Аватар для friz
friz friz вне форума
Местный
 
Регистрация: 04.04.2008
Адрес: Минск
Сообщения: 596
Версия Delphi: 2007 & JAVA EE
Репутация: 10670
По умолчанию

где-то слышал что язык Lisp имеет возможность переписывать свой код в процессе выполнения..но лично я не пробывал...

p.s. иногда проще сменить язык чем пытаться сделать все на одном
Ответить с цитированием
  #13  
Старый 08.12.2009, 12:56
Аватар для NIch
NIch NIch вне форума
Продвинутый
 
Регистрация: 02.06.2008
Адрес: Бендеры ПМР
Сообщения: 754
Репутация: 2446
По умолчанию

Есть компилируемые, а есть интерпретируемые языки...
http://www.softix.ru/yazyk/
Так вот лисп второй вариант...это фактически скрипт(сценарий)...
http://ru.wikipedia.org/wiki/Лисп
__________________
В начале был Бит, потом Байт и только потом появилось Слово...
Ответить с цитированием
  #14  
Старый 08.12.2009, 15:05
Аватар для Thrasher
Thrasher Thrasher вне форума
Illuminati
 
Регистрация: 06.03.2008
Адрес: Крым, г. Симферополь
Сообщения: 348
Репутация: 8808
По умолчанию

Цитата:
просто хочу на программу защиту поставить по принципу:
при первом запуске собирает инфу и перекомпилируется, отправляет что-то наподобие хеша себя на сервер; дальше перед запуском программа (уже перекомпилированная) отправляет запрос на этот сервер, сервер отвечает: "добро" или "нет", от этого зависит будет ли работать программа;

Если честно, то такой способ имеет следующие недостатки:
1. А если сеть пропадет? Что тогда скажет пользователь?
2. Такой тип защиты ломаеться в течении 15-180 минут (в зависимости от сложности). начиная, от того что проверка просто "глушиться", заканчивая написанием эмулятора сервера
3. А что если пользователь сменил компьютер или поменячл оборудование? Тогда программа тоже перестанет работать.

Как вариант предлагаю.

1. Использовать водяные знаки в программе (для каждого пользователя - свои). Тогда в случае сетевой лицензии тяжелее будет сделать эмулятор сервера лицензий. Проверка тогда будет идти как на сервере, так и в самой программе. Причем можно реализовать ее так, что она будет каждый раз разной.
2. На случай пропадания лицензии можно использовать 1-3 дневную лицензию, которая будет генерироваться сервером. Можно использовать принцип корешков (т.е. программа будет отмечать в этой лицензии количество произведенных запусков). Естествнно все будет зашифровано
3. Использовать для шифрования RSA . Все ключи для каждой копии - индивидуальны. Это поможет сформировать уникальную сетевую лицензию.
__________________
Хорошо написанная программа не требует документации
ICQ 9-184-668.
Ответить с цитированием
  #15  
Старый 08.12.2009, 16:27
Аватар для march
march march вне форума
Начинающий
 
Регистрация: 04.05.2009
Сообщения: 110
Репутация: 18
По умолчанию

актуальна только тема перекомпиляции и то, только из-за любопытства
Цитата:
1. А если сеть пропадет? Что тогда скажет пользователь?
3. А что если пользователь сменил компьютер или поменячл оборудование? Тогда программа тоже перестанет работать.
программа для одной фирмы: сама по себе пробная версия, время доработки самой программы я не знал, защита, как подстраховочный вариант для вознаграждения за работу
Цитата:
2. Такой тип защиты ломаеться в течении 15-180 минут (в зависимости от сложности). начиная, от того что проверка просто "глушиться", заканчивая написанием эмулятора сервера
на счет второго - да, уязвимость, а вот на счет первого: там проверку при огромном количестве событий стояла, все долго отлавливать надо: дешевле заново состряпать эту прогу


Цитата:
водяные знаки
попдробнее где об этом почитать?
Цитата:
2. На случай пропадания лицензии можно использовать 1-3 дневную лицензию, которая будет генерироваться сервером. Можно использовать принцип корешков (т.е. программа будет отмечать в этой лицензии количество произведенных запусков). Естествнно все будет зашифровано
ну, все что зашифровано можно расшифровать
корешки хранить в реестре или где-либо на винте - не вариант, так что тут тоже уязвимость;
а так, Thrasher, спасибо за содействие

скрипты, отпадают сразу из-за мильена недостатков (обязательность интерпритатора, открытостью скрипта и т.д. и т.п.)
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:40.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter