|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Перекомпиляция программы самой себя
В общем, звиняйте если не в этот раздел, через поиск ниче не нашел, google, yandex, тоже ничевразумительного
Собственно вопрос: Как можно сделать так, чтобы программа сама изменила свой исходный код(при том по-разному, в зависимости от определенных условий)? З.Ы. рад любой информации(дополнительный компонент, ссылка на статью ит.п.) Заранее благодарен. |
#2
|
||||
|
||||
Неее... если только компилятор в саму прогу зашить, а это такой гемор... не проще "в зависимости от определённых условий" выполнять разные варианты кода? А какой вариант определять при запуске.
Просто и логично. Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#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 . Все ключи для каждой копии - индивидуальны. Это поможет сформировать уникальную сетевую лицензию. Хорошо написанная программа не требует документации ICQ 9-184-668. |
#15
|
||||
|
||||
актуальна только тема перекомпиляции и то, только из-за любопытства
Цитата:
Цитата:
Цитата:
Цитата:
корешки хранить в реестре или где-либо на винте - не вариант, так что тут тоже уязвимость; а так, Thrasher, спасибо за содействие скрипты, отпадают сразу из-за мильена недостатков (обязательность интерпритатора, открытостью скрипта и т.д. и т.п.) |