Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Хранение кода программы, Хранение части кода программы на WebServ 
:(
    Опции темы
Anakin
  Дата 25.2.2012, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 25.9.2006

Репутация: нет
Всего: нет



Добрый вечер.
Есть нестандартный по моему мнению вопрос.
Все мы читали про защиту программы такого рода, когда часть исполняемого кода хранитса на USB носителе, и при попытке запуска программы без USB ключа программа напрочь отказывается запускатса.

Так вот меня интересует вопрос реально ли сделать что-то подобное только что бы хранить информацию не на USB носителе ввиде ключа а скажем на Веб сервере в базе данных или в текстовом фаиле на сервере.

Не обязательно большой кусок программы а какуюто процедуру или функцию без которой программа не будет работать или все кнопки будут заблокированы.

Если честно я даже не представляю себе как это реализовать, если это возможно подскажите в каком направлении копать или что почитать.
PM MAIL   Вверх
northener
Дата 26.2.2012, 02:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 8
Всего: 20



Цитата(Anakin @  25.2.2012,  23:02 Найти цитируемый пост)
Так вот меня интересует вопрос реально ли сделать что-то подобное только что бы хранить информацию не на USB носителе ввиде ключа а скажем на Веб сервере в базе данных или в текстовом фаиле на сервере.

Имхо, сделать "что-то подобное" реально, но трудно. А использование таким образом защищённой программы для конечного пользователя скорее всего будет настолько связано с геморроем, что никто не захочет её использовать.


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
Чучмек
Дата 26.2.2012, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

Репутация: 14
Всего: 41



Цитата(northener @  26.2.2012,  02:45 Найти цитируемый пост)
реально, но трудно

Не так страшен черт, как его малюнки. Правда без ручной работы не обойтись.

Цитата(Anakin @  25.2.2012,  23:02 Найти цитируемый пост)
в каком направлении копать или что почитать

В первую очередь - формат PE файлов и ассемблер. 

Допустим у программы есть сверхсекретная функция 
Код

function add(a,b:integer):integer;
begin
result:=a+b;
end;

Код этой функции и нужно вынести из программы, а его место забить всякой дрянью, например нулями.
Для простоты код функции будем держать на диске в файле code.bin

Код программы:
Код

const
add_function_length=5;  //размер функции add - определяем в ручную 

function add(a,b:integer):integer;
begin
result:=a+b;
end;

procedure TForm1.FormCreate(Sender: TObject);
var hf:integer;
 oldatr:cardinal;
begin
edit1.Text:='0';
edit2.Text:='0';
button1.Caption:='Выполнить';
label1.Caption:='';
label2.Caption:='+';
button1.Enabled:=false;
hf:=fileopen('code.bin',0);

if (hf>0)and(add_function_length=getfilesize(hf,nil)) then      //Если есть файл с кодом функции и его размер совпадает с размером функции
 begin
 virtualprotect(@add,add_function_length,PAGE_EXECUTE_READWRITE,@oldatr);  
 fileread(hf,(@add)^,add_function_length);  //записываем на место функции код из файла
 fileclose(hf);
 end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
button1.Enabled:= pcardinal(@add)^<>0;           //если первые четыре байта функции  $00000000 - кнопка не активна
end;

procedure TForm1.Button1Click(Sender: TObject);
var a,b,s:integer;
begin
a:=strtoint(edit1.Text);
b:=strtoint(edit1.Text);
s:=add(a,b);
label1.Caption:='='+inttostr(s);
end;
 
Теперь нам нужен сам код функции
ставим останов на строку s:=add(a,b);
user posted image
нажимаем F9->Button1->Ctrl+Alt+C
user posted image
Строка где вызывается add обведена (вызов функции/процедуры всегда call)
Нажимаем F7, пока не перейдем на функцию add
user posted image
Конец функции всегда ret
Код функции 03D08BC2C3 размер - 5 байт адрес $00450200
Теперь нужно найти этот код в exe, записать его в code.bin, а его место заполнить нулями.
Как найти код по адресу?  - смотри формат PE файлов.
Для простоты воспользуемся hex редактором 
user posted image
У смещения кода в exe - $4F600 и адреса $00450200 общий только младший байт $00 
user posted image
Вот файлы проекта, пропатченый exe переименован в ~Project1.exe


 

Это сообщение отредактировал(а) Чучмек - 26.2.2012, 16:41

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  del.zip 202,96 Kb


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
northener
Дата 27.2.2012, 01:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 8
Всего: 20



Цитата(Чучмек @  26.2.2012,  16:33 Найти цитируемый пост)
Не так страшен черт, как его малюнки. Правда без ручной работы не обойтись.

Ну так автор сказал "Все мы читали про защиту программы такого рода, когда часть исполняемого кода хранитса на USB носителе"
Но он хочет "на Веб сервере в базе данных или в текстовом фаиле на сервере."
Поймите разницу!


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
Чучмек
Дата 27.2.2012, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

Репутация: 14
Всего: 41



Хранится может где угодно, хоть на перфокартах.
Кто мешает при запуске подключится к серверу и запросить код?
Правда полученный однажды код можно подсунуть программе тем или иным способом.


Это сообщение отредактировал(а) Чучмек - 27.2.2012, 10:55


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
Anakin
Дата 27.2.2012, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 25.9.2006

Репутация: нет
Всего: нет



Цитата

Хранится может где угодно, хоть на перфокартах.
Кто мешает при запуске подключится к серверу и запросить код?
Правда полученный однажды код можно подсунуть программе тем или иным способом.

Да и то верно,  в принципе сломать можно всё, но любителей такой тип защиты отпугнет и введёт в заблуждение если накидать в программу ещё кучу функций пустышек и также на сервере хранить пустышки.
В любом случае пасиб тебе большое шас буду ковырять и втыкать.
PM MAIL   Вверх
RomanEEP
Дата 28.2.2012, 08:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 424
Регистрация: 18.5.2006
Где: Коломна

Репутация: 5
Всего: 8



Зачем хранить на веб-сервере код, а потом его качать оттуда используя кучу грязных хаков? Можно поступить проще и эффективнее - хранить на веб сервере сверхсеретную функцию в виде скрипта и запрашивать от сервера результат выполнения этой функции. Такую защиту сломать будет в принципе невозможно, если у злоумышленника нет доступак веб-серверу, а функция достаточно сложная.
PM MAIL   Вверх
Anakin
Дата 3.3.2012, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 25.9.2006

Репутация: нет
Всего: нет



Цитата(RomanEEP @ 28.2.2012,  08:17)
Зачем хранить на веб-сервере код, а потом его качать оттуда используя кучу грязных хаков? Можно поступить проще и эффективнее - хранить на веб сервере сверхсеретную функцию в виде скрипта и запрашивать от сервера результат выполнения этой функции. Такую защиту сломать будет в принципе невозможно, если у злоумышленника нет доступак веб-серверу, а функция достаточно сложная.

Хм а вот это уже интересней..
Что ты имеешь ввиду " сверхсекретную функцию в виде скрипта  "
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0583 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.