Ответы пользователя по тегу Reverse engineering
  • Дамп игры на c++?

    TrueBers
    @TrueBers
    Гуглю за еду
    Для получения методов игры дампить ничего не нужно, если только игра не запакована самомодифицируемым кодом.
    Нужен дизассемблер, отладчик, знание системного программирования и реверс-инжиниринга.

    На Юнити бывает как минимум два типа кода: il2cpp, когда генерируется код на C++, а потом компилируется в нативный код; второй тип -- managed .net код. Для каждого из них нужны свои инструменты и знания.

    Достаточно дизассемблера типа Ghidra, Ida Pro, radare2. Отладчика типа WinDbg, x64dbg или CheatEngine. Фреймворка динамической инструментации типа Frida. Для managed кода хорошо подойдёт .dotPeek или ILSpy в качестве декомпилятора.

    Ещё очень неплохо будет знать какой-нибудь низкоуровневый язык программирования типа Rust, Си, C++.

    Ну и ещё несколько тысяч часов опыта...
    Ответ написан
  • Путь становления Реверс инженера?

    TrueBers
    @TrueBers
    Гуглю за еду
    Рецепт прост до безобразия:
    Если вам хочется разбираться в каждой фиче, каждую новую программку ковырять, разбирать формат её файлов, каждую новую игру пытаться взломать, написать для неё бота, чит и т. п. Значит это ваше, просто продолжайте делать то, что делаете.

    Если нет, то никакие книги не помогут. В этом деле нужна страсть и огромное терпение.

    Матан никому не нужен в реверсе. Максимум решение систем линейных уравнений понадобится.
    Важно скорее нестандартное мышление, умение брутфорсить в голове множество вариантов, подходов. Для этого нужно знать технологии. Т. е. буквально, знать нужно как можно больше. Чем больше вы знаете, тем быстрее будет решена задача. Это абсолютно различные области: ОС, сети, способы шифрования, компрессии, хеширования, сериализации; знание баз данных и их языков запросов; знание компиляторов в плане, как они генерируют код; знание реализации той же стандартной библиотеки, понимание как компилируется один и тот же код разными компиляторами, понимать, как работают интерпретаторы байткода, виртуальные машины, и т. п.

    Это, что касается общих технологий. А есть ещё такая штука, как архитектурные паттерны. Они обычно применяются в прикладных приложениях, малварь редко такое применяет. Т. е. нужно видеть в коде, например, паттерн Event, различные варианты паттерна MVC, и т. п. Например, вы реверсите продукт на Qt. Чтобы его понимать, вам нужно знать... Qt, и уметь на нём разрабатывать, читать его исходный код, знать что такое метаобъекты, как они хранятся, используются, вызываются. А если, внезапно, оно юзает что-то интерпретируемое, типа питона или луа, то вам, мало того, что нужно знать сами языки, так ещё и реализацию их интерпретаторов. А ещё бывает JIT...

    Нужно ещё решить, что вы хотите реверсить. Малварь и прикладные приложения немного расходятся. В малвари нужно больше знать нестандартных вещей. Различных вариантов антиотладки, скрытия активности, багов операционной системы, поведения антивирусов. Малварь может быть ботнетом, например. Ботнеты обычно имеют командный сервер, который довольно трудно вычислить, он меняется динамически, как-то не даёт себя обнаружить. Для этого нужно знать как устроен интернет, как работает dns, разбираться в сетевых протоколах.

    Короче, для реверсера нужно учить всё. Не нужно фильровать определённые технологии, вам понадобятся все они без исключения. Ибо всё, что было создано для вычислительных систем, в них используется, а соответственно, вам придётся это знать, чтобы реверсить.

    Кстати, чуть не забыл.

    Самая лучшая книга по реверсу на русском.

    И ещё есть классический курс статей от Рикардо Нарвахи: «Введение в крэкинг с нуля, используя OllyDbg». Погуглите его. Если осилите книгу Юричева и этот курс, то сможете спокойно собеседоваться в Касперский. Хотя, поверьте, есть вещи поинтереснее касперского.
    Ответ написан
    1 комментарий
  • С чего начать разработку сетевого приложения для взаимодействия со сторонним сервером?

    TrueBers
    @TrueBers
    Гуглю за еду
    1. Берётся сначала анализатор исполняемых файлов. Там нужно посмотреть, защищён ли бинарник каким-то алгоритмом, запакован ли, зашифрован?
    2. Если защищён, то нужно снять защиту. Для этого нужно знать реверс-инжиниринг и тонкости работы операционной системы. Обычно, защиты снимаются в модифицированных виртуальных машинах. Ну, или руками ковырять можно, но это очень долго.
    3. После снятия защиты, нужно расчехлять дизассемблер, отладчик, можно, опять же, пропатчить виртуалку под свои требования. По опыту скажу, что реверс и эталонная реализация простой библиотеки АПИ с 4-5 сотнями функций занимает около двух месяцев, в зависимости от опыта. Если опыта нет, можно и на полгода засесть.
    4. Ещё один важный момент: игра может детектить доступ с неоригинального клиента и банить. Банить может как просто аккаунт, так и по идентификатору железа вашего компьютера, т.е. второй аккаунт с этого железа вы уже не создадите. Это САМЫЙ сложный этап, на котором фейлятся даже мировые лидеры ботостроения. Здесь одному в принципе нереально ничего сделать. Здесь сотни человек работают, и несмотря на это бывают фейлы, как у известного бота для WoW, у которого была упущена пара байт в протоколе, которые с виду ничего не значили (всегда передавался ноль), а потом, как оказалось, это было замедленной защитой, которая внезапно "включилась" в следующем обновлении, и 50 тысяч пользователей получили баны.
    5. Ну и, наконец, игра может содержать античит. Они обычно реализуются в виде ядерного драйвера. Соответственно, нужно знать принципы работы ядра операционной системы.

    Грубо говоря, если вы задаёте подобные вопросы, у вас опыта нет вообще. Поэтому, если интересно, учите реверсинг, ассемблер, операционные системы. Годика должно хватить для понимания. А потом, уже зависит от того, насколько хорошо усвоили, насколько работает логика, решение нестандартных ситуаций. В игры уровня WoW одному можно даже не соваться. А что-то поменьше за 2-3 года можно раскурить, в свободное от работы время.
    Ответ написан
    1 комментарий