Реверс инженеринг в doom 1

Как то раз ковырялся в коде и увидел это

Реверс инженеринг в doom 1 Длиннопост, Реверс-инжиниринг, Doom, Защита

Хм... В doom-е есть анти пиратская защита? Давайте посмотрим...

Реверс инженеринг в doom 1 Длиннопост, Реверс-инжиниринг, Doom, Защита

И так, что-бы вас не путать скажу, что cmp - это команда сравнения которая записывает в регистры результаты сравнения. Затем используется jz (Jump if zero), если сравнение оказалось верным (Переход если ноль ). Попробуем включить антипиратскую защиту, и посмотрим что будет.

Реверс инженеринг в doom 1 Длиннопост, Реверс-инжиниринг, Doom, Защита

А вот и кстати ещё одна проверка по переменной.

Реверс инженеринг в doom 1 Длиннопост, Реверс-инжиниринг, Doom, Защита

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

Реверс инженеринг в doom 1 Длиннопост, Реверс-инжиниринг, Doom, Защита

Отлично! Всё сделано! Сохраняем изменения и смотрим!

Реверс инженеринг в doom 1 Длиннопост, Реверс-инжиниринг, Doom, Защита

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

Реверс инженеринг в doom 1 Длиннопост, Реверс-инжиниринг, Doom, Защита

Что делаем? Убираем проверку.

Реверс инженеринг в doom 1 Длиннопост, Реверс-инжиниринг, Doom, Защита

Как видите, вместо перехода стоит nop (nope) и теперь проверка не будет работать. Я оставил cmp просто потому что было лень убирать ;D (он не влиет на работу). И так смотрим что получилось

Реверс инженеринг в doom 1 Длиннопост, Реверс-инжиниринг, Doom, Защита

Всё работает. Теперь это предупреждение будет появляться каждый раз когда будете запускать игру. Вот как то вот так. Думаю что возможно он вам был "полезен", а также в том вы узнали что такое на практике реверс инженеринг. Сделано при помощи ida, но в x64dbg тоже есть возможность "патча" файлов