> For the complete documentation index, see [llms.txt](https://yutewiyof.gitbook.io/intro-rev-ida-pro/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://yutewiyof.gitbook.io/intro-rev-ida-pro/chast-08.md).

# Часть 8

Мы уже увидели в деле основные инструкции, сейчас давайте продолжим работу с **ЗАГРУЗЧИКОМ**.

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

Обычно, существуют тяжеловесные программы, которые Вы не должны полностью реверсить, а только одну или несколько её функций, в некотором определённом месте.

**IDA** даёт нам возможность взаимодействовать с ней так, чтобы получить от неё лучшие результаты реверсинга, как никакой другой инструмент. Но эти результаты будут зависеть также и от опыта пользователя.

Знаменитая фраза звучит так - "Не стрела виновата, а лучник", здесь это правило применяется полностью, необходимо практиковаться и улучшать использование **IDA‘**&#x44B;, если мы даже потерпим неудачу или не получим хорошего результата, мы должны улучшать наш уровень и практиковаться больше и чаще, **IDA** — это не простой инструмент и он имеет тысячи и тысячи возможностей, что позволяет нам каждый день узнавать что-то новое про неё, когда мы используем её.

Давайте начнём изучать статический анализ на примере **КРЭКМИ CRUEHEAD**'а. Не важно, найдём ли мы решение сейчас или, если это необходимо, закончим его потом, когда мы дойдем до части про **ОТЛАДЧИК**. Важная вещь состоит в том, чтобы научиться работать с **ЗАГРУЗЧИКОМ** и улучшать наше с ним отношения по работе.

Если мы зайдём в пункт меню **VIEW->OPEN SUBVIEW->SEGMENTS** мы увидим сегменты, которые загружает **ЗАГРУЗЧИК** в автоматическом режиме.

Мы видим, что, например, **ЗАГОЛОВОК** по адресу **0x400000** перед секциями, не загружен, так как так настроено в настройках, когда он загружен в первый раз и мы нажимаем везде **OK**, он загружает только некоторые исполняемые секции автоматически без **ЗАГОЛОВКА**.

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-Ljp8rKyZvtadezPe2Vo%2F-Ljp8z_rkcTlRJgq0DoR%2F06-01%20\(2\).png?generation=1563186172493216\&alt=media)

Мы видим, что после **ИМЕНИ** секций, у нас есть адреса их начала **START** и конца **END**, затем столбцы **RWX**, которые говорят мне имеют ли они первично разрешения чтения или **READ(R)**, записи или **WRITE(W)** и выполнения или **EXEC(X)**.

Затем, мы видим два столбца с именами **D** и **L**, которые соответствуют **ОТЛАДЧИКУ** и **ЗАГРУЗЧИКУ**, мы видим, что столбец **ОТЛАДЧИК** пустой, потому что он вызывается, когда мы загружаем программу в режиме **ОТЛАДЧИКА** и только тогда показывает загруженные сегменты в него, а **L** показывает, что загружает **ЗАГРУЗЧИК** и затем какие-то другие столбцы, которые не очень важны нам.

В этом случае не обязательно загружать заголовок, мы уже видели в предыдущей части, что когда мы переименовываем одну инструкцию и помещаем переход по адресу **0x400000**, **IDA** помечает её в красный цвет как адрес, который не загружен в **ЗАГРУЗЧИК**.

Если я хотел бы загрузить **ЗАГОЛОВОК** снова - я просто опять открываю **CRACKME.EXE**

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjttkJvbq8Uocl4jWiJ%2F-Ljttz5pJdNZeQqNY8fy%2F02.png?generation=1563265865542062\&alt=media)

Я говорю **IDA**’е затереть проект или **OVERWRITE** весь предыдущий анализ и делаю снова новый.

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjpMQPtDk4rae7nZwjQ%2F-LjpMRrhC-qJoEUViC6j%2F08-03.png?generation=1563189699198588\&alt=media)

Я ставлю галочку напротив **MANUEL LOAD** и нажимаю **OK**.

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjttkJvbq8Uocl4jWiJ%2F-Ljttz6YKbfsL33u4hvf%2F04.png?generation=1563265868934085\&alt=media)

**IDA** спрашивает у меня, хочу ли я изменить вручную **БАЗУ**, откуда будет загружен исполняемый файл и я нажимаю на **OK** соглашаясь со значением, которое она сама подставила.

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjpMQPtDk4rae7nZwjQ%2F-LjpMRrlmOC1DRrwutOR%2F08-05.png?generation=1563189701847252\&alt=media)

А теперь меня спрашивают (вручную и поодиночке) какие сегменты я хочу загрузить, и я нажимаю везде **YES**.

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjpMQPtDk4rae7nZwjQ%2F-LjpMRrnhUK93HroMuaF%2F08-06.png?generation=1563189699090547\&alt=media)

Теперь у меня есть загруженные в **ЗАГРУЗЧИК** все секции, включая даже **ЗАГОЛОВОК** и теперь мы можем изменять больше **ДАННЫХ**.

Всё это, обычно, не нужно делать, но хорошо помнить про это.

Сейчас я буду сохранять **СНИМОК** с помощью пункта меню **FILE->TAKE DATABASE SNAPSHOT** и я буду изменять переход **JMP 0x400000** как ранее.

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-Ljp8rKyZvtadezPe2Vo%2F-Ljp8za70TX9vAlFBOTS%2F06-07%20\(2\).png?generation=1563186181708516\&alt=media)

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-Ljp8rKyZvtadezPe2Vo%2F-Ljp8za9NESS-gpMqqOd%2F06-08%20\(2\).png?generation=1563186181472872\&alt=media)

Мы видим, что уже адрес **0x400000** не отмечен в красный цвет и **IDA** говорит мне, что это **ImageBase**, мы можем даже пойти и посмотреть на него, просто кликнув по имени **ImageBase**.

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-Ljp8rKyZvtadezPe2Vo%2F-Ljp8zaB-9YLW-emNEO6%2F06-09%20\(1\).png?generation=1563186181994182\&alt=media)

Здесь мы видим заголовок по адресу **0x400000** с его тэгом **ImageBase** и содержимым, которое опознано как заголовок и **IDA** показывает нам его поля.

Хорошо, давайте вернёмся к предыдущему снимку, до того как мы всё изменили с помощью **VIEW->DATABASE SNAPSHOT MANAGER** и нажимаем там **RESTORE**.

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-Ljp8rKyZvtadezPe2Vo%2F-Ljp8zaD6PPhiaen6BID%2F06-10%20\(2\).png?generation=1563186173224053\&alt=media)

Конечно, во всех упражнениях по отладке или ревериснгу строки играют ключевую роль, чтобы привести нас в важные области, если они существуют, они могут нам помочь, давайте посмотрим в меню **VIEW->OPEN SUBVIEW→STRING**, что же мы там видим ?

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-Ljp8rKyZvtadezPe2Vo%2F-Ljp8zaFXVFs13wRuzIX%2F06-11%20\(1\).png?generation=1563186172647286\&alt=media)

Сейчас, поскольку есть больше секций, то есть и больше обнаруженных строк, как и раньше, если мы запускаем **CRACKME.EXE** вне **IDA** мы видим, что в меню **HELP** есть пункт **REGISTER** и нас просят ввести **USER** и **PASS** и если мы вводим что-нибудь от себя, нам покажут сообщение **NO LUCK THERE**, **MATE!**.

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjttkJvbq8Uocl4jWiJ%2F-Ljttz8BXepqbvo-4thO%2F12.png?generation=1563265869204805\&alt=media)

Мы ищем эту строку в списке **IDA**’ы.

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjpMQPtDk4rae7nZwjQ%2F-LjpMRs0doeBIiJFd_ZW%2F08-13.png?generation=1563189699252171\&alt=media)

Если мы сделаем двойной щелчок на этой строке.

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjpMQPtDk4rae7nZwjQ%2F-LjpMRs26f7q6p8LUxqy%2F08-14.png?generation=1563189699207890\&alt=media)

Мы видим по адресу **0x402169** содержимое, которой является строка, мы знаем, что если мы нажмём **D** на этом адресе строка рассыпется на байты.

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjpMQPtDk4rae7nZwjQ%2F-LjpMRs4WXYLR376tSEH%2F08-15.png?generation=1563189699208314\&alt=media)

И если, мы нажмём **A** на адресе, то мы восстановим строку, а если нажмём **X**, то увидим две ссылки, которые **IDA** показывает в правой стороне более комфортно для нас.

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjpMQPtDk4rae7nZwjQ%2F-LjpMRs6VtcGkr0oODnn%2F08-16.png?generation=1563189699140192\&alt=media)

Мы видим, что из двух разных функций вызывается наша строка, одна вызывается из функции **sub\_401362**, а другая из функции **sub\_40137E** и оба выше адреса, где мы сейчас находимся. Вот почему в столбце **НАПРАВЛЕНИЕ**, **IDA** показывает **UP** в обоих случаях.

Мы знаем, что это две разные функции, потому что **IDA** показывает нам адреса ссылок как имя функции + **XXXX** и если они принадлежат только одной функции она должна изменить только **XXXX**, но сохранить первую часть, здесь оба **sub\_** различны - вот почему функции разные.

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2Fsync%2F5310f27f73edf591cd32e5b26d70fe1faf353cf0.png?generation=1617092287249655\&alt=media)

Это первая ссылка, а вторая находится ниже.

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjpMQPtDk4rae7nZwjQ%2F-LjpMRsA2fnK7gttxb-J%2F08-18.png?generation=1563189699098227\&alt=media)

У нас есть области, где нам показывается плохое сообщение, когда мы вводим неправильные **USER** и **PASSWORD**, мы будем стараться пройти как можно дальше насколько это возможно без отладчика, если кто-то захочет увидеть и проверить эту часть в отладчике **OLLYDBG**, просто поместите **BP** на оба адреса и посмотрите, что произойдёт если мы введем данные, которые первоначально не правильные, сейчас для начала эта помощь полезна, но идея состоит в том, чтобы всё меньше и меньше пользоваться такой помощью, а больше работать с **IDA**, мы могли бы также поместить **BP** в оба блока в **IDA** и увидеть, что останов произойдёт также, но с использование I**DA DEBUGGER**, я думаю лучше оставить это на потом.

Давайте возьмем первую из двух ссылок.

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2Fsync%2F5310f27f73edf591cd32e5b26d70fe1faf353cf0.png?generation=1617092287249655\&alt=media)

Мы видим, что есть **CALL** к **API функции MessageBox**, которая показывает такие сообщения как **NO LUCK THERE MATE** и она получает строку **NO LUCK** как аргумент для заголовка окна и **NO LUCKTHERE MATE** как текст для окна.

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

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjttkJvbq8Uocl4jWiJ%2F-Ljttz9U5qRJnaXrrV-e%2F20.png?generation=1563265873650549\&alt=media)

Если мы посмотрим ссылки на адрес **0x401362** с помощью **X**, мы увидим единственное место перед тем, как идти туда, давайте переименуем функцию по адресу **0x401362** на имя, которое сообщит нам, что она делает, например **CARTEL\_ERROR**.

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjttkJvbq8Uocl4jWiJ%2F-Ljttz9cM256mCGXAJf9%2F21.png?generation=1563265873843895\&alt=media)

Нажмём **N** на адресе и напишем наше новое имя.

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-Ljp8rKyZvtadezPe2Vo%2F-Ljp8zaaKMgVaScfInFz%2F06-22%20\(2\).png?generation=1563186187849595\&alt=media)

Теперь если мы перейдем к ссылке.

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjttkJvbq8Uocl4jWiJ%2F-Ljttz9uoRgYwbzDfr9Z%2F23.png?generation=1563265873737230\&alt=media)

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

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjpMQPtDk4rae7nZwjQ%2F-LjpMRsMpFvkwW2lMxWh%2F08-24.png?generation=1563189699020064\&alt=media)

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

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjttkJvbq8Uocl4jWiJ%2F-LjttzADXprdDpx5ON32%2F25.png?generation=1563265866212133\&alt=media)

И здесь у нас есть условный переход, который мы не будем анализировать сейчас, потому что он переходит в блок или в другой, но давайте посмотрим во внутрь блока по адресу **0x40124C**, войдём в этот **CALL** по адресу **0x40134D** с помощью **ENTER**.

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-Ljp8rKyZvtadezPe2Vo%2F-Ljp8zaijRs9IapME8lW%2F06-26.png?generation=1563186172582295\&alt=media)

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

Эту функцию мы переименуем в **CARTEL\_BUENO**.

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjttkJvbq8Uocl4jWiJ%2F-LjttzAWmozEkR-QW13a%2F27.png?generation=1563265874027158\&alt=media)

И перекрасим блок, который приносит нас сюда, в салатовый цвет.

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjttkJvbq8Uocl4jWiJ%2F-LjttzAg20U2y9-w54ZS%2F28.png?generation=1563265872246253\&alt=media)

И также мы будем работать с другими частями программы, чтобы можно было легко возвращаться назад, мы находимся сейчас в **JZ** по адресу **0x401243** и идём в **JUMP->MARK POSITION** и вводим имя, которое вело бы нас к **DECISION\_FINAL**.

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjpMQPtDk4rae7nZwjQ%2F-LjpMRsWAiQCezDz8oef%2F08-29.png?generation=1563189699189281\&alt=media)

Мы видим, что в меню **JUMP->JUMP TO MARKED POSITION** появляется список со всеми нашими отметками, которые мы сделали раньше и мы можем перейти к любой из них, которая нам нужна, если мы теряемся в программе.

Это означает, что теоретически, если мы пропатчим этот **JZ** и изменим его на **JNZ** даже будучи неправильным он будет переносить наc всегда к **GOOD WORK**, и предыдущее сообщение об ошибке не появится перед нами, давайте посмотрим так ли это.

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-Ljp8rKyZvtadezPe2Vo%2F-Ljp8zarI-yAhi-CS5CM%2F06-30.png?generation=1563186173390685\&alt=media)

Я правлю переход с помощью **KEYPATCH**.

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjttkJvbq8Uocl4jWiJ%2F-LjttzB9q15KpBd7FcSv%2F31.png?generation=1563265870297902\&alt=media)

И сохраняю изменения с помощью **APPLY PATCH TO INPUT FILE**.

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-Ljp8rKyZvtadezPe2Vo%2F-Ljp8zavi9R9k3EykkVg%2F06-32.png?generation=1563186173400536\&alt=media)

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjpMQPtDk4rae7nZwjQ%2F-LjpMRsden__hU4UygDd%2F08-33.png?generation=1563189699247575\&alt=media)

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

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-Ljp8rKyZvtadezPe2Vo%2F-Ljp8zazHRkPan9d5VJi%2F06-34.png?generation=1563186187138785\&alt=media)

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

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjpMQPtDk4rae7nZwjQ%2F-LjpMRshqhnXALglKZVW%2F08-35.png?generation=1563189699186655\&alt=media)

Если с помощью пробела мы выйдем из графического режима.

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-Ljp8rKyZvtadezPe2Vo%2F-Ljp8zb2jqxuYBuOhkgn%2F06-36.png?generation=1563186181978341\&alt=media)

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

Мы видим здесь другое сообщение об ошибке, которое я покрасил в оранжевый цвет, ниже мы проанализируем этот крэкми полностью, но сейчас очевидно, что здесь происходит сравнение с числом **41**, что есть буква **A** в **ASCII** коде и если введенное число ниже **41** (**JB**), то нам показывается сообщение об ошибке, так что мы видим, если в последней попытке ввести числа вместо букв в поле имени, становится очевидно, что числа ниже **41** (**0** = **30**, **1** = **31**, **2** = **32**, и т.д.) следовательно, когда крэкми обнаруживает, что в имени есть числа, то нам показывается сообщение об ошибке, так что давайте пропатчим это дело (здесь мы не можем изменить **JB** на **JNB**, потому что если ..... невъехал ![:dntknw:](https://wasm.in/styles/smiles_s/dntknw.gif) *\*\**).

Вернёмся назад в графический режим.

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjttkJvbq8Uocl4jWiJ%2F-LjttzC9fLdFrj0oEKoE%2F37.png?generation=1563265866972966\&alt=media)

Мы видим, что будем заполнять наш код с помощью байта **0x90** до следующей инструкции, так что, надеюсь, программа не перестанет работать.

Всё хорошо, но блоки стали беспорядочными и смотрятся всё это уродливо, поэтому я делаю правой щелчок мышкой и выбираю **LAYOUT GRAPH** и теперь всё смотрится намного лучше.

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-Ljp8rKyZvtadezPe2Vo%2F-Ljp8zb6gdNRojxDjEf0%2F06-38.png?generation=1563186186873716\&alt=media)

Мы видим, что здесь есть **NOP**'ы и блок ошибок остаётся изолированным и программа больше не может прийти туда.

Я сохраняю изменения таким же образом, как и раньше.

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-Ljp8rKyZvtadezPe2Vo%2F-Ljp8zb8CKD-0-CRn5gf%2F06-39.png?generation=1563186185974729\&alt=media)

Мы видим, что сейчас принимаются любые данные.

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjpMQPtDk4rae7nZwjQ%2F-LjpMRsr-VE16HtitT3w%2F08-40.png?generation=1563189699149057\&alt=media)

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjpMQPtDk4rae7nZwjQ%2F-LjpMRstp8posDeLd6bN%2F08-41.png?generation=1563189699243143\&alt=media)

Хорошо, это только начало, очевидно, мы просто пропатчили крэкми, чтобы просто войти в контакт со статическим реверсингом и начать его понимать, далее мы увидим как отреверсить крэкми полностью и даже сделаем кейген для него, но это будет в других главах, сейчас же, мы идём медленно и мы это видим.

До встрече в **9**-й главе.

Автор оригинального текста — Рикардо Нарваха.

Перевод и адаптация на английский язык — IvinsonCLS.

Перевод и адаптация на русский язык — Яша Яшечкин.

Перевод специально для форума системного и низкоуровневого программирования - WASM.IN

[**Источник: ricardonarvaja.info**](http://ricardonarvaja.info/WEB/IDA%20DESDE%20CERO/CURSO%20DE%20IDA%20TUTES/8-INTRODUCCION%20AL%20REVERSING%20CON%20IDA%20PRO%20DESDE%20CERO.docx)
