Ответы пользователя по тегу Reverse engineering
  • Как провести реверс инжиниринг файлу типа png jpd svg?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Нужно меньше смотреть сериалы и больше читать документацию.

    Копать в сторону библиотеки которая собственно распаковывает и отрисовывает картинку и смотришь, есть ли в этой библиотеке уязвимость, которой можно воспользоваться.

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

    С другой стороны, судя по тому как ты задаешь вопрос, чтобы попытаться найти подобную уязвимость, тебе сперва нужно лет 5-10 изучать ассебмлер, с++ и алгоритмы работы с современной графикой. Ибо "найти уязвимость" выполняется долгим анализом а не "поиск по файлу"
    Ответ написан
    Комментировать
  • Как понять что содержится в HEX и как разобраться исходный файл правильно?

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

    Поэтому только реверс инженеринг. Но для этого для начала нужно понять в каком именно формате хранится шрифт.
    Попробуйте полистать хотя бы известные форматы шрифтов, найти похожие заголовки
    https://docs.fileformat.com/font/

    Но не факт что это вообще получится.
    Ответ написан
  • Как в играх находят нужные участки памяти?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Какими способами ты находишь нужные слова, чтобы сказать предложение? Можешь вкратце описать?

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

    Вот и тут. Когда ты ищешь жизнь просто по количеству - это одно.
    Когда ты, разработчик, отлаживаешь программу, ты примерно понимаешь что ты ищешь, потому что можешь придумать несколько способов, как бы ты сам это реализовал. Эти вещи и ищешь.
    Чем выше квалификация, тем больше способов ты знаешь, как копнуть.
    Ответ написан
    Комментировать
  • Как функционируют читы в онлайн играх (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 редакторе а в данных, которые вы где-то правите - никто не знает, можно ли В ПРИНЦИПЕ увеличить длину строки в вашем файле, если это исполняемый файл, поскольку данные в файле могут быть привязаны к конкретному адресу, и меняя строчку, вы двигаете все что за ней таким образом, что все остальное прочитается не корректно.
    Ответ написан
  • Как работают программы для реверс-инженеринга?

    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 комментария