Обфускатор кода, защита программы - VB
Формулировка задачи:
Собственно в поисках обфускатор(а) кода visual basic 6.0
Вопрос по защите от распространения
Сделал на скорую руку защиту в виде файл ключа
Первая программа собирает информации о пк, шифрует, сохраняет в файл
Файл передают мне, я генерирую ключ
В ключе содержится информация о ПК
Продаваемая программа при старте сверяет данные
вызов сообщения о ключе вывел в таймер, что бы нельзя было отследить условие запуска
Проверка осуществляется на отдельной форме
Как защититься от виртуальных машин?
Рассматривать вариант сравнивать железо (с стандартным железом виртуалок) не дело, т.к. виртуалок разных много, у них разное железо, да и железо виртуальное - поменять не проблема
Решение задачи: «Обфускатор кода, защита программы»
textual
Листинг программы
Option Explicit Private Type DllCall lpszLibName As Long lpszFncName As Long End Type Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryW" (ByVal lpLibFileName As Long) As Long Private Declare Function ideDllFunctionCall Lib "vba6" Alias "DllFunctionCall" (lpLibFileName As DllCall) As Long Private Declare Function DllFunctionCall Lib "msvbvm60" (lpLibFileName As DllCall) As Long Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long Private Declare Function GetMem8 Lib "msvbvm60" (Src As Any, Dst As Any) As Long Private Declare Function GetMem4 Lib "msvbvm60" (Src As Any, Dst As Any) As Long Private Declare Function GetMem1 Lib "msvbvm60" (Src As Any, Dst As Any) As Long Private Declare Function VirtualProtect Lib "kernel32" (lpAddress As Any, ByVal dwSize As Long, ByVal flNewProtect As Long, lpflOldProtect As Long) As Long Private Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (lpString1 As Any, lpString2 As Any) As Long Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (lpString As Any) As Long Private Const PAGE_EXECUTE_READWRITE As Long = &H40& Private Const PAGE_READWRITE = 4& Dim Dat(7) As Byte, Jmp(7) As Byte Dim hMod As Long Dim lpFnc As Long Dim inIDE As Boolean ' ÔóГ*êöèÿ ïåðåõâГ*ГІГ* Private Function CallBackDllFunctionCall(inf As DllCall) As Long Dim lib As String, func As String, n As Long ' Г‘Г*ГЁГ¬Г*ГҐГ¬ ïåðåõâГ*ГІ ÷òîáû âûçûâГ*ГІГј ГўГ*óòðè API, Г°Г*çðåøГ*ГҐГ¬ Г§Г*ГЇГЁГ±Гј Гў Г¤Г*Г*Г*ûå ГЁГ§ Declare Call Unpatch: VirtualProtect inf, 8, PAGE_READWRITE, 0 ' Ïîëó÷Г*ГҐГ¬ èìÿ áèáëèîòåêè ГЁ ГґГіГ*êöèè n = lstrlen(ByVal inf.lpszLibName): lib = Space(n): lstrcpy ByVal lib, ByVal inf.lpszLibName n = lstrlen(ByVal inf.lpszFncName): func = Space(n): lstrcpy ByVal func, ByVal inf.lpszFncName ' ÏðåîáðГ*çîâûâГ*ГҐГ¬ ГЁГµ Гў Г*Г*ñòîÿùèå Decode lib, func: inf.lpszLibName = StrPtr(lib): inf.lpszFncName = StrPtr(func) ' ÂûçûâГ*ГҐГ¬ îðèãèГ*Г*ëüГ*ГіГѕ ГґГіГ*êöèþ If inIDE Then CallBackDllFunctionCall = ideDllFunctionCall(inf) Else: CallBackDllFunctionCall = DllFunctionCall(inf) End If ' ÂîññòГ*Г*Г*âëèâГ*ГҐГ¬ ïåðåõâГ*ГІ Patch End Function ' Г€Г*èöèГ*ëèçГ*öèÿ Public Function Init() As Boolean Dim lib As String Debug.Assert MakeTrue(inIDE) ' Г‚ Г§Г*âèñèìîñòè îò Г±ГЁГІГіГ*öèè âûáèðГ*ГҐГ¬ ГІГі èëè ГЁГ*ГіГѕ áèáëèîòåêó If inIDE Then lib = "vba6" Else lib = "msvbvm60" hMod = LoadLibrary(StrPtr(lib)): If hMod = 0 Then Exit Function Else lpFnc = GetProcAddress(hMod, "DllFunctionCall") ' ГђГ*çðåøГ*ГҐГ¬ Г§Г*ГЇГЁГ±Гј Гў òåëî ГґГіГ*êöèè VirtualProtect ByVal lpFnc, 8, PAGE_EXECUTE_READWRITE, 0: GetMem8 ByVal lpFnc, Dat(0): Patch Init = True End Function Public Function Deinit() As Boolean Call Unpatch: Deinit = True End Function Private Sub Decode(lib As String, fnc As String) Select Case lib Case "The trick", "Z80": lib = StrConv("user32", vbFromUnicode) Case Else: lib = StrConv(lib, vbFromUnicode) End Select Select Case fnc Case "ZX Spectrum", "VECTOR-06C": fnc = StrConv("MessageBoxA", vbFromUnicode) Case Else: fnc = StrConv(fnc, vbFromUnicode) End Select End Sub Private Sub Patch() GetMem4 getAddr(AddressOf CallBackDllFunctionCall) - lpFnc - 5, Jmp(1): Jmp(0) = &HE9 GetMem8 Jmp(0), ByVal lpFnc End Sub Private Sub Unpatch() GetMem8 Dat(0), ByVal lpFnc End Sub Private Function getAddr(ByVal Value As Long) As Long getAddr = Value End Function Private Function MakeTrue(Value As Boolean) As Boolean MakeTrue = True: Value = True End Function
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д