<?xml version="1.0" encoding="utf-8"?>
<!-- generator="FeedCreator 1.7.2-ppt DokuWiki" -->
<?xml-stylesheet href="http://www.fateyev.com/ru/lib/exe/css.php?s=feed" type="text/css"?>
<rss version="2.0">
    <channel>
        <title>Денис Фатеев coding:2009</title>
        <description></description>
        <link>http://www.fateyev.com/ru/</link>
        <lastBuildDate>Wed, 08 Apr 2026 17:51:46 +0000</lastBuildDate>
        <generator>FeedCreator 1.7.2-ppt DokuWiki</generator>
        <image>
            <url>http://www.fateyev.com/ru/lib/tpl/fateyev/images/favicon.ico</url>
            <title>Денис Фатеев</title>
            <link>http://www.fateyev.com/ru/</link>
        </image>
        <item>
            <title>Защита игр от Alawar</title>
            <link>http://www.fateyev.com/ru/coding/2009/zaschita_igr_ot_alawar</link>
            <description>
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Дабы не утомлять читателя долгим отступлением, скажу сразу, что механизм защиты игр от &lt;a href=&quot;http://www.alawar.ru&quot; class=&quot;urlextern&quot; title=&quot;http://www.alawar.ru&quot;  rel=&quot;nofollow&quot;&gt;Alawar&lt;/a&gt; неоднократно менялся на протяжении последних лет, каждый раз оставаясь при этом неприглядным образцом лени разработчиков и нежелания компании навести порядок в своем хозяйстве.
&lt;/p&gt;

&lt;p&gt;
Компания &lt;em&gt;Alawar&lt;/em&gt; является ведущим дистрибьютором игр, произведенных сторонними разработчиками. Отчасти это оправдывает слабость защиты, поскольку программисты компании не имеют доступа к исходному коду публикуемых игр, и вынуждены довольствоваться внешней «навесной» защитой собственной разработки. Другое дело, что эта защита не представляет собой сколько-нибудь серьезного препятствия. Внешне она проявляется в том, что все игрушки имеют временное ограничение (от 20 минут до часа); по истечении этого времени игрушка отказывается запускаться, предлагая приобрести лицензию на ее использование («купить игру»).
&lt;/p&gt;

&lt;p&gt;
Действующий в данное время механизм основан на использовании программы-оболочки (так называемый, «wrapper») производства &lt;em&gt;Alawar,&lt;/em&gt; проверяющей наличие лицензии на игру и факт «легитимности» ее запуска. В случае, если все проверки проходят удачно, оболочка запускает непосредственно саму игру. Давайте рассмотрим все это на примере игры &lt;a href=&quot;http://www.alawar.ru/game/romopolis/&quot; class=&quot;urlextern&quot; title=&quot;http://www.alawar.ru/game/romopolis/&quot;  rel=&quot;nofollow&quot;&gt;&amp;quot;Римская империя&amp;quot;&lt;/a&gt; (я зашел на страничку &lt;em&gt;Alawar-a&lt;/em&gt;, и скачал первую попавшуюся):
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://www.fateyev.com/ru/_detail/coding/2009/pics/alawar/10.jpg?id=coding%3A2009%3Azaschita_igr_ot_alawar&quot; class=&quot;media&quot; title=&quot;coding:2009:pics:alawar:10.jpg&quot;&gt;&lt;img src=&quot;http://www.fateyev.com/ru/_media/coding/2009/pics/alawar/10.jpg&quot; class=&quot;mediacenter&quot; title=&quot;10.jpg&quot; alt=&quot;10.jpg&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
После установки игрушка создает ярлык в Главном меню:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://www.fateyev.com/ru/_detail/coding/2009/pics/alawar/11.jpg?id=coding%3A2009%3Azaschita_igr_ot_alawar&quot; class=&quot;media&quot; title=&quot;coding:2009:pics:alawar:11.jpg&quot;&gt;&lt;img src=&quot;http://www.fateyev.com/ru/_media/coding/2009/pics/alawar/11.jpg&quot; class=&quot;mediacenter&quot; title=&quot;11.jpg&quot; alt=&quot;11.jpg&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Видим, что он ссылается на файл &lt;code&gt;Romopolis.exe&lt;/code&gt; в папке, в которую установилась игра. Следуем за «белым кроликом»:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://www.fateyev.com/ru/_detail/coding/2009/pics/alawar/12.jpg?id=coding%3A2009%3Azaschita_igr_ot_alawar&quot; class=&quot;media&quot; title=&quot;coding:2009:pics:alawar:12.jpg&quot;&gt;&lt;img src=&quot;http://www.fateyev.com/ru/_media/coding/2009/pics/alawar/12.jpg&quot; class=&quot;mediacenter&quot; title=&quot;12.jpg&quot; alt=&quot;12.jpg&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
По соседству с нашим &lt;code&gt;Romopolis.exe&lt;/code&gt; можно заметить файл &lt;code&gt;Romopolis.wrp.exe&lt;/code&gt;. Так вот, &lt;code&gt;Romopolis.exe&lt;/code&gt; – это wrapper-оболочка от &lt;em&gt;Alawar,&lt;/em&gt; производящая вышеупомянутые действия, а &lt;code&gt;Romopolis.wrp.exe&lt;/code&gt; – исполнимый файл игры, который запускается оболочкой по окончании проверок. Не торопитесь его запускать, сейчас он работать не будет.
&lt;/p&gt;

&lt;p&gt;
Существует два варианта защиты игрушки от &lt;em&gt;Alawar,&lt;/em&gt; различающихся лишь деталями:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; перенос точки входа (&lt;code&gt;Program Entry Point&lt;/code&gt;) в оригинальном файле игры;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; адрес точки входа остается неизменным, происходит лишь изменение произвольным образом данных по ее адресу. &lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Если говорить вкратце, то точка входа в PE-файле указывает, с какого места в секции кода начинается выполнение программы. Смотрим на инструкции в точке входа &lt;code&gt;Romopolis.wrp.exe&lt;/code&gt;:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://www.fateyev.com/ru/_detail/coding/2009/pics/alawar/13.jpg?id=coding%3A2009%3Azaschita_igr_ot_alawar&quot; class=&quot;media&quot; title=&quot;coding:2009:pics:alawar:13.jpg&quot;&gt;&lt;img src=&quot;http://www.fateyev.com/ru/_media/coding/2009/pics/alawar/13.jpg&quot; class=&quot;mediacenter&quot; title=&quot;13.jpg&quot; alt=&quot;13.jpg&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://www.fateyev.com/ru/_detail/coding/2009/pics/alawar/14.jpg?id=coding%3A2009%3Azaschita_igr_ot_alawar&quot; class=&quot;media&quot; title=&quot;coding:2009:pics:alawar:14.jpg&quot;&gt;&lt;img src=&quot;http://www.fateyev.com/ru/_media/coding/2009/pics/alawar/14.jpg&quot; class=&quot;mediacenter&quot; title=&quot;14.jpg&quot; alt=&quot;14.jpg&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Совсем не похоже на типичный &lt;code&gt;Entry Point&lt;/code&gt; для Delphi, в котором в действительности скомпилировано приложение. Обратите также внимание на самую первую инструкцию (&lt;code&gt;«RET»&lt;/code&gt;), которая служит для немедленного возврата в вызывающую функцию. То есть, в данном случае, при прямом запуске выполнение программы прекращается на первом же операнде после точки входа, и результатом будет выход в систему. «Почему же тогда  программа может запускаться через оболочку Alawar?», - спросите вы. А вот почему: Alawar-овский wrapper сначала загружает &lt;code&gt;Romopolis.wrp.exe&lt;/code&gt; в память, затем прописывает в коде переход на настоящую точку входа («защита первого рода», см. выше) или исправляет данные по адресу точки входа («защита второго рода»), и лишь потом передает ему управление. Дело остается за малым: чтобы для запуска &lt;code&gt;Romopolis.wrp.exe&lt;/code&gt; обойтись без оболочки, нужно:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; узнать верное значение точки входа (в случае использования первого варианта защиты);&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; узнать верные данные по адресу точки входа (в случае использования второго варианта защиты).&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Для новичков, самым простым способом узнать тип защиты (и, соответственно, в зависимости от типа защиты – настоящее значение точки входа программы или данных по ее адресу), является «подглядывание» за wrapper-ом. Запускаем оболочку, жмем «Играть» и некоторое время ждем, пока игрушка полностью запустится…
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://www.fateyev.com/ru/_detail/coding/2009/pics/alawar/15.jpg?id=coding%3A2009%3Azaschita_igr_ot_alawar&quot; class=&quot;media&quot; title=&quot;coding:2009:pics:alawar:15.jpg&quot;&gt;&lt;img src=&quot;http://www.fateyev.com/ru/_media/coding/2009/pics/alawar/15.jpg&quot; class=&quot;mediacenter&quot; title=&quot;15.jpg&quot; alt=&quot;15.jpg&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
..после чего сворачиваем окно по &lt;kbd&gt;Alt&lt;/kbd&gt;+&lt;kbd&gt;Tab&lt;/kbd&gt;, запускаем утилиту &lt;a href=&quot;http://cracklab.ru/download.php?action=get&amp;amp;n=MTU1&quot; class=&quot;urlextern&quot; title=&quot;http://cracklab.ru/download.php?action=get&amp;amp;n=MTU1&quot;  rel=&quot;nofollow&quot;&gt;PETools&lt;/a&gt;, и видим в списке процессов наш &lt;code&gt;Romopolis.wrp.exe&lt;/code&gt;:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://www.fateyev.com/ru/_detail/coding/2009/pics/alawar/16.jpg?id=coding%3A2009%3Azaschita_igr_ot_alawar&quot; class=&quot;media&quot; title=&quot;coding:2009:pics:alawar:16.jpg&quot;&gt;&lt;img src=&quot;http://www.fateyev.com/ru/_media/coding/2009/pics/alawar/16.jpg&quot; class=&quot;mediacenter&quot; title=&quot;16.jpg&quot; alt=&quot;16.jpg&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Логично предположить, что его уже обработал &lt;em&gt;Alawar&lt;/em&gt;-овский wrapper, и на данный момент исполняемый файл имеет все нужные нам параметры. Загружаем исполнимый образ файла из памяти («дампим» образ):
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://www.fateyev.com/ru/_detail/coding/2009/pics/alawar/17.jpg?id=coding%3A2009%3Azaschita_igr_ot_alawar&quot; class=&quot;media&quot; title=&quot;coding:2009:pics:alawar:17.jpg&quot;&gt;&lt;img src=&quot;http://www.fateyev.com/ru/_media/coding/2009/pics/alawar/17.jpg&quot; class=&quot;mediacenter&quot; title=&quot;17.jpg&quot; alt=&quot;17.jpg&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Нас интересует текущее значение &lt;code&gt;Entry Point&lt;/code&gt;, щелкаем на &lt;code&gt;«Optional Header»&lt;/code&gt;, и правее поля &lt;code&gt;«Entry Point»&lt;/code&gt; щелкаем на кнопке &lt;code&gt;«D»&lt;/code&gt;. Откроется окно дизассемблера:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://www.fateyev.com/ru/_detail/coding/2009/pics/alawar/18.jpg?id=coding%3A2009%3Azaschita_igr_ot_alawar&quot; class=&quot;media&quot; title=&quot;coding:2009:pics:alawar:18.jpg&quot;&gt;&lt;img src=&quot;http://www.fateyev.com/ru/_media/coding/2009/pics/alawar/18.jpg&quot; class=&quot;mediacenter&quot; title=&quot;18.jpg&quot; alt=&quot;18.jpg&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
В первую очередь, нас интересует код программы в точке входа. В данном случае, нет никаких подозрительных переходов, что могло бы свидетельствовать о переносе точки входа. Мы видим, что в теле программы, по сравнению с исходным файлом, изменился лишь первый операнд по адресу &lt;code&gt;Program Entry Point&lt;/code&gt;. Таким образом, мы имеем дело с защитой «второго рода». Сравниваем данные по адресу точки входа в исходном и «сдампленном» файле (здесь они различаются только первым байтом), узнаем ее физическое смещение в файле (можно через &lt;a href=&quot;http://cracklab.ru/download.php?action=get&amp;amp;n=NTYw&quot; class=&quot;urlextern&quot; title=&quot;http://cracklab.ru/download.php?action=get&amp;amp;n=NTYw&quot;  rel=&quot;nofollow&quot;&gt;PeID&lt;/a&gt;, см. выше – параметр &lt;code&gt;«File Offset»&lt;/code&gt;). Записываем в исходный файл изменения:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://www.fateyev.com/ru/_detail/coding/2009/pics/alawar/19.jpg?id=coding%3A2009%3Azaschita_igr_ot_alawar&quot; class=&quot;media&quot; title=&quot;coding:2009:pics:alawar:19.jpg&quot;&gt;&lt;img src=&quot;http://www.fateyev.com/ru/_media/coding/2009/pics/alawar/19.jpg&quot; class=&quot;mediacenter&quot; title=&quot;19.jpg&quot; alt=&quot;19.jpg&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Вот и все дела. Можете удалять оболочку &lt;code&gt;Romopolis.exe&lt;/code&gt; (больше она нам не понадобится), переименовывать &lt;code&gt;Romopolis.wrp.exe&lt;/code&gt; в &lt;code&gt;Romopolis.exe&lt;/code&gt; и играть без ограничений.
&lt;/p&gt;

&lt;p&gt;
В случае, если бы мы столкнулись с защитой «первого рода», различие было бы в том, что по адресу точки входа в «дампе» будет инструкция безусловного перехода на настоящую точку входа (вида &lt;code&gt;«JMP [ADDRESS], RET»&lt;/code&gt;). Нужно было бы запомнить это значение и прописать его в качестве точки входа для оригинального файла &lt;code&gt;Romopolis.wrp.exe&lt;/code&gt;, с помощью того же &lt;a href=&quot;http://cracklab.ru/download.php?action=get&amp;amp;n=MTU1&quot; class=&quot;urlextern&quot; title=&quot;http://cracklab.ru/download.php?action=get&amp;amp;n=MTU1&quot;  rel=&quot;nofollow&quot;&gt;PETools&lt;/a&gt;.
&lt;/p&gt;
&lt;div class=&quot;tags&quot;&gt;&lt;span&gt;
	&lt;a href=&quot;http://www.fateyev.com/ru/tag/alawar?do=showtag&amp;amp;tag=alawar&quot; class=&quot;wikilink1&quot; title=&quot;tag:alawar&quot; rel=&quot;tag&quot;&gt;alawar&lt;/a&gt;,
	&lt;a href=&quot;http://www.fateyev.com/ru/tag/coding?do=showtag&amp;amp;tag=coding&quot; class=&quot;wikilink1&quot; title=&quot;tag:coding&quot; rel=&quot;tag&quot;&gt;coding&lt;/a&gt;
&lt;/span&gt;&lt;/div&gt;

&lt;/div&gt;
&lt;span class=&quot;plugin_feedmod_comments&quot;&gt;
  &lt;a href=&quot;http://www.fateyev.com/ru/coding/2009/zaschita_igr_ot_alawar#discussion__section&quot; title=&quot;Read or add comments to this article&quot;&gt;Read or add comments to this article&lt;/a&gt;
&lt;/span&gt;
</description>
        <category>alawar</category>
        <category>coding</category>
            <pubDate>Wed, 23 Jan 2013 16:15:00 +0000</pubDate>
        </item>
    </channel>
</rss>
