Уроки моддинга
Основной раздел
Search…
⌃K
Links

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