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

Принятый ответ

Tumart:
quq_CCCP, а можно поподробнее? И это защитит карту от инжекта?
Подробно - это сделай за меня?
Суть:
 call  BJDebugMsg( I2Sx( 100500  ) )
Выдаст разные значения в депротектнутой и нормальной картах, пока это теория но возьмите и проверьте.
I2Sx - фольклорная функция ретурн бага, суть преобразует хеш от строки в строку. именно хеш а не инт. т.е адрес в таблице строк на строку.
вот RetunrBug ( www.hiveworkshop.com/threads/accessing-memory-from-the-script-it... )
функция в либе Typecast - I2SH
Ну кароче проверил:
function Trig_J_Test_Actions takes nothing returns nothing
    local integer i = 486
    local string str = null
    set str = S2S( I2SH( i ) )
    call BJDebugMsg( str )
    set str = null
endfunction

//===========================================================================
function InitTrig_J_Test takes nothing returns nothing
    set gg_trg_J_Test = CreateTrigger(  )
    call TriggerRegisterPlayerEventEndCinematic( gg_trg_J_Test, Player(0) )
    call TriggerAddAction( gg_trg_J_Test, function Trig_J_Test_Actions )
endfunction
При добавлении, удалении 3 функций сменяется строка по этому адресу, самое главное найти последнюю строку (ну или как я от балды ввел число) хотя я не уверен что прокатит с числом от балды, нужно найти последнюю строку на момент загрузки карты и смотреть её адрес, а после смотреть что будет записано по этому адресу в таблице строк.
0
32
8 лет назад
0
Эмм, я помнится делал - о чем пожалел, проверка длины файла, при перепаковке карта фаталит причем довольно не очевидно почему.
Так же гробим архив корейскими тулами, можно еще малость руками - открыть откроют, но не инжектнут.
0
20
8 лет назад
0
Если коротко (очень) - никак. От слова совсем.
Можно писать запутанный код, прогонять карту под тулсами векса и прочих, менять файлы в самом архиве карты, чтобы триггеры при запуске в редакторе перетирались, НО - все это можно проделать и в обратную сторону
Так что если кому-то вдруг в 2016 захочется расковырять твою карту и этот кто-то имеет мышление лучше, чем у семиклассника - расковыряет
Как бы ты не пытался её защитить, расковыряет
0
32
8 лет назад
0
Кстати у сударя карта то уже готова?
0
12
8 лет назад
0
Не без известный здесь человек-статья говорит делать проверку на хендлы объектов. Наверное это сейчас единственный нормальный способ. Протектить карту непосредственно с расчетом на то, что не вскроют сам архив - пустая трата времени.
0
6
8 лет назад
Отредактирован Tumart
0
Кстати у сударя карта то уже готова?
quq_CCCP, да я пока другой картой занят.
0
32
8 лет назад
0
Astra:
Не без известный здесь человек-статья говорит делать проверку на хендлы объектов. Наверное это сейчас единственный нормальный способ. Протектить карту непосредственно с расчетом на то, что не вскроют сам архив - пустая трата времени.
Щяс снова доступен ретурн баг, щяс думаю а получится ли проверить хещтаблицу срок, после депротекта и инжекта поедет таблица строк (ибо в хештаблицу попадают даже имена функций, кастомных разумеется ).
0
6
8 лет назад
0
Так же гробим архив корейскими тулами, можно еще малость руками - открыть откроют, но не инжектнут.
quq_CCCP, а руками это что конкретно? Я вот делал так: 1. Прогнал W3COpt 2 Прогнал через Тулы Векса 3. Прошелся спазлером, потом патчером после новым мпкушником удалил лист файл полностью.
0
12
8 лет назад
0
quq_CCCP, ну пока это теория без практики.
Tumart, Спазлеры, патчи, векс - это все давно открывается без особого труда. Забудь про способ закрыть архив. Только чеками внутри карты можно что то сделать, во всяком случае при защите от дилетантов.
0
6
8 лет назад
0
Astra, так в том то и дело, что не от дилетантов(. Так то оно понятно, что нужно протектить с помощью самого кода, но как наиболее эффективно это сделать.
0
32
8 лет назад
0
Tumart:
Так же гробим архив корейскими тулами, можно еще малость руками - открыть откроют, но не инжектнут.
quq_CCCP, а руками это что конкретно? Я вот делал так: 1. Прогнал W3COpt 2 Прогнал через Тулы Векса 3. Прошелся спазлером, потом патчером после новым мпкушником удалил лист файл полностью.
В хекс редакторе, ищищь нужные байты и меняешь, сначала гадим заголовок, потом отрец значение в хештаблицу архива или как тут уже делали умельны лже war3map.j файл в хештаблицу.
Если кто в танке, то в мпк может быть 100500 файлов разных версий, с одим и тем же именем - особенность фомата, игра всегда берет последний из списка, а мпк редактор первый - это баг публичного софта.
0
6
8 лет назад
0
quq_CCCP, а можно поподробнее? И это защитит карту от инжекта?
1
32
8 лет назад
Отредактирован quq_CCCP
1
Tumart:
quq_CCCP, а можно поподробнее? И это защитит карту от инжекта?
Подробно - это сделай за меня?
Суть:
 call  BJDebugMsg( I2Sx( 100500  ) )
Выдаст разные значения в депротектнутой и нормальной картах, пока это теория но возьмите и проверьте.
I2Sx - фольклорная функция ретурн бага, суть преобразует хеш от строки в строку. именно хеш а не инт. т.е адрес в таблице строк на строку.
вот RetunrBug ( www.hiveworkshop.com/threads/accessing-memory-from-the-script-it... )
функция в либе Typecast - I2SH
Ну кароче проверил:
function Trig_J_Test_Actions takes nothing returns nothing
    local integer i = 486
    local string str = null
    set str = S2S( I2SH( i ) )
    call BJDebugMsg( str )
    set str = null
endfunction

//===========================================================================
function InitTrig_J_Test takes nothing returns nothing
    set gg_trg_J_Test = CreateTrigger(  )
    call TriggerRegisterPlayerEventEndCinematic( gg_trg_J_Test, Player(0) )
    call TriggerAddAction( gg_trg_J_Test, function Trig_J_Test_Actions )
endfunction
При добавлении, удалении 3 функций сменяется строка по этому адресу, самое главное найти последнюю строку (ну или как я от балды ввел число) хотя я не уверен что прокатит с числом от балды, нужно найти последнюю строку на момент загрузки карты и смотреть её адрес, а после смотреть что будет записано по этому адресу в таблице строк.
Принятый ответ
0
12
8 лет назад
0
Смысл по сути тот же что и сравнивать значения заголовков от первой до последней строки через хэш-таблицу. Так и без РБ можно сделать.
0
32
8 лет назад
0
Astra:
Смысл по сути тот же что и сравнивать значения заголовков от первой до последней строки через хэш-таблицу. Так и без РБ можно сделать.
Без рб низя залезть в именя функций, хеш от сроки (именно хеш а не всякое гно) можно тока через рб.
0
20
8 лет назад
0
quq_CCCP:
кук, ты говорил о проверке размера карты
а как ты запишешь число-размер-ключ, если после сохранения он опять изменится?
0
32
8 лет назад
0
ssbbssc:
quq_CCCP:
кук, ты говорил о проверке размера карты
а как ты запишешь число-размер-ключ, если после сохранения он опять изменится?
Ну ты сначало смотришь на что изменится, а потом сохраняешь с проверкой, что мешает узнать какое оно будет в игре?
0
28
8 лет назад
Отредактирован nvc123
0
quq_CCCP, мб ты имеешь ввиду не хеш а адрес в таблице
ибо хеш это результат действия хеш функции и для 1 и той же строки он не должен меняться(один из пунктов определения)
0
32
8 лет назад
0
nvc123:
quq_CCCP, мб ты имеешь ввиду не хеш а адрес в таблице
ибо хеш это результат действия хеш функции и для 1 и той же строки он не должен меняться(один из пунктов определения)
Ну функция везде именуется StringHash но она возвращает именно адрес как ты и написал, а не инт от балды. Это нам и нужно, "" - первая строка в карте, а последнюю нужно найти, глядя что по адресу последней строки в карте можно сделать вывод модифицировали ли код или нет?
0
6
8 лет назад
0
Такс, ну в принципе суть ответа ясна. Всем спасибо.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.