Grigorii Mordkovich Ответов: 1

Начинающий реверс-инжиниринг


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

Мое понимание: допустим, у меня есть базовая программа, которая является .exe, например (я нахожусь на Windows). Это полностью в машинном коде, который представляет собой просто кучу 1 и 0 буквально. Он явно нечитабелен, и первое, что я делаю, это Запускаю дизассемблер на моем .exe, который превращает его в ассемблер, который вряд ли читается человеком. Последний шаг-запустить декомпилятор по моему выбору, который превращает язык ассемблера в подобие исходного кода на выбранном языке программирования.

Проблемы: теория не очень сложна, тем не менее, когда я начал пытаться обратить вспять некоторые основные .exe-файлы, я столкнулся с большим количеством проблем как в притворстве, так и в декомпиляции. Ранее большинство инструментов всегда говорили, что мои программы имеют какой-то неприемлемый тип, а не CLR, что бы это ни значило. В последнем случае, если мне повезет и я создам какой-нибудь ассемблерный код, ни один из декомпиляторов не захочет его принимать, так как в нем отсутствуют метаданные или что-то еще. Я

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

Заранее большое спасибо.

Что я уже пробовал:

Декомпиляторы: JustDecompile, Snowman

1 Ответов

Рейтинг:
2

OriginalGriff

В Windows существует две формы EXE-файла: Native и CLR.
Родные-это как раз то, что нужно: родные для Windows и архитектуры x86.
Среда CLR бывают разные: они используют в среде CLR, которая представляет собой "псевдо машинный код", который компилируется в машинный код с помощью JIT двигателя, как приложение работает, и применяются только для .Net-приложений на основе (в основном, но не исключительно, написанных на C# или VB).

Приложения CLR могут быть реверсированы для создания кода C# или VB (с различной эффективностью в зависимости от уровней запутывания и оптимизации, примененных при его создании).
Нативные приложения? Не столько. Нативные приложения могли быть написаны на любом языке: машинном коде, C, C++ или их комбинации, а также с использованием одного из многих, многих различных компиляторов. Это означает, что нативные приложения не являются хорошей перспективой "обратного инжиниринга", поскольку они вполне могут быть написаны не на том языке высокого уровня, который вы ожидаете, и, возможно, были применены более экстремальные оптимизации - и то, и другое означает, что любой код C++, который вы можете создать из exe автоматически, может иметь мало или вообще не иметь сходства с исходным исходным кодом.

Есть причины, по которым код трудно перепроектировать: и они в основном касаются интеллектуальной собственности - вы не владеете исходным кодом, и оригинальные авторы не хотят давать его вам; они вложили много труда и денег в то, чтобы получить его правильно в первую очередь, и не видят причин, по которым вы должны быть в состоянии скопировать его...


Grigorii Mordkovich

Огромное спасибо. Это очень много информации, которая определенно проясняет ситуацию. Как продолжение вашей точки зрения об IP, я абсолютно это понимаю и ни в коем случае не пытался взломать чье-то программное обеспечение без их разрешения. Однако я хотел бы узнать о физике этого процесса и, возможно, в будущем принять участие в конкурсе CTF. Ради обучения я написал очень простой код на C++ (был похож на одну функцию, которая сравнивала ввод с некоторым паролем и основным), и это вызвало все вышеперечисленные проблемы, когда я попытался перевернуть скомпилированную версию, чтобы увидеть что-то похожее на оригинал.

OriginalGriff

Всегда пожалуйста!