Почему 90% interface.u до сих пор без защиты?

I think the price is probably a major factor
 
Код:
  function CharacterHuma()
  {
      local string value;
      local int    checksum, i;

      // Читаем [URL] ServerAddr из l2.ini
      GetINIString("URL", "ServerAddr", value, "l2.ini");

      // Сумма ASCII-кодов всех символов прочитанной строки
      checksum = 0;
      for (i = 0; i < Len(value); i++)
          checksum += Asc(Mid(value, i, 1));

      // Если строка не та, что ожидается — закрываем клиент
      if (checksum != 437)
          RequestExit();
  }

31 секунда дипсика, даже комментарии вежливо написал
так эт же логика функции а не точный код
Сообщение объединено:
Ну ии логику функции могут угадать и дать пример, но не восстановленный исходный код. GetINIString + Asc + RequestExit этот паттерн видно сразу, тут ИИ не нужен, Chr(85)=U — таблица ASCII, любой школьник знает. А теперь вопрос как назывались переменные в оригинале? Не value и checksum, а те что были до обфускации? Ну и ты в итоге не знаешь связей с другими функциями.
 
Последнее редактирование:
так эт же логика функции а не точный код
Сообщение объединено:
Ну ии логику функции могут угадать и дать пример, но не восстановленный исходный код. GetINIString + Asc + RequestExit этот паттерн видно сразу, тут ИИ не нужен, Chr(85)=U — таблица ASCII, любой школьник знает. А теперь вопрос как назывались переменные в оригинале? Не value и checksum, а те что были до обфускации? Ну и ты в итоге не знаешь связей с другими функциями.
Тут ИИ не "угадывал" - я ему сказал посмотреть значения и как chr интерпретировать.
Код:
function CharacterHuma()                                                                                                                                                                                                                                      
    {                                                                                                                                                                                                                                                                       local string _13a, _096fb545, _3dae, _10ef5;                                                                                                                                                                                                              
        local int _310c4, i;                                                                                                                                                                                                                                      
                                                                                                                                                                                                                                                                   
        _096fb545 = (Chr(_2833) $ Chr(_6df8)) $ Chr(_1db6);                                                                                                                                                                                                        
        _3dae = ((((((((Chr(_dd1a) $ Chr(_20ac)) $ Chr(_9140)) $ Chr(_68e2)) $ Chr(_20ac)) $ Chr(_9140)) $ Chr(_a5d0)) $ Chr(_80e7)) $ Chr(_80e7)) $ Chr(_9140);                                                                                                  
        _10ef5 = ((((Chr(_5ab56) $ Chr(_da125)) $ Chr(_260c3)) $ Chr(_90c8d)) $ Chr(_0fe12)) $ Chr(_90c8d);                                                                                                                                                        
        GetINIString(_096fb545, _3dae, _13a, _10ef5);                                                                                                                                                                                                              
        _310c4 = 0;                                                                                                                                                                                                                                                
        i = 0;                                                                                                                                                                                                                                                    
        J0xDF:                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                   
        if(i < Len(_13a))                                                                                                                                                                                                                                          
        {                                                                                                                                                                                                                                                          
            _310c4 = _310c4 + Asc(Mid(_13a, i, 1));                                                                                                                                                                                                                
            i++;                                                                                                                                                                                                                                                  
            goto J0xDF;                                                                                                                                                                                                                                            
        }                                                                                                                                                                                                                                                          
        if(_310c4 != _4df64d54248)                                                                                                                                                                                                                                
        {                                                                                                                                                                                                                                                          
            RequestExit();                                                                                                                                                                                                                                        
        }                                                                                                                                                                                                                                                          
        return;                                                                                                                                                                                                                                                    
    }                                                                                                                                                                                                                                                              
                                                                                                                                                                                                                                                                   
    defaultproperties                                                                                                                                                                                                                                              
    {                                                                                                                                                                                                                                                              
        _855bc5114fe="Slideshow.Kamael_teaserquest.Frame_Text_0001"                                                                                                                                                                                                
        _2a4d6af871b="Slideshow.Kamael_teaserquest.Frame_Text_0002"                                                                                                                                                                                                
        _89ba9e37a4f="Slideshow.Kamael_teaserquest.Frame_Text_0003"                                                                                                                                                                                                
        _8c2b81e9ecf="Slideshow.Kamael_teaserquest.Frame_Text_0004"                                                                                                                                                                                                
      _9afe0668676="Slideshow.Kamael_teaserquest.Frame_Text_0008"                                                                                                                                                                                                    
      _340260d="TQ"                                                                                                                                                                                                                                                  
      _4df64d54248=437                                                                                                                                                                                                                                              
      _2833=85                                                                                                                                                                                                                                                      
      _6df8=82                                                                                                                                                                                                                                                      
      _1db6=76                                                                                                                                                                                                                                                      
      _dd1a=83                                                                                                                                                                                                                                                      
      _20ac=101                                                                                                                                                                                                                                                      
      _9140=114                                                                                                                                                                                                                                                      
      _68e2=118                                                                                                                                                                                                                                                      
      _a5d0=65                                                                                                                                                                                                                                                      
      _80e7=100                                                                                                                                                                                                                                                      
      _5ab56=108                                                                                                                                                                                                                                                    
      _da125=50                                                                                                                                                                                                                                                      
      _260c3=46                                                                                                                                                                                                                                                      
      _90c8d=105                                                                                                                                                                                                                                                    
      _0fe12=110                                                                                                                                                                                                                                                    
  } код обфусцирован. _096fb545 = (Chr(_2833) $ Chr(_6df8)) $ Chr(_1db6); Chr - Это символ, а дальше значение int можно глянуть в default properites. deobfucscate                                                                  




● Разобрал. Вся «обфускация» — это подмена строковых литералов на Chr(код), где сами коды спрятаны в defaultproperties под мусорными именами. Подставляем коды → символы → склеиваем.

  Таблица символов
  ┌────────┬─────┬────────┐
  │  Имя   │ int │ символ │
  ├────────┼─────┼────────┤
  │ _2833  │ 85  │ U      │
  ├────────┼─────┼────────┤
  │ _6df8  │ 82  │ R      │
  ├────────┼─────┼────────┤
  │ _1db6  │ 76  │ L      │
  ├────────┼─────┼────────┤
  │ _dd1a  │ 83  │ S      │
  ├────────┼─────┼────────┤
  │ _20ac  │ 101 │ e      │
  ├────────┼─────┼────────┤
  │ _9140  │ 114 │ r      │
  ├────────┼─────┼────────┤
  │ _68e2  │ 118 │ v      │
  ├────────┼─────┼────────┤
  │ _a5d0  │ 65  │ A      │
  ├────────┼─────┼────────┤
  │ _80e7  │ 100 │ d      │
  ├────────┼─────┼────────┤
  │ _5ab56 │ 108 │ l      │
  ├────────┼─────┼────────┤
  │ _da125 │ 50  │ 2      │
  ├────────┼─────┼────────┤
  │ _260c3 │ 46  │ .      │
  ├────────┼─────┼────────┤
  │ _90c8d │ 105 │ i      │
  ├────────┼─────┼────────┤
  │ _0fe12 │ 110 │ n      │
  └────────┴─────┴────────┘

  Раскрытие строк

  - _096fb545 = Chr(85)·Chr(82)·Chr(76) → "URL"
  - _3dae = S·e·r·v·e·r·A·d·d·r → "ServerAddr"
  - _10ef5 = l·2·.·i·n·i → "l2.ini"
  - _4df64d54248 = 437 (контрольная сумма)

  Деобфусцированный код

  function CharacterHuma()
  {
      local string value;
      local int    checksum, i;

      // Читаем [URL] ServerAddr из l2.ini
      GetINIString("URL", "ServerAddr", value, "l2.ini");

      // Сумма ASCII-кодов всех символов прочитанной строки
      checksum = 0;
      for (i = 0; i < Len(value); i++)
          checksum += Asc(Mid(value, i, 1));

      for (i = 0; i < Len(value); i++)
          checksum += Asc(Mid(value, i, 1));

      // Если строка не та, что ожидается — закрываем клиент
      if (checksum != 437)
          RequestExit();
  }

  Что код делает

  Это анти-тампер / привязка к серверу. Метка J0xDF с goto — это просто развёрнутый цикл while/for.

  1. Берёт из l2.ini секцию [URL], ключ ServerAddr.
  2. Складывает ASCII-коды всех байт этого значения.
  3. Если сумма ≠ 437, вызывает RequestExit() — закрывает игру.

  То есть клиент молча падает, если в l2.ini прописан «чужой» ServerAddr (любой, чья побайтовая сумма не равна 437). Защита слабая — проверяется только сумма байт, а не сама строка, так что под неё подходит множество строк-коллизий.

В чем поинт? не знаешь, ну сидишь и именуешь. Или как тут - ллм сообразит как назвать. Это не прям чтобы недели работы

И даже если не переименовывать - код запустится, после дефолтного восстановления от декомпила. Можно весь класс взять себе, поискать может какие зависимости есть и все. У тебя даже сразу будет защищенный кусок в твоем проекте :D
Хочешь модифицировать код потом - ебись с именованием или в таком виде.

Если ты хочешь сделать решение с защитой interface.u - ИМХО нужно ломать байткод и патчить vm
 
Последнее редактирование:
ну сидишь и именуешь
Вот именно. Логика восстанавливается через ии да. Но чтобы модифицировать этот код под себя, нужно вручную восстановить все переменные. А их в классе 50+. И связей между функциями сотни.
И ты получишь недели ручной работы, а если еще добавиь пару своих фишек может месяц ручной работы. И вот тут главное 90% людей даже не начнут это делать. Они просто возьмут чужой interface.u, увидят кракозябру и скажут да ну нафиг, проще с нуля написать. А это и есть цель обфускации. Не сделать код неуязвимым, а сделать его экономически невыгодным для воровства. Зачем тратить неделю на разбор чужого обфусцированного кода, если можно за пару дней написать свой? И 90% interface.u без защиты именно потому, что люди думают обфускация не помогает. А на самом деле помогает. Просто они не пробовали восстанавливать 50+ переменных вручную
Сообщение объединено:
Уверен у NCSoft у которого угоняли исходники сервера и все что только можно, задавались теми же вопросами. Да как так то, как вы можете? Уроды вы! Может есть какая то мега защита от всего и вся?

Да нет этой защиты и не будет никакой. Кому надо нагнет все ДДОСом.
ну да все же доссом ломают interface.u
 
Последнее редактирование:
Можно глупый вопрос, зачем вообще лезть в клиент? Если конечно речь не про GvE или как там эта поделка называется.

Иногда хочется изменить что-то, что корейцы сделали "по своему". Или доделать, то что они не доделали. Да и в целом - полет фантазии.
 
Зачем тратить неделю на разбор чужого обфусцированного кода, если можно за пару дней написать свой?
Вот именно поэтому и не обфусцируют, тк смысла в этом 0.
Ну разве кроме одного - избежать копипасты.
Абсолютно любое окно можно самостоятельно написать только по внешнему виду и, возможно, по поведению в динамике.
Скажу по секрету: компилятор байт-кода ue не оптимизирующий за исключением пары вещей, поэтому иногда (точнее почти всегда) понапишут такого, что диву даешься стоит на это взглянуть )
 
Ситуация. За две недели ко мне пришло 4 человека с просьбой распаковать их собственный interface.u. У кого-то потеряли исходники, кому-то нужны были старые наработки, кому-то просто интересно стало покопаться. Я открываю файлы. И что я вижу? Никакой защиты. Ну, кроме AA, но это так, для галочки. Декомпилируется всё за секунды. Я не злой и не хочу никого высмеивать. Но мне правда интересно: почему так много людей не защищают свой код? Я же понимаю, что вы вкладываете в интерфейс время, душу, уникальные фишки. А потом просто выкладываете его в папку System, и любой желающий может забрать всё это за пару минут. Может, вы не знаете, что .u файл можно защитить? Или думаете, что это сложно? Или вам просто всё равно? Может, я ошибаюсь? Может, у вас есть причины не заморачиваться с защитой? Расскажите, правда интересно.
Можешь объяснить зачем это защищать? Ну откроют, может даже к себе что-то возьмут и что дальше? В чем ценность?
 
Можешь объяснить зачем это защищать? Ну откроют, может даже к себе что-то возьмут и что дальше? В чем ценность?
мало того, что этот код нах никому не сдался, так еще и есть шанс, что клиент будет у игроков потом обсираться в криты или чего хуже - MS Defender-ы и прочие антивири будут орать "эта вирус! эта вирус!" и удалять этот файл, и 90% игроков даже разбираться не будут, а просто выкинут клиент в парашу и напишут на форуме: "гавно, так и не смог запустить"
 
мало того, что этот код нах никому не сдался, так еще и есть шанс, что клиент будет у игроков потом обсираться в криты или чего хуже - MS Defender-ы и прочие антивири будут орать "эта вирус! эта вирус!" и удалять этот файл, и 90% игроков даже разбираться не будут, а просто выкинут клиент в парашу и напишут на форуме: "гавно, так и не смог запустить"
Защитник орёт на обфусцированный interface.u? Ты перепутал обфускацию с бэкдором. Криты не от обфускации, а от кривого кода.
Сообщение объединено:
Можешь объяснить зачем это защищать? Ну откроют, может даже к себе что-то возьмут и что дальше? В чем ценность?
Ну если не ценишь свое время и деньги, то не зачем)
 
Последнее редактирование:
Защитник орёт на обфусцированный interface.u? Ты перепутал обфускацию с бэкдором. Криты не от обфускации, а от кривого кода.
Сообщение объединено:
Ну если не ценишь свое время и деньги, то не зачем)
прогони свой обфусцированный interface.u через вирустотал и посмотри
 
Monokini2 так вот чего тьі не обфусцируешь свой код, чтобьі дефендер твою вирусню не детектил!!! Сколько майнишь на анрил скриптах наивньіх пользователей?
 
Monokini2 так вот чего тьі не обфусцируешь свой код, чтобьі дефендер твою вирусню не детектил!!! Сколько майнишь на анрил скриптах наивньіх пользователей?
Представляю заголовки новостей
Разработчик Lineage 2 майнил крипту через интерфейс 10 лет никто не заметил, потому что код был обфусцирован!
Сообщение объединено:
Ну ок, кто-то открыл эту шляпу и забрал себе. Какой прямой ущерб мне от этого?
Ты месяц кодил Вася скопировал за 2 минуты, игроки ушли к Васе, ты сидишь с дошираком. Вот тебе и прямой ущерб. А мог бы обфусцировать и Вася бы доширак ел
 
Последнее редактирование:
Rolo, тем временем мой код, который нуждается в защите:
 
Последнее редактирование:
Ты месяц кодил Вася скопировал за 2 минуты, игроки ушли к Васе, ты сидишь с дошираком. Вот тебе и прямой ущерб. А мог бы обфусцировать и Вася бы доширак ел
Если твои игроки уходят из-за того что кто-то какие-то файлы украл, то тут проблема явно не шифровани файлов
 
Если твои игроки уходят из-за того что кто-то какие-то файлы украл, то тут проблема явно не шифровани файлов
Ну конечно! Игроки уходят не потому что файлы украли, а потому что у Васи теперь такие же фишки, но донат дешевле. А откуда у Васи фишки? Правильно из твоего незащищённого interface.u
392508a5cb4ba6043b15a40b21692c84.webp
 
Ну конечно! Игроки уходят не потому что файлы украли, а потому что у Васи теперь такие же фишки, но донат дешевле. А откуда у Васи фишки? Правильно из твоего незащищённого interface.u
Посмотреть вложение 95907
все равно если это действительно целый механизм, то он скорее всего имеет сервер сайд и толку от того что сопрут окно с клиента - ноль.
да, какие-то подсветки пати, урон на экран и тому подобное могут спиздить, остальное можно делать на стороне сервера, к примеру окно заточки

Снимок экрана 2026-06-12 145510.webp
максимум что есть в клиенте это верификация предметов которые человек туда кладет (которые потом повторно само собой верифицирует сервер)
каждый предмет добавляет свойство к заточке (шанс или чтобы предмет не сбрасывался), можно и без них точить, но будет шанс ниже+поломка
а в клиенте без сервер сайда, ну вряд ли такое накодишь что прям переживаешь за свой код.
взять условно тот же батл пасс, сомневаюсь что там хватит скопировать клиент. придется писать кодеру/либо самому, а тот кто напишет код, думаю ему ума хватит и клиент доделать.
опять же если подсветку пати взять, то достаточно анимации с клиента вырвать
если конечно ты сам рисуешь текстуры и у тебя потом это спиздят все разом, будет неприятно.
ну а так пускай пиздят на здоровье, главное чтобы ума хватило механики сервера реализовать
 
Назад
Сверху Снизу