Пишем профессиональную защиту 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. |