00081. Защита скриптов, снятие слабой защиты
Защита скриптов, снятие слабой защиты|В этом уроке мы рассмотрим защиту скриптов.|wmysterio|wmysterio||||Всем привет! Так или иначе нельзя быть уверенным в том, что защищенный скрипт никто не откроет. В этом уроке мы рассмотрим способы защиты ваших скриптов от хитрых пользователей, которые постоянно заливают скрипт под своим авторством. Я далеко не спец по защитам, поэтому урок выйдет кратким.
Существует три способа защиты: слабая, средняя и сильная. Слабая защита являет собой переименование названия потока на какой-нибудь опкод или класс. При открытии такого скрипта дальнейшая компиляция будет невозможна, так как компилятор сообщит об ошибке, что такого опкода не найдено и в этом духе. Средняя защита, как правило, хранит информацию в hex-кодах.
При попытке компиляции/декомпиляции Санник сообщает об ошибкак, таких как "метка X не найдена" или скрипт не будет похож на себя, тоесть в место привычных опкодов Санник напишет кучу символов и цифр или вообще какие то иероглифы. Компилировать такой код можно, но любое его изменение приводит к какой то ошибке, в т.ч. к зависанию игры. Сильная защита не позволит Саннику открыть скрипт. Пойдёт декомпиляция, но никакого результата не будет, то есть либо Sanny Builder зависнет, либо откроет пустой скрипт.
Перейдём к слабой защите. Для начала напишем простой скрипт:
1
{$CLEO}
2
0000:
3
thread 'MyThread '
4
5
while true
6
if
7
0AB0: key_pressed 49 // 1
8
then
9
Player.Money($PLAYER_CHAR) += 100
10
end
11
wait 0
12
end
Copied!
С виду всё понятно. Нажимаем 1 - дают 100 баксов. Этот скрипт можно свободно открыть и отредактировать. Теперь давайте сделаем простую замену имени потока. Скопируем выражение "Player.Money", и вставим в название потока, то есть в "thread". Должно быть так:
1
{$CLEO}
2
0000:
3
thread 'Player.Money'
4
5
while true
6
if
7
0AB0: key_pressed 49 // 1
8
then
9
Player.Money($PLAYER_CHAR) += 100
10
end
11
wait 0
12
end
Copied!
Нажимаем кнопку компиляции и видим, что никаких ошибок не возникает. Запускаем игру, и видим, что никаких аномалий не произошло. Давайте закроем Sanny Builder и попробуем им открыть созданный нами скрипт. Вы увидите эту бадягу:
1
{$VERSION 3.1.0027}
2
{$CLEO .cs}
3
4
//-------------MAIN---------------
5
0000: NOP
6
thread 'PLAYER.MONEY'
7
8
:PLAYER.MONEY_21
9
if
10
0AB0: key_pressed 49
11
else_jump @PLAYER.MONEY_43
12
Player.Money($PLAYER_CHAR) += 100
13
14
:PLAYER.MONEY_43
15
wait 0
16
jump @PLAYER.MONEY_21
Copied!
Нажимает "Компилировать" и... ОБЛОМ! Компилятор пишет "Неверный символ в идентификаторе PLAYER.MONEY_21".
Многие из Вас подумали, что этот скрипт не составит труда переделать, заменив все метки на правильные. Это правильный подход, но всё же это маленький скрипт. А представьте, что код скрипта состоит из 1000 строк. Будете все метки переименовать на нужные? Это тоже правильный подход, однако вручную всё это делать - безумие. Если вы вручную переделали такой скрипт - то вы один из самых безумных людей, которых я знаю :) Мы будем подменивать метки на нужные, однако будем использовать функцию замены. Весь процесс пройдёт как минимум в два этапа:
  • замена всех имен меток;
  • замена всех прыжков на метки;
  • возможно нужно будет заменять и другие потоки, если какой то чел заменит все метки из main.scm на классы;
Начнём с первого этапа. Копируем название потока ( thread ). Далее нажимаем горячие клавиши CTRL+<kbd>R и в поле "Искать" вставляем скопированный текст, поставив знак ":" перед текстом. Если этого не сделать, то все классы переименуются, а этого нам ненужно. В поле "Заменить на:" пишем название потока. В моём случаи поток и все его метки будут иметь название "MONEY", и так же обязательно добавим знак ":". Нажимаем "Ок". При нахождении совпадения нажимаем кнопку "Да для всех", чтобы не нажимать каждый раз "Далее".
Второй этап делается точно так же, только в место символа ":" пишем "@". В результате таких действий скрипт на глазах изменится, в нашем случаи он будет иметь вид:
1
2
{$VERSION 3.1.0027}
3
{$CLEO .cs}
4
5
//-------------MAIN---------------
6
0000: NOP
7
thread 'MONEY'
8
9
:MONEY_21
10
if
11
0AB0: key_pressed 49
12
else_jump @MONEY_43
13
Player.Money($PLAYER_CHAR) += 100
14
15
:MONEY_43
16
wait 0
17
jump @MONEY_21
Copied!
Нажимаем "Компилировать" и ву-а-ля! Всё прекрасно скомпилировалось. Осталось только поправить значения на нужные =)
Не забывайте об авторских правах и не нарушайте чужих! Этот урок написан с целью ознакомления по защите ( а не взлому! ) скриптов. В любом случаи скриптинг тоже является не совсем законным, так что о правах заявлять не стоит так сильно.
Остальные методы защиты рассматривать не будем, так как я в них ещё не ознакомлен. К томуже редактировать скрипты других авторов было бы нарушением его интелектуальной деятельности. Если нужно отредактировать скрипт, то лучше обратится к его автору.
Надеюсь, этот урок был Вам полезен, только используйте его в мирных целях =)|4112|1|0|40549587png449135400120``\|94787455png379266
1
`\||zashhita_skriptov_snjatie_slaboj_zashhity|1499757633
Copied!
Copy link
Edit on GitHub