00081. Защита скриптов, снятие слабой защиты

Защита скриптов, снятие слабой защиты|В этом уроке мы рассмотрим защиту скриптов.|wmysterio|wmysterio||||Всем привет! Так или иначе нельзя быть уверенным в том, что защищенный скрипт никто не откроет. В этом уроке мы рассмотрим способы защиты ваших скриптов от хитрых пользователей, которые постоянно заливают скрипт под своим авторством. Я далеко не спец по защитам, поэтому урок выйдет кратким.

Существует три способа защиты: слабая, средняя и сильная. Слабая защита являет собой переименование названия потока на какой-нибудь опкод или класс. При открытии такого скрипта дальнейшая компиляция будет невозможна, так как компилятор сообщит об ошибке, что такого опкода не найдено и в этом духе. Средняя защита, как правило, хранит информацию в hex-кодах.

При попытке компиляции/декомпиляции Санник сообщает об ошибкак, таких как "метка X не найдена" или скрипт не будет похож на себя, тоесть в место привычных опкодов Санник напишет кучу символов и цифр или вообще какие то иероглифы. Компилировать такой код можно, но любое его изменение приводит к какой то ошибке, в т.ч. к зависанию игры. Сильная защита не позволит Саннику открыть скрипт. Пойдёт декомпиляция, но никакого результата не будет, то есть либо Sanny Builder зависнет, либо откроет пустой скрипт.

Перейдём к слабой защите. Для начала напишем простой скрипт:

{$CLEO}
0000:
thread 'MyThread '

while true
 if
 0AB0: key_pressed 49 // 1
 then
 Player.Money($PLAYER_CHAR) += 100
 end
wait 0
end

С виду всё понятно. Нажимаем 1 - дают 100 баксов. Этот скрипт можно свободно открыть и отредактировать. Теперь давайте сделаем простую замену имени потока. Скопируем выражение "Player.Money", и вставим в название потока, то есть в "thread". Должно быть так:

{$CLEO}
0000:
thread 'Player.Money'

while true
 if
 0AB0: key_pressed 49 // 1
 then
 Player.Money($PLAYER_CHAR) += 100
 end
wait 0
end

Нажимаем кнопку компиляции и видим, что никаких ошибок не возникает. Запускаем игру, и видим, что никаких аномалий не произошло. Давайте закроем Sanny Builder и попробуем им открыть созданный нами скрипт. Вы увидите эту бадягу:

{$VERSION 3.1.0027}
{$CLEO .cs}

//-------------MAIN---------------
0000: NOP 
thread 'PLAYER.MONEY' 

:PLAYER.MONEY_21
if 
0AB0: key_pressed 49 
else_jump @PLAYER.MONEY_43 
Player.Money($PLAYER_CHAR) += 100

:PLAYER.MONEY_43
wait 0 
jump @PLAYER.MONEY_21

Нажимает "Компилировать" и... ОБЛОМ! Компилятор пишет "Неверный символ в идентификаторе PLAYER.MONEY_21".

Многие из Вас подумали, что этот скрипт не составит труда переделать, заменив все метки на правильные. Это правильный подход, но всё же это маленький скрипт. А представьте, что код скрипта состоит из 1000 строк. Будете все метки переименовать на нужные? Это тоже правильный подход, однако вручную всё это делать - безумие. Если вы вручную переделали такой скрипт - то вы один из самых безумных людей, которых я знаю :) Мы будем подменивать метки на нужные, однако будем использовать функцию замены. Весь процесс пройдёт как минимум в два этапа:

  • замена всех имен меток;

  • замена всех прыжков на метки;

  • возможно нужно будет заменять и другие потоки, если какой то чел заменит все метки из main.scm на классы;

Начнём с первого этапа. Копируем название потока ( thread ). Далее нажимаем горячие клавиши CTRL+<kbd>R и в поле "Искать" вставляем скопированный текст, поставив знак ":" перед текстом. Если этого не сделать, то все классы переименуются, а этого нам ненужно. В поле "Заменить на:" пишем название потока. В моём случаи поток и все его метки будут иметь название "MONEY", и так же обязательно добавим знак ":". Нажимаем "Ок". При нахождении совпадения нажимаем кнопку "Да для всех", чтобы не нажимать каждый раз "Далее".

Второй этап делается точно так же, только в место символа ":" пишем "@". В результате таких действий скрипт на глазах изменится, в нашем случаи он будет иметь вид:


{$VERSION 3.1.0027}
{$CLEO .cs}
 
//-------------MAIN---------------
0000: NOP 
thread 'MONEY' 
 
:MONEY_21
if 
0AB0: key_pressed 49 
else_jump @MONEY_43 
Player.Money($PLAYER_CHAR) += 100
 
:MONEY_43
wait 0 
jump @MONEY_21

Нажимаем "Компилировать" и ву-а-ля! Всё прекрасно скомпилировалось. Осталось только поправить значения на нужные =)

Не забывайте об авторских правах и не нарушайте чужих! Этот урок написан с целью ознакомления по защите ( а не взлому! ) скриптов. В любом случаи скриптинг тоже является не совсем законным, так что о правах заявлять не стоит так сильно.

Остальные методы защиты рассматривать не будем, так как я в них ещё не ознакомлен. К томуже редактировать скрипты других авторов было бы нарушением его интелектуальной деятельности. Если нужно отредактировать скрипт, то лучше обратится к его автору.

Надеюсь, этот урок был Вам полезен, только используйте его в мирных целях =)|4112|1|0|40549587png449135400120``\|94787455png379266

`\||zashhita_skriptov_snjatie_slaboj_zashhity|1499757633

Last updated