|  | 
 
 | 
| 
 | |||||||
| Регистрация | << Правила форума >> | 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, спасибо за содействие скрипты, отпадают сразу из-за мильена недостатков (обязательность интерпритатора, открытостью скрипта и т.д. и т.п.) |