Защита .exe

Разговоры на любые темы: вы можете обсудить здесь какой-либо сайт, найти единомышленников или просто пообщаться...
ndemidov
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 14.11.2007 (Ср) 16:23
Откуда: Earth planet

Защита .exe

Сообщение ndemidov » 24.02.2012 (Пт) 7:18

Пишу защиту знакомому. Кроме делания доп. защиты от взлома пользователем и всяческих ограничений лицензии, ему также требуется защита и от хакеров. Программа - торговый советник, написанный на MQL4. Вся логика принятия решений после проверки сводится к If Defence_OK() == false -- вырубить прогу. Он сказала, что знает, что его взламывают буквально за пять минут. Что неудивительно. Сам он разбирается в программировании ещё хуже меня, он пишет алгоритмы, я помогаю со всем остальным. Что делать как защитить, придется нам самим учиться взламывать свою прогу, чтобы научиться существенно замедлять время взлома?
Большинство людей не понимает, что великое многообразие и красочность мира будут служить им крепчайшей душевной поддержкой на протяжении всей жизни. Иван Ефремов

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Защита .exe

Сообщение Antonariy » 24.02.2012 (Пт) 7:36

Пусть купит таблетки от паранойи.
Если его программа настолько крута, что имеет смысл ее защищать, то ее взломают в любом случае, сколько бы время на это не потребовалось.
Или пусть часть крутости программы разместит на сервере, без которого она не сможет работать.
Лучший способ понять что-то самому — объяснить это другому.

ndemidov
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 14.11.2007 (Ср) 16:23
Откуда: Earth planet

Re: Защита .exe

Сообщение ndemidov » 24.02.2012 (Пт) 8:00

Ну там торговый советник. Он на этом зарабатывает, поэтому смысл защищать есть. На сервере невозможно разместить в виду особенностей языка mql4, они ограничены. Вот. Программа продается людям на месяц, надо повысить стоимость взлома, чтобы просто было дешевле купить официальную подписку с поддержкой.
Большинство людей не понимает, что великое многообразие и красочность мира будут служить им крепчайшей душевной поддержкой на протяжении всей жизни. Иван Ефремов

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Защита .exe

Сообщение jangle » 24.02.2012 (Пт) 9:42

Единственный стоящий вариант защита на электронном ключе, по крайней мере без ключа не сломают по реквесту на экзелаб.ру. Ключи покупать здесь: http://www.guardant.ru/ в их дистрибутиве есть пример защиты прог на VB. Самому защиту не писать, потому что знаний в этой области у тебя нет.

VBTerminator
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 415
Зарегистрирован: 19.11.2008 (Ср) 20:10

Re: Защита .exe

Сообщение VBTerminator » 24.02.2012 (Пт) 10:23

У меня есть достаточно надёжное (по-моему) решение, но оно потребует модификации серверной части (изменение файла программы для каждого пользователя), да и mql может такое не поддерживать.

Во-первых, где-нибудь в недрах исполняемого файла должна лежать зашифрованная строка с итендификатором покупателя данного экземпляра программы. Сама программа к этой строке не обращается вообще, но в случае появления пиратской копии можно извлечь эту строку, расшифровать её и выяснить нарушителя EULA.

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

В результате получаем следующее:
Взломщик открывает нашу программу в отладчике, видит нашу элементарную проверку, удаляет её и выкладывает взломанную версию программы. Пользователи, купившиеся на халяву, не знают, что программа будет работать некорректно (см. пункт 2). Естественно, любители бесплатного сыра решат, что программа с глюками, поэтому необходимо предусмотреть возможность скачивания триал- или демоверсии. Даже если крякер и узнает про роль ключа, то у нас останется пункт 1, который выдаст его с головой.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Защита .exe

Сообщение jangle » 24.02.2012 (Пт) 10:51

У меня есть достаточно надёжное (по-моему) решение


Надежность защиты от взлома здесь равна нулю

VBTerminator писал(а):Во-вторых, помимо простой проверки ключа активации (оставим это для отвода глаз), перед вызовом критичных функций вычисляем на его основе адрес в памяти, куда будет выполнен переход. Соответственно, все возможные диапазоны памяти, куда может уйти выполнение, в EXE необходимо записать с правами хотя бы на чтение и выполнение и забить мусором, похожим на корректный код. Получаем, что при вводе неправильного ключа выполнение улетает неизвестно куда, и программа вроде бы работает, но как-то неправиль


Это называется подмена точки входа. Вот пример такого подхода, только здесь правильный переход осуществляется если запущенная программа будет запакована EXE-упаковщиком, кракер распаковывает программу и она начинает валится при запуске. Идея кажется красивой, но все ломается за 5 минут при наличии рабочей версии или ключа. Смысла в такой защите нет никакого.

Код: Выделить всё
#Compile Exe
#Include "win32api.inc"

Global imgSection() As IMAGE_SECTION_HEADER

Function AppExeName() As String
On Error Resume Next
  Local buffer  As Asciiz * 256
  GetModuleFileName GetModuleHandle(ByVal 0&), Buffer, 256
  Function = Buffer
End Function

Function FileOffset(RVA As Dword) As Dword
Dim I As Dword, LastEntry As Dword
LastEntry = UBound(imgSection) - 1
For I = 0 To LastEntry
  If RVA >= imgSection(i).VirtualAddress Then
     If I = LastEntry Then
         FoundOffset:
         Function = RVA - imgSection(i).VirtualAddress + imgSection(i).PointerToRawData
     Else
        If RVA < imgSection(i + 1).VirtualAddress Then GoTo FoundOffset
     End If
  End If
Next I
End Function

Function PBMain() As Long
   Local ExeHdrInfo As IMAGE_NT_HEADERS
   Local DOSHdr As Image_DOS_Header
   Local I As Long, RVA As Dword
   Open AppExeName For Binary Access Read Lock Shared As #1
   Get #1,, DosHdr
   Seek #1, 0
   Seek #1, DosHdr.e_lfanew + 1
   se% = Seek(#1)
   Get #1,, ExeHdrInfo
   ReDim imgSection(ExeHdrInfo.FileHeader.NumberOfSections) As IMAGE_SECTION_HEADER
   For I = 0 To ExeHdrInfo.FileHeader.NumberOfSections - 1
    Get #1, 25 + DosHdr.e_lfanew + ExeHdrInfo.FileHeader.SizeOfOptionalHeader + (40 * I), imgSection(i)
   Next I
   Close #1
   RVA = ExeHdrInfo.OptionalHeader.AddressOfEntryPoint
   RVA = RVA + ExeHdrInfo.OptionalHeader.ImageBase
   Poke RVA, &hC3
   Print "Hello VBstreets!"
   WaitKey$
End Function
Вложения
типа крутая защита.zip
код
(20.02 Кб) Скачиваний: 70

VBTerminator
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 415
Зарегистрирован: 19.11.2008 (Ср) 20:10

Re: Защита .exe

Сообщение VBTerminator » 24.02.2012 (Пт) 11:12

jangle писал(а):Это называется подмена точки входа.

Нет, я немного не про это.

Во-первых, точка входа вычисляется не только для стартовой функции программы, но и для каждого (ну, или почти каждого) участка, где встречается инструкция CALL или JMP. Код неверен - и все адреса перехода ведут не туда.

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

Хотя, согласен, здесь очень заморочено, поэтому достаточно первого варианта с идентификатором покупателя (этот метод использовал какой-то онлайн-магазин по продаже музыки).

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Защита .exe

Сообщение jangle » 24.02.2012 (Пт) 11:37

VBTerminator писал(а):Хотя, согласен, здесь очень заморочено, поэтому достаточно первого варианта с идентификатором покупателя (этот метод использовал какой-то онлайн-магазин по продаже музыки).


Это не заморочено, это глупо. Нет никакой разницы, один переход ты подменишь, или 1000 переходов. Стойкости в защите от копирования это не прибавит. Это тот же самый смысл, если сжать твою программу WinRar`om с паролем.
Если пользователь знает пароль к архиву (а иначе как он запустит от туда программу) ему ничего не стоит ее сдампить, или просто выложить в интернет с паролем. Единственный рабочий вариант защиты, это когда ключ представляет собой - материальный объект. Это когда нельзя выложить программу на форум кракеров вместе с ключом и попросить сдампить. Нужно как минимум прислать ключ по-почте взломщику. А это почти всегда сложно сделать. Хотя ради уникального и супердорого ПО идут и на такие вещи. Тут уже начинает работать интеллект разработчиков ключа против интеллекта хакера. И при правильной реализации защиты, сломать ее не так-то просто. Особенно когда часть программы выносится в микропроцессор ключа, и выполняется прямо внутри ключа.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Защита .exe

Сообщение Antonariy » 24.02.2012 (Пт) 16:29

Программа продается людям на месяц
Опаньки, это что-то новое в софтверном маркетинге. Дарится на месяц, это устоявшаяся практика шареваринга, но продается на месяц... Я бы не купил. Или, если прога действительно годная, купил бы (при невозможности скачать, конечно) специально под слом.
надо повысить стоимость взлома
Если нужно ломать период действия программы (купленной!), то стоимость взлома стремится к нулю с каждым днем, прошедшим после истечения периода действия и взлома. Эта плата уж 100% одноразовая. Причем это выгодно для заказчика взлома, купившего вашу программу. Что уж говорить о халявщиках, скачавших кряк из интернетов.

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

С такой схемой (как я ее понял) программа будет сломана 110%.
Лучший способ понять что-то самому — объяснить это другому.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 24.02.2012 (Пт) 22:49

Думаю, лучше уж как-нибудь похитрее упрятать ключ в сам алгоритм, чтобы программа работала всегда, а вот качество работы зависело от правильности ключа ;)

ndemidov
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 14.11.2007 (Ср) 16:23
Откуда: Earth planet

Re: Защита .exe

Сообщение ndemidov » 25.02.2012 (Сб) 12:06

Программа выдает торговые сигналы. Подписка (новый exe) выдается на месяц. Стандартная схема. Конечно, товарищи могут заплатить за взлом, кто достаточно денег на этом зарабатывает. Но подписка будет недорого стоить - первая уплата только больше.

А с помощью каких инструментов нам самим взломать прогу? А то товарищу вообще трудно представить как там переписывается байт проверки с false на всегда true, он расстроился :roll:
Большинство людей не понимает, что великое многообразие и красочность мира будут служить им крепчайшей душевной поддержкой на протяжении всей жизни. Иван Ефремов

VBTerminator
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 415
Зарегистрирован: 19.11.2008 (Ср) 20:10

Re: Защита .exe

Сообщение VBTerminator » 25.02.2012 (Сб) 20:22

ndemidov писал(а):А с помощью каких инструментов нам самим взломать прогу?

Любой отладчик (OllyDbg, к примеру). Правда на выходе получится ассемблерный код.

ndemidov писал(а):А то товарищу вообще трудно представить как там переписывается байт проверки с false на всегда true, он расстроился

В твоём случае проверка
Код: Выделить всё
If Defence_OK()
{
    //Если мы здесь - код правильный.
}
else {
    //Если мы здесь - код неверный, радуем пользователя.
}

скомпилируется примерно в следующее:

Код: Выделить всё
CALL <адрес Defence_OK>  //Вызываем функцию Defence_OK()
CMP EAX, 0               //Сравниваем возвращённое функцией значение с false
JNE _wrong_key           //Если проверка не пройдена, выполняем goto на метку _exit

    //Если мы здесь - код правильный.

JMP _endif               //Goto на _endif, чтобы не отображать сообщение о неправильном ключе

_wrong_key:
    //Если мы здесь - код неверный, радуем пользователя.

_endif
   ...

То есть, для "взлома" достаточно всего лишь заменить третью строку на команду "NOP" (ничего не делать).

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Защита .exe

Сообщение FireFenix » 25.02.2012 (Сб) 21:52

ndemidov писал(а):Программа выдает торговые сигналы. Подписка (новый exe) выдается на месяц.

Граалей нету, уже который раз проводиться конкурс на торговых роботов (где-то был линк на оффсайте), хоть и показывают хорошую статистику на отдельных периодах, но в нормальных условиях ничего не работает, как и торговые сигналы

"Принципы успешной спекуляции на фондовом рынке основаны на предположении, что люди в будущем продолжат совершать те же ошибки, которые они делали в прошлом." © Томас Вудлок

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

А с помощью каких инструментов нам самим взломать прогу?

Вначале поискать на трекерах. Популярные проги давно взломаны и выложены, всякие там по Майнингу Данных, волны Эллиота и т.д.

Если программа как очередной грааль написанный на MQL, то проблема будет в самом скрипте, т.к. MT представляет собой интерпретатор, и нужно копаться во всех этой системе, чтобы понять что куда отсылает и как работает, а уж потом обходить лицензию.

С другой стороны, если это нативная программа, то немного попроще (но не так чтобы уж очень). Нужно не мало времени провести под отладчиком, изучить принципы защиты и обойти
http://wasm.ru/series.php?sid=17 тебе в помощь
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

ndemidov
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 14.11.2007 (Ср) 16:23
Откуда: Earth planet

Re: Защита .exe

Сообщение ndemidov » 27.02.2012 (Пн) 18:07

Спасибо, VBTerminator.

FireFenix, согласен. Абсолютно дурацкая затея. Она ещё (эта система) торгует по Мартингейлу. Я посмотрел -- один раз и все за раз сольётся. Только вероятность маленькая. О чём я и сказал товарищу. Но прошло пол года и для меня появилась работа, а он раскрутился, люди, в возрасте, с удовольствием берут, эта торговая система ещё не слила. Сначала я брал разовую работу, а потом вошёл в долю 50 на 50 -- от сделок людей идёт комиссия + отчисления за советника (либо за копирование счета). Мне только остается напоминать, что рано или поздно все это крякнется сразу и у всех.

Ой, про все эти отладчики сложно :) Вариант с dasm не подойдёт, потому что код будет другой? "Хакеры" сказали, что взломали за 5 минут.
Большинство людей не понимает, что великое многообразие и красочность мира будут служить им крепчайшей душевной поддержкой на протяжении всей жизни. Иван Ефремов

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Защита .exe

Сообщение Antonariy » 27.02.2012 (Пн) 22:50

Самая лучшая защита — сделать веб-приложение. Не знаю, правда, возможно ли это в случае торгового автомата.
Лучший способ понять что-то самому — объяснить это другому.

djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

Re: Защита .exe

Сообщение djalex777 » 28.02.2012 (Вт) 11:21

Antonariy писал(а):Самая лучшая защита — сделать веб-приложение. Не знаю, правда, возможно ли это в случае торгового автомата.

Это возможно в любом случае.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Защита .exe

Сообщение Antonariy » 28.02.2012 (Вт) 15:58

Это возможно в любом случае.

Фотошоп? Корел? Windows Movie Maker?
Лучший способ понять что-то самому — объяснить это другому.

djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

Re: Защита .exe

Сообщение djalex777 » 28.02.2012 (Вт) 16:43

Antonariy писал(а):Фотошоп? Корел? Windows Movie Maker?

Что из функций вышеперечисленного ты считаешь не возможным к реализации через web-интерфейс?

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Защита .exe

Сообщение Antonariy » 28.02.2012 (Вт) 17:17

Для фотошопа и корела теоретически ничего. Практически же графический матан, переложенный на скрипты, будет дико тормозить.
Для видеоредактора... ты кого больше хочешь нагрузить кодировкой видео, браузер или сервер? Если браузер, как ты научишь его работать с файлами? Если сервер, как думаешь, сколько роликов он может кодировать одновременно? И какого они должны быть максимального размера, чтобы эта затея вообще имела смысл?
Лучший способ понять что-то самому — объяснить это другому.

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: Защита .exe

Сообщение Proxy » 28.02.2012 (Вт) 17:33

Antonariy писал(а):Для фотошопа и корела теоретически ничего. Практически же графический матан, переложенный на скрипты, будет дико тормозить.

Ну не то чтобы прям вообще невыполнимая задача была. Даже на flash нечто подобное можно выполнить, а можно ведь реализовать функционалом html5.
Один из.
Follow the white rabbit.

djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

Re: Защита .exe

Сообщение djalex777 » 28.02.2012 (Вт) 20:02

Antonariy писал(а):Практически же графический матан, переложенный на скрипты, будет дико тормозить.

Зачем перекладывать на скрипты? Ты предлагаешь для этих целей использовать дешевый виртуальный хостинг?

Antonariy писал(а):Для видеоредактора... ты кого больше хочешь нагрузить кодировкой видео, браузер или сервер? Если браузер, как ты научишь его работать с файлами? Если сервер, как думаешь, сколько роликов он может кодировать одновременно? И какого они должны быть максимального размера, чтобы эта затея вообще имела смысл?

Я говорил вобще-то, что всё возможно реализовать, что ты и сам как видно понимаешь. Детали это уже другая сторона вопроса.

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: Защита .exe

Сообщение Proxy » 28.02.2012 (Вт) 22:30

djalex777 писал(а):Зачем перекладывать на скрипты?

Иначе вся производительность сожрётся задержками при передаче данных. Некоторые задачи однозначно должна выполнять клиентская сторона.
Follow the white rabbit.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Защита .exe

Сообщение Antonariy » 29.02.2012 (Ср) 9:11

djalex777 писал(а):Детали это уже другая сторона вопроса.
В них-то всё и кроется. И это основная сторона вопроса.
Лучший способ понять что-то самому — объяснить это другому.


Вернуться в Народный треп

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 53

    TopList