Sources.RU Magazine Поиск по журналу
 

TopList

Полиморфный код как средство защиты ShareWare

Автор: p_kolya

В мире существует много условно-бесплатных программ, их автора заботятся о них, пишут защиты от кряков...но все равно встречаются люди способные взломать программу. Взломать возможно все. Но тогда как защитится? Ok, будет защишаться так, чтобы просто замедлить процесс взлома. Защит много, большиство из них ломаются заменой 1-2 байтов в коде. Я тебе предлагаю использовать полиморфизм в защите. Новичку сломать будет очень тяжело да и продвинутому крякеру будет над чем подумать.

Так в чем же заключается защита? И кто такой полиморфизм? Защита заключается в полиморфизме( изменчивости ) кода. Вобще я предлагаю делать так:

  • Определенный код (пусть функция которая доступна только в зарегистрированной версии) шифруется по определенному паролю, но перед этим вычисляется CRC оригинала и сохраняется. Код шифруется прямо в проге.
  • При запуске программа спрашивает у пользоватеся сериальный ключ. По определенному алгоритму прога пытается восстановить из него ключ расшифровки.
  • Какой-бы не получился ключ, кусок кода расшифровываем и только потом по CRC сравниваем результат с изначальным.
  • Если CRC совпадают, то функцию можно использовать, иначе это незарегистрированная версия

Алгоритм думаю понятен? Заметь, ключ расшифровки, оригинальный код в хранить проге ненужно... иначе куда такая защита? Потом, придумай алгоритм получения ключа расшифровки из сериального номера. Например путь будет это сумма всех символов цифр ключа. Это даст тебе разнообразие ключей, которые ты можешь продавать. Вот например номера: 1256 и 3092 равносильны. Конечно, это только пример и за тобой придумать более сложный алгоритм.

Теперь давай немного о полиморфизме. Я тебе не буду приводить пример готовой проги, а только покажу кто такой полиморфизм :) Вот смотри на исходник:

; defend.asm by p_kolya
; ------------------------------------------------------------------------------
; ml /c /coff /Cp defend.asm
; link /subsystem:windows /LIBPATH:c:\masm32\lib /section:.text,rwe defend.obj
; del defend.obj
; ------------------------------------------------------------------------------
option casemap:none

.486
.model flat, stdcall

include c:\masm32\include\windows.inc
include c:\masm32\include\kernel32.inc
include c:\masm32\include\user32.inc
includelib c:\masm32\lib\user32.lib
includelib c:\masm32\lib\kernel32.lib

.data

password_key equ 13h
encoded_size equ 3Fh

.code

; точка входа
start:
  call encode
  call message
  invoke ExitProcess, NULL

; шифрование функции message
encode:
  mov eax, offset message
  xor ebx, ebx
 xor_loop:
  xor byte ptr [eax], password_key
  inc eax
  inc ebx
  cmp ebx, encoded_size
  jne xor_loop
  ret

; полиморфная фунция
message:
  jmp show_msg
  msg_text db "Hello, World!", 0
  msg_title db "Thank you for registration", 0
 show_msg:
  invoke MessageBox, NULL, offset msg_title, offset msg_text, MB_OK
  ret

end start

Так как сделано в исходнике делать не надо! Тут ключ расшифровки доступен любому! Это только пример!

Ты думаешь этот код будет работать сразу после того, как ты его откомпилируешь? Ты сильно ошибаешься! Чтобы он работал зашифруй код фунции message. Возьми например HIEW или еще какой hex-редактор. И зашифруй каждый байт кода message обычным XOR-ом с ключом password_key (который равен 13h).

Если что-то всеже не получилось, смотри в аттач. Там рабочий пример есть.

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

mailto: p_kolya@narod.ru
website: p_kolya.narod.ru


Скачать исходники:



 Design by Шишкин Алексей (Лёха)  ©2004-2008 by sources.ru