У меня есть достаточно надёжное (по-моему) решение
VBTerminator писал(а):Во-вторых, помимо простой проверки ключа активации (оставим это для отвода глаз), перед вызовом критичных функций вычисляем на его основе адрес в памяти, куда будет выполнен переход. Соответственно, все возможные диапазоны памяти, куда может уйти выполнение, в EXE необходимо записать с правами хотя бы на чтение и выполнение и забить мусором, похожим на корректный код. Получаем, что при вводе неправильного ключа выполнение улетает неизвестно куда, и программа вроде бы работает, но как-то неправиль
#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
jangle писал(а):Это называется подмена точки входа.
VBTerminator писал(а):Хотя, согласен, здесь очень заморочено, поэтому достаточно первого варианта с идентификатором покупателя (этот метод использовал какой-то онлайн-магазин по продаже музыки).
Опаньки, это что-то новое в софтверном маркетинге. Дарится на месяц, это устоявшаяся практика шареваринга, но продается на месяц... Я бы не купил. Или, если прога действительно годная, купил бы (при невозможности скачать, конечно) специально под слом.Программа продается людям на месяц
Если нужно ломать период действия программы (купленной!), то стоимость взлома стремится к нулю с каждым днем, прошедшим после истечения периода действия и взлома. Эта плата уж 100% одноразовая. Причем это выгодно для заказчика взлома, купившего вашу программу. Что уж говорить о халявщиках, скачавших кряк из интернетов.надо повысить стоимость взлома
На что подписка? Программа настолько сложная, что без поллитры и поддержки не разберешься, и/или постоянно обновляется и появляются новые важные функции? Если это так, то достаточной защитой будет являться сложность освоения, отсутствие поддержки и обратной совместимости (если есть что совмещать). Если же это выпрашивание денег за однажды сделанную и проданную "коробку" с прогой из десятка формочек, то даже самый тупой торговый советник однажды поймет, что с него дерут плату за воздух, и будет искать способ сломать программу.чтобы просто было дешевле купить официальную подписку с поддержкой.
ndemidov писал(а):А с помощью каких инструментов нам самим взломать прогу?
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
...
ndemidov писал(а):Программа выдает торговые сигналы. Подписка (новый exe) выдается на месяц.
А с помощью каких инструментов нам самим взломать прогу?
Antonariy писал(а):Самая лучшая защита — сделать веб-приложение. Не знаю, правда, возможно ли это в случае торгового автомата.
Это возможно в любом случае.
Antonariy писал(а):Фотошоп? Корел? Windows Movie Maker?
Antonariy писал(а):Для фотошопа и корела теоретически ничего. Практически же графический матан, переложенный на скрипты, будет дико тормозить.
Antonariy писал(а):Практически же графический матан, переложенный на скрипты, будет дико тормозить.
Antonariy писал(а):Для видеоредактора... ты кого больше хочешь нагрузить кодировкой видео, браузер или сервер? Если браузер, как ты научишь его работать с файлами? Если сервер, как думаешь, сколько роликов он может кодировать одновременно? И какого они должны быть максимального размера, чтобы эта затея вообще имела смысл?
djalex777 писал(а):Зачем перекладывать на скрипты?
В них-то всё и кроется. И это основная сторона вопроса.djalex777 писал(а):Детали это уже другая сторона вопроса.
Сейчас этот форум просматривают: Google-бот и гости: 12