Ответы пользователя по тегу Reverse engineering
  • Как функционируют читы в онлайн играх (Multiplayer)?

    saboteur_kiev
    @saboteur_kiev Куратор тега Разработка игр
    software engineer
    Они каким-то образом вызывают на стороне клиента функционал который есть в игре (native code C++), или вызывают функционал предоставленный конкретным мультиплеером для клиентской стороны (client-side), тогда, как они это все синхронизируют?


    Все читы используют один из двух вариантов.

    1. Вмешательство в общение между клиентом и сервером, для чего нужно знать что может слать сервер клиенту и клиент серверу, и выяснять какие вещи сервер проверяет, а какие нет.

    2. Вмешательство в работу клиента, вызов его определенных функций (или подмена их на свои) при помощи вмешательства в процесс или dll-injection, что например делает autoaim.

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

    Например представим простую мобильную игру, кубик рубик.
    Сервер присылает вам запутанный кубик, который вам нужно собрать его за x ходов.

    Что нужно определить:

    Что отправляет клиент - каждый ход отдельно, или итог в конце.

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

    Если клиент отправляет результат уже в конце, то проверить - он отправляет всю последовательность ходов или просто пакет типа "уровень пройден, потрачено xx ходов". В этом случае вообще не проблема подделать такой пакет, и сразу его отправлять, проходя уровни мгновенно, не решая задачу в принципе. Или например взломам количество доступных ходов, чтобы можно было поиграться без лимита, а при отправке возможно в пакете нужно будет отправлять "легальное" количество ходов. А есть еще вероятность что на стороне сервера никто не проверяет валидность. А может быть и наоборот, что вся последовательность ходов и их количество хешируется, корректность хеша проверяется на стороне сервера.
    И так далее.

    Выдача визуальной подсказки куда двигаться - это вмешательство в клиент, никак не затрагивая работу сервера. Грубо говоря autoaim, который отследить программно проблематично, особенно если его правильно сделать.
    А подделка пакета - это вмешательство в протокол обмена.

    Во всех случаях нужно уметь программировать и реверс-инженерить, а также долго разбираться как работает сервер и клиент. И если у вас нет доступа к исходному коду сервера и клиента, задача в разы усложняется.
    Ответ написан
  • Как прочитать что тут написано?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Просто у тебя кодировка не поддерживает русские символы.
    Банально utf-8 включи и
    $ echo "4865 6c6c 6f20 576f 726c 6421 20d0 9ad0b0d0 ba20 d182 d0b2 d0be d0b8 20d0 b4d0b5d0 bbd0 b03f 20d0 a7d1 82d0 be20 d0b4d0b5 d0bb d0b0 d0b5 d188 d18c 3f20 d09fd0be d187 d0b5 d0bc d183 20d1 82d0 b0d0ba3f 0a"|tr -d " "| xxd -r -p
    Hello World! Как твои дела? Что делаешь? Почему так?
    Ответ написан
  • Где изучить unix и reverse?

    saboteur_kiev
    @saboteur_kiev Куратор тега IT-образование
    software engineer
    Есть подозрение, что ты изучил только основы основ С++, иначе не было бы подобного вопроса.
    Ты уже написал свою первую простенькую игру на С++?
    Ты уже попробовал ее взломать через отладчик?
    А ведь это и есть основа reverse engineering?
    Ответ написан
    4 комментария
  • Где изучать *nix и основы Reverse Engineering?

    saboteur_kiev
    @saboteur_kiev Куратор тега IT-образование
    software engineer
    В основном такое изучают дома.
    Читают много документации по *nix, читают много документации по тому как работает ОС, стандартные протоколы и способы хранения и передачи данных.
    Затем много практики, и уже можно пробовать реверс-инженерить.

    Но вопрос ненужный.
    Это все равно как "где изучают строительство атомных электростанций". Понятно что сперва бы физику подтянуть..
    Ответ написан
    Комментировать
  • Как через HEX Editor менять строковые переменные на бОльшую длину?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    У меня проблема - как через молоток вместо шкафа метр на метр поставить кресло метр на метр я понимаю, а как вместо шкафа метр на метр поставить диван метр на два метра, чтобы все влезло?

    Нужно все-таки понять, что hex-редактор это просто инструмент. И дело не в hex редакторе а в данных, которые вы где-то правите - никто не знает, можно ли В ПРИНЦИПЕ увеличить длину строки в вашем файле, если это исполняемый файл.
    И вопрос не в hex редакторе - это просто инструмент. Вопрос в самих данных, которые вы где-то редактируете и про которые в вопросе ничего не сказано.
    Ответ написан
  • Как работают программы для реверс-инженеринга?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    обычного кода превращают код в ассемблер

    Обычный код это практически и есть ассемблер.
    Процесс называется декомпиляция.
    Умеет практически любой отладчик.

    Программ для "реверс инженеринга" не существует. Есть программы для отладки. Те, кто знает как работают различные системы и протоколы, могут использовать их для реверс-инженеринга.

    Парень. Не существует программы, которая за тебя все похакает. Нужно учить очень много, и для начала просто научиться программировать хоть на чем-нибудь.

    Ты задаешь уже шестой не очень умный вопрос, на который ЛЕГКО найти готовый ответ, если воспользоваться поиском. Но тебе видимо лень. Именно это и показатель, что у тебя вряд ли что-то получится. Слишком ленивый для обучения.
    Ответ написан
    4 комментария
  • Как воруют, просматривают, копируют исходные коды?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Реверс инженеринг и воровство исходного кода разные вещи.
    Чтобы получить полезный ответ на свой вопрос, нужно научиться формулировать вопрос, а ты намешал в вопрос и коней и людей.

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

    lurkmore.to/Reverse_Engineering
    https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%80%D...
    https://ru.wikipedia.org/wiki/%D0%98%D1%81%D1%85%D...
    https://ru.wikipedia.org/wiki/%D0%97%D0%B0%D1%89%D...
    Ответ написан
  • Какими знаниями нужно обладать для написания своего "АнтиВируса"?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Изучить архитектуру операционной системы
    Научиться писать свои вирусы
    изучить английский и читать англоязычные форумы/тусовки
    Ответ написан
    Комментировать
  • Как научится реверс-инженерингу?

    saboteur_kiev
    @saboteur_kiev Куратор тега IT-образование
    software engineer
    А что такого сложного в регистрах?

    Все просто, в Си вы можете создать переменную разного типа - строка, число, кортеж, массив, флоат, целочисленное число и так далее.
    А в ассемблере есть только байт, слово, двойное слово - все кратно байту.

    В Си вы можете создать сколько угодно произвольных переменных - a, b, x, y, counter, mysupervariable и хранить в них значения
    У процессора нет возможности создавать произвольные переменные. Но есть железно зашитые прямо в процессоре регистры.
    И инструкции процессора умеют с регистрами работать.

    Некоторые регистры активно используются для хранения промежуточных значений.
    Например в Си вы можете
    x = 3 * 6
    А в ассемблере нельзя
    ячейка_памяти_по_адресу(100) = 3*6
    Нет такой инструкции, не предусмотрена архитектурой процессора.

    Зато можно занести в регистр AX = 3, в регистор BX = 6 и вызвать инструкцию процессора - умножь значение AX на BX, значение автоматически поместится в AX.
    mov  ax, 3
    mov  cx, 6
    mul  cx

    Результат будет в регистре AX. Затем второй инструкцией можно будет занести результат из AX в ячейку памяти 100.
    mov [100h], ax

    Вот и все.
    Ответ написан
    2 комментария
  • Что проще декомпилировать хакеру: код C/C++ с -O1 или код LuaJIT?

    saboteur_kiev
    @saboteur_kiev Куратор тега C++
    software engineer
    зависит от опыта.
    Если сталкивался с LuaJIT, то LuaJIT, если сталкивался с С/С++, то с/С++.

    Как бы общего хакерского системного образования не существует.
    Ответ написан
    Комментировать
  • Как правильно изучать программирование?

    saboteur_kiev
    @saboteur_kiev Куратор тега IT-образование
    software engineer
    А что если я буду по урокам , книгам учиться писать DLL , но не буду учить сам C++ для этого?


    Ваш вопрос звучит как "А если я буду по урокам и книгам учить грамматику, но не буду учить алфавит и сами буквы для этого"

    Язык - это БАЗОВОЕ. Можно не лезть в дебри языка, но без основ языка вы в принципе писать не сможете.
    Ответ написан
    Комментировать
  • Как передать информацию на динамический массив программы?

    saboteur_kiev
    @saboteur_kiev Куратор тега Программирование
    software engineer
    Для этого вам нужна не программа а исходный код программы, который можно поправить.

    Опять же, судя по вашим вопросам и по их формулировке - вы не разбираетесь в программировании и в ИТ, но намереваетесь своими силами выполнить реверс инженеринг программы (что требует знаний выше, среднестатистического новичка в программировании), вдобавок написанной очень давно.

    Не нужно это делать, для этого просто наймите на фрилансе людей, или контору. Либо хотя бы предоставьте примеры файлов, чтобы кто-то мог подсказать куда копать (опять же подсказки только дадут дополнительную информацию, а не решат задачу).
    Ответ написан
    2 комментария
  • Как расшифровать код типа: b872 0000 0000 0000 4075 0000 0000 0000?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Тут ничего не зашифровано.
    Просто данные, содержат строки текста типа:
    class_AlarmRealm,class_MusicTrackRealm,class_SleepPhaseRealm,class_SleepPointRealm,class_SleepRealm,class_SnoreRealm,class_TrendRealm,class_WeatherHourRealm,pk_table,pk_property

    Подозреваю, что это внутренний формат какой-то программы, поскольку известной сигнатуры в начале нет.
    Нужно не расшифровывать а реверс-инженерить.
    Ответ написан
    Комментировать
  • Как найти где проверяется ключ?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    А вы вообще разбираетесь в ассемблере хотя бы немного?
    Архитектура компьютера?
    Банально - в какой кодировке искали ключевую фразу?
    Ответ написан
    1 комментарий
  • Есть ли Bug Bounty программы для ПК приложений под Windows?

    saboteur_kiev
    @saboteur_kiev Куратор тега Windows
    software engineer
    Да и вообще, можно ли зарабатывать на поиске багов в приложениях под Windows.


    Конечно. Идите в QA, там этим постоянно занимаются.
    Ответ написан
    Комментировать
  • Как найти адрес памяти текстуры?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Но как именно искать адреса объектов в памяти если не знаешь что они из себя там представляют?


    Никак. Суть читерства заключается в том, что вы понимаете как все работает, и ломаете так, чтобы получить выгоду.
    Поэтому вы должны понимать что представляют из себя объекты, как они хранятся в памяти, как работает менеджер памяти в операционной системе, чтобы понять как туда можно залезть.
    Ответ написан
    Комментировать
  • Как научиться реверсингу?

    saboteur_kiev
    @saboteur_kiev Куратор тега C++
    software engineer
    Если вам попадает чужой продукт, и в нем нужно что-то исправить - читаете код, разбираетесь в нем и исправляете.
    Реверс инженеринг - это тоже самое, только исходников нет, приходится разбираться с готовыми исполняемыми файлами, пользуясь дебаггерами, дизассемблерами, анализаторами.

    А следовательно нужно учить как работают операционные системы, стандартные библиотеки, протоколы, глубже ассемблер.

    И много опыта разработки - невозможно быть хорошим специалистом по реверс-инженерингу и не уметь просто хорошо программировать - вы же должны представлять, как примерно выглядела программа только по ее откомпилированной и рабочей части.

    P.S. Если посмотреть ваши вопросы, то есть сомнения, что С и Ассемблер у вас пройденный этап.
    Ответ написан
    2 комментария
  • Как создаются читы на игры?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Представьте, что вы написали игру, в которой человечек бегает по лабиринту и собирает клады.
    Если он упадет с высоты x, то он умирает и у него забирается 1 жизнь, а уровень начинается с начала.

    Чтобы забрать жизнь - это просто где-то хранится число с количеством жизней, и где-то есть команда, которая отнимает там единичку.
    Задача читера - найти эту команду и убрать. После этого жизней - бесконечно.
    Или можно найти то место в памяти, где хранятся жизни и поставить там 100.
    Или можно найти то место, где считается с какой высоты он умирает, и поставить там гораздо выше, чтобы не умирал.
    Или заменить команду -1 на +1, и количество жизней будет расти.

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