Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #74, ФЕВРАЛЬ 2005 г.

Пишем профессиональную защиту

GPcH (www.dotfix.net)

Хакер, номер #074, стр. 074-112-4


Листинг 3

'получим ассемблерный код

sASM = BlowFish.DecodeString(strPass, Asc(Mid$(strName, 3, 1)))

'переведем его в массив байт

'такой функции нет в бейсике, ее ты найдешь в листинге 4

'или можешь написать сам, благо это дело пяти минут

Call ToBytes(sASM)

'вызываем ассемблерную функцию

'для этого передаем API-функции CallWindowsProc

'адрес на первый байт ассемблерного кода

sASCII = CallWindowProc(VarPtr(bytes(0)))

'сравниваем

If sASCII = Asc(Mid$(strName, 2, 1)) Then

MsgBox "Пароль верный"

Else

MsgBox "Пароль неверный"

End If

Листинг 4

Private Sub ToBytes(strBin As String)

For i = 0 To Len(strBin) - 1

Bytes(i) = Asc(Mid$(strBin, i + 1, 1))

Next

End Sub

Повторюсь: функция представлена в общем виде. Для ее работоспособности нам потребуется объявить API-функцию CallWindowsProc:

Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

и глобальный массив bytes:

Public bytes() as byte

в разделе объявлений программы, а также подключить класс модуль blowfish и объявить его так:

Dim BlowFish As New clsBlowFish

Собственно сама ассемблерная функция должна иметь вид

[bits 32]

mov eax, 12

12 - возвращаемый символ, он передается в регистр eax и создается генератором ключей для твоей проги в зависимости от второго ASCII-символа имени пользователя. С генератором ключей придется потрудиться: ты должен написать функцию, которая будет изменять этот символ, перекомпилировать ассемблерную программу и шифровать ее. Я, правда, сделал проще, чего и тебе советую: просто откомпилируй один вариант ассемблерной функции, дизассемблируй его и погляди, где 12 заносится в eax. Пусть твой кейген меняет этот байт, а не перекомпилирует все заново. Теперь осталось разобраться, как же откомпилировать эту функцию в машинный код. Для этого лучше использовать компилятор ассемблера nasm, так как он умеет создвать не EXE, а BIN-файлы. Этот BIN-файл мы и будем криптовать BlowFish'ем и при вводе этой криптованной строки юзером декриптовать и заносить в массив байт. Чтобы пользователю удобнее было вводить пароль, шифруй функцию с установкой параметра HEX в true, тогда BlowFish будет возвращать шестнадцатеричные коды байт. При этом пароль увеличится в два раза, но будет состоять только из цифр и букв от A до F.

Назад на стр. 074-112-3  Содержание  Вперед на стр. 074-112-5