![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
В общем, звиняйте если не в этот раздел, через поиск ниче не нашел, google, yandex, тоже ничевразумительного
Собственно вопрос: Как можно сделать так, чтобы программа сама изменила свой исходный код(при том по-разному, в зависимости от определенных условий)? З.Ы. рад любой информации(дополнительный компонент, ссылка на статью ит.п.) Заранее благодарен. |
|
#2
|
||||
|
||||
|
Неее... если только компилятор в саму прогу зашить, а это такой гемор... не проще "в зависимости от определённых условий" выполнять разные варианты кода? А какой вариант определять при запуске.
Просто и логично. |
|
#3
|
||||
|
||||
|
Цитата:
Цитата:
![]() |
|
#4
|
|||
|
|||
|
1. Если интересует именно изменение логики работы, то тут тебе помогут скрипты. Есть много компонентов PASCAL-скриптов.
2. Если надо просто менять сам код, не меняя его сути (как полиморфные вирусы), то тут надо очень хорошо предсталять себе как устроен исполняемый файл изнутри. в принципе, есть заменяемые операторы (по смыслу). Например, mov ax,0 можно заменить на xor ax,ax смысл тот же, но код другой. |
|
#5
|
||||
|
||||
|
надо поменять именно код, вот только проблема со знанием ассемблера(точнее с незнанием сего), вот и интересно нет никаких компонентов, упрощающих это дело?
|
|
#6
|
|||
|
|||
|
Нет, таких компонентов нету. Вообще-то, полиморфный код используется всего в 2х видах программ: вирусы и протекторы. Сомневаюсь, что ты пишешь протектор...
|
|
#7
|
||||
|
||||
|
знать бы что такое протектор....
![]() просто хочу на программу защиту поставить по принципу: при первом запуске собирает инфу и перекомпилируется, отправляет что-то наподобие хеша себя на сервер; дальше перед запуском программа (уже перекомпилированная) отправляет запрос на этот сервер, сервер отвечает: "добро" или "нет", от этого зависит будет ли работать программа; хранить значения где-нито на винте - опасно, в реестре тоже; так что без перекомпиляции думаю сложно обойтись; то есть я так понял мне ассемблер надо изучать? или есть еще варианты |
|
#8
|
||||
|
||||
|
Цитата:
Присоединяюсь, а вообще можно данные в ресурсах хранить, в конце файла (оверлей как у инсталляторов), а на крайний случай писать в код в определенные места. При этом все дело шифруется) А "перекомпилятор" можешь запускать из ресурсов (памяти), чтобы не отлавливаться мониторами всякими. Вроде так, если немного не ошибся) Последний раз редактировалось Vayrus, 16.06.2009 в 16:45. |
|
#9
|
||||
|
||||
|
Vayrus, поподробней можно?
то есть сразу после последнего символа моей программы можно писать все что угодно? или как? "перекомпилятор" - где его взять готовый (если переписывать ассемблерный код(самостоятельно), то это можно и не из ресурсов, а прямо в "теле" программы) |
|
#10
|
||||
|
||||
|
Цитата:
Да, такой способ используют инсталляторы и, н-р, SFX RAR архив, который по сути состоит из программы и "приклеенного" сзади RAR архива. "Перекомпилятор" - этоя я имел ввиду образно программу, которая будет что то менять, н-р, в оверлее или тех же ресурсах, но ее не обяз-но распологать в ресурсах, можно просто положить рядом с основной прогой. А про все остальное прочитай описание формата PE. Кстати, здесь в исходниках есть то, что тебе нужно, вроде называется "Добавление текста к любым файлам", ну короче ищи, все есть. |
|
#11
|
||||
|
||||
|
спасибо за инфу(реально просветил на счет добавления в конец файла)
но если кто найдет данный компонент тоже было бы неплохо , только любопытней стало |
|
#12
|
||||
|
||||
|
где-то слышал что язык Lisp имеет возможность переписывать свой код в процессе выполнения..но лично я не пробывал...
p.s. иногда проще сменить язык чем пытаться сделать все на одном ![]() |
|
#13
|
||||
|
||||
|
Есть компилируемые, а есть интерпретируемые языки...
http://www.softix.ru/yazyk/ Так вот лисп второй вариант...это фактически скрипт(сценарий)... http://ru.wikipedia.org/wiki/Лисп |
|
#14
|
||||
|
||||
|
Цитата:
Если честно, то такой способ имеет следующие недостатки: 1. А если сеть пропадет? Что тогда скажет пользователь? 2. Такой тип защиты ломаеться в течении 15-180 минут (в зависимости от сложности). начиная, от того что проверка просто "глушиться", заканчивая написанием эмулятора сервера 3. А что если пользователь сменил компьютер или поменячл оборудование? Тогда программа тоже перестанет работать. Как вариант предлагаю. 1. Использовать водяные знаки в программе (для каждого пользователя - свои). Тогда в случае сетевой лицензии тяжелее будет сделать эмулятор сервера лицензий. Проверка тогда будет идти как на сервере, так и в самой программе. Причем можно реализовать ее так, что она будет каждый раз разной. 2. На случай пропадания лицензии можно использовать 1-3 дневную лицензию, которая будет генерироваться сервером. Можно использовать принцип корешков (т.е. программа будет отмечать в этой лицензии количество произведенных запусков). Естествнно все будет зашифровано 3. Использовать для шифрования RSA . Все ключи для каждой копии - индивидуальны. Это поможет сформировать уникальную сетевую лицензию. |
|
#15
|
||||
|
||||
|
актуальна только тема перекомпиляции и то, только из-за любопытства
Цитата:
Цитата:
Цитата:
Цитата:
![]() корешки хранить в реестре или где-либо на винте - не вариант, так что тут тоже уязвимость; а так, Thrasher, спасибо за содействие скрипты, отпадают сразу из-за мильена недостатков (обязательность интерпритатора, открытостью скрипта и т.д. и т.п.) |