<?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:2010</title>
        <description></description>
        <link>http://www.fateyev.com/ru/</link>
        <lastBuildDate>Sat, 18 Apr 2026 08:19:56 +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>Обзор защиты NevoSoft</title>
            <link>http://www.fateyev.com/ru/coding/2010/obzor_zaschity_nevosoft</link>
            <description>
&lt;div class=&quot;level1&quot;&gt;

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

&lt;p&gt;
Честно говоря, здесь я не планирую детально разбирать механизм защиты, будут показаны лишь основные моменты, поскольку (как показал опыт &lt;a href=&quot;http://www.fateyev.com/ru/coding/2009/zaschita_igr_ot_alawar&quot; class=&quot;wikilink1&quot; title=&quot;coding:2009:zaschita_igr_ot_alawar&quot;&gt;предыдущей заметки&lt;/a&gt; про Alawar и письма читателей) технические детали в программировании неинтересны обычным пользователям. Те из читателей, для кого представляет интерес сам процесс изучения защиты, смогут проследить весь путь исследования по приведённым ниже выводам. Особого труда это не составит, справятся даже новички.
&lt;/p&gt;

&lt;p&gt;
Для наглядного примера к статье возьмём первую попавшуюся игру от производителя. Я скачал &lt;em&gt;«Остаться в живых»&lt;/em&gt;, которая заявлена на сайте хитом сезона. Устанавливаем игру обычным способом:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://www.fateyev.com/ru/_detail/coding/2010/pics/nevosoft/10.jpg?id=coding%3A2010%3Aobzor_zaschity_nevosoft&quot; class=&quot;media&quot; title=&quot;coding:2010:pics:nevosoft:10.jpg&quot;&gt;&lt;img src=&quot;http://www.fateyev.com/ru/_media/coding/2010/pics/nevosoft/10.jpg?w=560&amp;amp;tok=5422ab&quot; class=&quot;mediacenter&quot; title=&quot;10.jpg&quot; alt=&quot;10.jpg&quot; width=&quot;560&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;br/&gt;

Скачиваем с сайта программу-загрузчик, запускаем, задаём ей путь для установки и ждём, пока скачается собственно сама игра:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://www.fateyev.com/ru/_detail/coding/2010/pics/nevosoft/11.jpg?id=coding%3A2010%3Aobzor_zaschity_nevosoft&quot; class=&quot;media&quot; title=&quot;coding:2010:pics:nevosoft:11.jpg&quot;&gt;&lt;img src=&quot;http://www.fateyev.com/ru/_media/coding/2010/pics/nevosoft/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;a href=&quot;http://www.fateyev.com/ru/_detail/coding/2010/pics/nevosoft/12.jpg?id=coding%3A2010%3Aobzor_zaschity_nevosoft&quot; class=&quot;media&quot; title=&quot;coding:2010:pics:nevosoft:12.jpg&quot;&gt;&lt;img src=&quot;http://www.fateyev.com/ru/_media/coding/2010/pics/nevosoft/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;
Для чистоты эксперимента, после установки игры следует перезагрузиться, чтобы элементы защиты NevoSoft корректно запустились и мы имели дело с полноценно защищённой версией игры. Первое, что бросается в глаза после перезагрузки – в области уведомлений появился значок с фирменной эмблемой и в автозагрузку добавилась программа непонятного назначения. При запуске игры появляется типичное окно с уведомлением о временном ограничении и всякой рекламной шелухой от производителя.
&lt;/p&gt;

&lt;p&gt;
Посмотрев на картинки – переходим к самой сути нашей задачи. В общем, механизм защиты здесь чем-то похож на Alawar, только без малейших намёков на серьёзный подход к делу. Alawar хотя бы пытался ограничивать доступ к оболочке игры посредством использования &lt;a href=&quot;http://www.aspack.com/&quot; class=&quot;urlextern&quot; title=&quot;http://www.aspack.com/&quot;  rel=&quot;nofollow&quot;&gt;ASProtect&lt;/a&gt; в своих дистрибутивах, а здесь и этого нет. В основе лежит навесная защита и оболочка, контролирующая запуск программ. В отличие от игр производства Alawar, где эта оболочка &lt;em&gt;(«wrapper»)&lt;/em&gt; прилагается к каждой игре, – здесь она единая для всех, устанавливается в систему раз и навсегда при инсталляции любой игры от Nevosoft. Исполнимый файл &lt;em&gt;&amp;#039;drm.exe&amp;#039;&lt;/em&gt; в автозагрузке, создающий значок в трее и время от времени показывающий рекламу, по совместительству является этой самой оболочкой-часовым, проверяющим ограничения, ведущим триальный отчет времени и всё такое прочее. Его грозное название, видимо, было призвано отпугнуть непрошенных исследователей потенциальным наличием &lt;a href=&quot;http://ru.wikipedia.org/wiki/Технические_средства_защиты_авторских_прав&quot; class=&quot;interwiki iw_wpru&quot; title=&quot;http://ru.wikipedia.org/wiki/Технические_средства_защиты_авторских_прав&quot;&gt;сложных криптозащит&lt;/a&gt;, но на поверку оказалось, что ничего такого здесь нет и достаточно отладчика и дизассемблера. Реверсирование защиты Nevosoft сводится к изучению алгоритмов в этом исполнимом файле.
&lt;/p&gt;

&lt;p&gt;
&lt;em&gt;Алгоритм защиты состоит в следующем:&lt;/em&gt;
&lt;/p&gt;

&lt;p&gt;
1) Установленная игра запускается ярлыком, указывающим на &lt;em&gt;&amp;#039;drm.exe&amp;#039;&lt;/em&gt; с уникальным идентификатором игры в параметре. Оболочка обращается к внутренней базе данных и по идентификатору игры ищет соответствующие ей параметры: бесплатное время для пользователя, исполнимый файл игры, параметры защиты исполнимого файла и прочую информацию. В результате проверок загружается файл игры, в процессе загрузки с него снимается защита и ему передается управление, одновременно с этим включается таймер бесплатной игры, если игра не «куплена». По завершении процесса игры, оболочка записывает текущее значение оставшегося бесплатного времени в базу. Естественно, как только значение бесплатного времени для игры в базе будет равно нулю, оболочка больше не даст запустить игру;
&lt;/p&gt;

&lt;p&gt;
2) Внутренняя база данных представляет собой обычную БД &lt;a href=&quot;http://sqlite.org/&quot; class=&quot;urlextern&quot; title=&quot;http://sqlite.org/&quot;  rel=&quot;nofollow&quot;&gt;SQLite3&lt;/a&gt;, зашифрованную XOR-ом по ключевому массиву размером 256 байт, хранящемуся в теле оболочки. Данные ключевого массива статичны и в целях совместимости не меняются на протяжении времени (здесь и ниже используются фрагменты кода на языке &lt;em&gt;Delphi&lt;/em&gt;):
&lt;/p&gt;
&lt;pre class=&quot;code =delphi&quot;&gt;bKeyArraySize &lt;span class=&quot;sy3&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
arKeyDecrypt&lt;span class=&quot;sy1&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;bKeyArraySize&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;of&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;Byte&lt;/span&gt; &lt;span class=&quot;sy3&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
 &lt;span class=&quot;re0&quot;&gt;$69&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$f7&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$23&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$a3&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$a2&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$5f&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$86&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$8d&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$c6&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$43&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$6d&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$5b&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$35&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$c9&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$7b&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$ff&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt;
 &lt;span class=&quot;re0&quot;&gt;$7f&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$a6&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$a5&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$75&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$89&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$89&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$d8&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$ee&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$77&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$f2&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$d3&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$22&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$e4&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$7a&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$f1&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$b4&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt;
 &lt;span class=&quot;re0&quot;&gt;$5a&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$45&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$5a&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$d0&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$72&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$a3&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$f4&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$65&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$b2&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$5c&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$ff&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$8b&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$5a&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$db&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$61&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$e3&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt;
 &lt;span class=&quot;re0&quot;&gt;$f1&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$eb&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$15&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$a8&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$22&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$9b&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$a7&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$5c&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$ae&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$27&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$77&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$5c&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$bb&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$43&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$87&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$0c&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt;
 &lt;span class=&quot;re0&quot;&gt;$86&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$23&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$5d&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$53&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$31&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$cf&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$7a&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$7e&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$3f&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$2a&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$da&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$0b&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$1f&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$b6&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$dc&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$48&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt;
 &lt;span class=&quot;re0&quot;&gt;$a4&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$e1&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$f4&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$85&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$53&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$d6&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$2c&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$50&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$28&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$20&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$f9&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$84&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$dd&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$93&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$0d&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$f3&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt;
 &lt;span class=&quot;re0&quot;&gt;$79&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$df&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$07&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$ad&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$a3&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$de&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$60&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$62&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$b1&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$cb&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$45&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$5d&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$32&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$4d&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$bb&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$38&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt;
 &lt;span class=&quot;re0&quot;&gt;$9c&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$52&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$de&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$05&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$18&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$31&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$d1&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$ba&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$5d&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$e9&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$68&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$cb&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$f1&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$67&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$57&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$54&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt;
 &lt;span class=&quot;re0&quot;&gt;$2a&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$0d&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$6e&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$d2&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$7f&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$27&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$35&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$05&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$82&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$c9&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$b2&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$f9&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$ce&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$2f&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$6a&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$d1&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt;
 &lt;span class=&quot;re0&quot;&gt;$e8&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$d3&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$39&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$b2&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$23&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$19&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$e6&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$fc&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$7e&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$6f&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$4b&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$5e&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$b8&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$c7&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$c4&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$ac&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt;
 &lt;span class=&quot;re0&quot;&gt;$56&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$6b&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$71&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$55&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$3e&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$4b&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$ba&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$9e&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$cf&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$ae&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$99&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$67&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$8e&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$0a&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$1f&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$e9&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt;
 &lt;span class=&quot;re0&quot;&gt;$f4&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$0e&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$e4&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$2c&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$e1&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$fe&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$32&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$ab&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$d5&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$f5&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$36&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$2f&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$65&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$bd&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$92&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$1a&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt;
 &lt;span class=&quot;re0&quot;&gt;$8d&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$a1&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$54&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$d1&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$f8&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$e5&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$16&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$34&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$9a&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$65&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$6a&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$d8&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$76&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$a5&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$f5&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$e5&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt;
 &lt;span class=&quot;re0&quot;&gt;$f2&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$a1&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$be&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$e7&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$c9&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$af&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$2a&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$76&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$bb&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$ec&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$8c&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$e2&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$49&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$6c&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$89&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$67&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt;
 &lt;span class=&quot;re0&quot;&gt;$33&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$34&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$fb&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$91&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$51&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$d1&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$af&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$43&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$a1&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$e3&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$21&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$b6&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$2d&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$1a&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$64&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$3d&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt;
 &lt;span class=&quot;re0&quot;&gt;$9e&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$3f&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$53&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$52&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$ba&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$c4&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$44&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$ec&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$76&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$3b&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$79&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$69&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$91&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$72&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$bd&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$d2&lt;/span&gt; 
&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Всякий раз, когда оболочке нужно прочитать или записать данные в БД,  база расшифровывается в память, с ней производятся необходимые манипуляции, производится шифрование и результат в кладётся обратно на диск. Сама шифрованная база хранится в скрытом файле &lt;em&gt;&amp;#039;base.db&amp;#039;&lt;/em&gt; в каталоге &lt;em&gt;«Application Data»&lt;/em&gt; текущего пользователя:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://www.fateyev.com/ru/_detail/coding/2010/pics/nevosoft/13.jpg?id=coding%3A2010%3Aobzor_zaschity_nevosoft&quot; class=&quot;media&quot; title=&quot;coding:2010:pics:nevosoft:13.jpg&quot;&gt;&lt;img src=&quot;http://www.fateyev.com/ru/_media/coding/2010/pics/nevosoft/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;em&gt;&amp;#039;drm.exe&amp;#039;&lt;/em&gt;. 
&lt;/p&gt;

&lt;p&gt;
При желании, мы можем расшифровать базу с помощью такого алгоритма:
&lt;/p&gt;
&lt;pre class=&quot;code =delphi&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;function&lt;/span&gt; DecryptNevoDatabase&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; lpSrcFile&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; lpDestFile&lt;span class=&quot;sy1&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;PChar&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy1&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;Boolean&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;// here I won't using MMF (memory-mapped files) due to approximately&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;// small files size (suppose that the Nevosoft DB isn't bigger than 12-15Mb)&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;var&lt;/span&gt;
  hFileRead&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; hFileWrite&lt;span class=&quot;sy1&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;THandle&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
  i&lt;span class=&quot;sy1&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;Byte&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt; iNumRead&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; iNumWrite&lt;span class=&quot;sy1&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;Integer&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
  Buffer&lt;span class=&quot;sy1&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;bKeyArraySize&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;of&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;Byte&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw1&quot;&gt;begin&lt;/span&gt;
  Result&lt;span class=&quot;sy1&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
  hFileRead&lt;span class=&quot;sy1&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;=&lt;/span&gt; CreateFile&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; lpSrcFile&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; GENERIC_READ&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;nil&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; OPEN_EXISTING&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; FILE_ATTRIBUTE_NORMAL&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; hFileRead &lt;span class=&quot;sy3&quot;&gt;=&lt;/span&gt; INVALID_HANDLE_VALUE &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt; Exit&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
  hFileWrite&lt;span class=&quot;sy1&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;=&lt;/span&gt; CreateFile&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; lpDestFile&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; GENERIC_READ &lt;span class=&quot;sy3&quot;&gt;+&lt;/span&gt; GENERIC_WRITE&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;nil&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; CREATE_ALWAYS&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; FILE_ATTRIBUTE_NORMAL&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; hFileWrite &lt;span class=&quot;sy3&quot;&gt;=&lt;/span&gt; INVALID_HANDLE_VALUE &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt; Exit&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
  &lt;span class=&quot;kw1&quot;&gt;try&lt;/span&gt;
    &lt;span class=&quot;co1&quot;&gt;// decrypt file&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;repeat&lt;/span&gt;
&amp;nbsp;
      &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; ReadFile&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; hFileRead&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; Buffer&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; bKeyArraySize&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;Cardinal&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; iNumRead &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;nil&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
      &lt;span class=&quot;kw1&quot;&gt;begin&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt; i&lt;span class=&quot;sy1&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;to&lt;/span&gt; iNumRead &lt;span class=&quot;sy3&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;do&lt;/span&gt;
          &lt;span class=&quot;co1&quot;&gt;// where is all street magic happens.. hehe&lt;/span&gt;
          Buffer&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;i&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;=&lt;/span&gt; Buffer&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;i&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;xor&lt;/span&gt; arKeyDecrypt&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;i&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; iNumRead &amp;gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;begin&lt;/span&gt;
          &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;not&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; WriteFile&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; hFileWrite&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; Buffer&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; iNumRead&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;Cardinal&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; iNumWrite &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;nil&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt; Exit&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
          &lt;span class=&quot;co1&quot;&gt;// checking bytes count to be written&lt;/span&gt;
          &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; iNumWrite &amp;lt;&amp;gt; iNumRead &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt; Exit&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;end&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;kw1&quot;&gt;end&lt;/span&gt;
      &lt;span class=&quot;kw1&quot;&gt;else&lt;/span&gt; iNumRead&lt;span class=&quot;sy1&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw1&quot;&gt;until&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; iNumRead &amp;lt; bKeyArraySize &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// setting the flag&lt;/span&gt;
    Result&lt;span class=&quot;sy1&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
  &lt;span class=&quot;kw1&quot;&gt;finally&lt;/span&gt;
    CloseHandle&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; hFileWrite &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
    CloseHandle&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; hFileRead &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;kw1&quot;&gt;end&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw1&quot;&gt;end&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
После расшифровки можно смотреть структуру и данные, хранящиеся в базе, при помощи любого вьювера SQLite, например, &lt;a href=&quot;http://sqlitebrowser.sourceforge.net/&quot; class=&quot;urlextern&quot; title=&quot;http://sqlitebrowser.sourceforge.net/&quot;  rel=&quot;nofollow&quot;&gt;SQLite Browser&lt;/a&gt; (картинка кликабельна):
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://www.fateyev.com/ru/_detail/coding/2010/pics/nevosoft/14.jpg?id=coding%3A2010%3Aobzor_zaschity_nevosoft&quot; class=&quot;media&quot; title=&quot;coding:2010:pics:nevosoft:14.jpg&quot;&gt;&lt;img src=&quot;http://www.fateyev.com/ru/_media/coding/2010/pics/nevosoft/14.jpg?w=560&amp;amp;tok=35154a&quot; class=&quot;mediacenter&quot; title=&quot;14.jpg&quot; alt=&quot;14.jpg&quot; width=&quot;560&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Можно даже отредактировать данные (триальный лимит игры), зашифровать полученный файл базы тем же ключом и заменить оригинальную базу своей – оболочка подхватит наши изменения. Кстати, это является одним из вариантов обхода защиты – получение «вечного» триала, но это некрасивое решение, «грязный хак».
&lt;/p&gt;

&lt;p&gt;
3) Секция кода исполнимого файла игры, в которой находится точка входа PE EXE, побайтно зашифрована XOR-ом с массивом длиной 1024 байта, хранящимся в поле &lt;em&gt;&amp;#039;crpt_inf&amp;#039;&lt;/em&gt; в записи базы данных. Иными словами, по идентификатору игры оболочка загружает её исполнимый файл (получая имя файла из поля &lt;em&gt;&amp;#039;exec&amp;#039;&lt;/em&gt;), считывает из БД ключевой массив из поля &lt;em&gt;&amp;#039;crpt_inf&amp;#039;&lt;/em&gt; и производит расшифровку EP-секции ключевым массивом, после чего передает управление загруженному файлу.
&lt;/p&gt;

&lt;p&gt;
Расшифровать секцию и получить «чистый» исполнимый файл игры можно так:
&lt;/p&gt;
&lt;pre class=&quot;code =delphi&quot;&gt;&lt;span class=&quot;co1&quot;&gt;// decrypt PE file section&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;function&lt;/span&gt; PEDecrypt_Section&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; lpPE&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; lpISH&lt;span class=&quot;sy1&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;Pointer&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt; wSectionIdx&lt;span class=&quot;sy1&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;Word&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt; lpCryptoData&lt;span class=&quot;sy1&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;PChar&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;Boolean&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;var&lt;/span&gt;
  ish&lt;span class=&quot;sy1&quot;&gt;:&lt;/span&gt; IMAGE_SECTION_HEADER&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
  a&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; b&lt;span class=&quot;sy1&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;Byte&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt; i&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; j&lt;span class=&quot;sy1&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;DWord&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw1&quot;&gt;begin&lt;/span&gt;
  Result&lt;span class=&quot;sy1&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;// STUB&lt;/span&gt;
&amp;nbsp;
  &lt;span class=&quot;kw3&quot;&gt;Move&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;Pointer&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;DWord&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; lpISH &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy3&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;DWord&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; wSectionIdx &lt;span class=&quot;sy3&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy3&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;SizeOf&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; IMAGE_SECTION_HEADER &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy2&quot;&gt;^&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; ish&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;SizeOf&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; ish &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
  j&lt;span class=&quot;sy1&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
  &lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt; i&lt;span class=&quot;sy1&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;to&lt;/span&gt; ish&lt;span class=&quot;sy1&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;SizeOfRawData&lt;/span&gt; &lt;span class=&quot;sy3&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;do&lt;/span&gt;
  &lt;span class=&quot;kw1&quot;&gt;begin&lt;/span&gt;
    &lt;span class=&quot;kw3&quot;&gt;Move&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;Pointer&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;DWord&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; lpPE &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy3&quot;&gt;+&lt;/span&gt; ish&lt;span class=&quot;sy1&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;PointerToRawData&lt;/span&gt; &lt;span class=&quot;sy3&quot;&gt;+&lt;/span&gt; i &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy2&quot;&gt;^&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; a&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw3&quot;&gt;Move&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;Pointer&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;DWord&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; lpCryptoData &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy3&quot;&gt;+&lt;/span&gt; j &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy2&quot;&gt;^&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; b&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;co1&quot;&gt;// we explicitly know, that crypto array always has lenght of 1024 bytes&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; j &amp;lt; &lt;span class=&quot;nu0&quot;&gt;1023&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;Inc&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; j &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;else&lt;/span&gt; j&lt;span class=&quot;sy1&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// no, no, no, - david blaine..&lt;/span&gt;
    a&lt;span class=&quot;sy1&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;=&lt;/span&gt; a &lt;span class=&quot;kw1&quot;&gt;xor&lt;/span&gt; b&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;kw3&quot;&gt;Move&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; a&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;Pointer&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;DWord&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; lpPE &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy3&quot;&gt;+&lt;/span&gt; ish&lt;span class=&quot;sy1&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;PointerToRawData&lt;/span&gt; &lt;span class=&quot;sy3&quot;&gt;+&lt;/span&gt; i &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy2&quot;&gt;^&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;kw1&quot;&gt;end&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
  AddListBoxItem_Sep&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;'  Распаковка успешно завершена.'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
  AddListBoxItem&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;' '&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
  SendMessage&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; GetDlgItem&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; hMainDlg&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; ID_LIST_LOG &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; WM_VSCROLL&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; SB_BOTTOM&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw1&quot;&gt;end&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;sy1&quot;&gt;...&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// unwrap executable file's EP section&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;function&lt;/span&gt; Unwrap_ExecutableFile&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; lpFileName&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; lpCryptoData&lt;span class=&quot;sy1&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;PChar&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;Boolean&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;var&lt;/span&gt;
  hFile&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; hMapFile&lt;span class=&quot;sy1&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;THandle&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt; lpMap&lt;span class=&quot;sy1&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;Pointer&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
  e_magic&lt;span class=&quot;sy1&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;Word&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;  inh&lt;span class=&quot;sy1&quot;&gt;:&lt;/span&gt; IMAGE_NT_HEADERS&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
  lpOffset&lt;span class=&quot;sy1&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;DWord&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt; wEPSection&lt;span class=&quot;sy1&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;Word&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt; strSaveFile&lt;span class=&quot;sy1&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw1&quot;&gt;begin&lt;/span&gt;
  Result&lt;span class=&quot;sy1&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
  AddListBoxItem&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;'  Укажите имя файла для расшифрованного файла... '&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
  SendMessage&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; GetDlgItem&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; hMainDlg&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; ID_LIST_LOG &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; WM_VSCROLL&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; SB_BOTTOM&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
  &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; Get_SaveFileName&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; hMainDlg&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;nil&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;'Исполнимые файлы (*.exe)'&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;re1&quot;&gt;#0&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;'*.exe'&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;re1&quot;&gt;#0&lt;/span&gt;&lt;span class=&quot;re1&quot;&gt;#0&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; strSaveFile &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
  &lt;span class=&quot;kw1&quot;&gt;begin&lt;/span&gt;
    AddListBoxItem&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;'  Файл '&lt;/span&gt; &lt;span class=&quot;sy3&quot;&gt;+&lt;/span&gt; strSaveFile &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
    AddListBoxItem_Sep&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;'  Производится распаковка исполнимого файла...'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
    CopyFile&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; lpFileName&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;PChar&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; strSaveFile &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;false&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    hFile&lt;span class=&quot;sy1&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;=&lt;/span&gt; CreateFile&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;PChar&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; strSaveFile &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; GENERIC_READ &lt;span class=&quot;sy3&quot;&gt;+&lt;/span&gt; GENERIC_WRITE&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;nil&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; OPEN_EXISTING&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; FILE_ATTRIBUTE_NORMAL&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; hFile &lt;span class=&quot;sy3&quot;&gt;=&lt;/span&gt; INVALID_HANDLE_VALUE &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;begin&lt;/span&gt;
      AddListBoxItem_Sep&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;'  Ошибка открытия результирующего файла!'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
      Exit&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;end&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    hMapFile&lt;span class=&quot;sy1&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;=&lt;/span&gt; CreateFileMapping&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; hFile&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;nil&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; PAGE_READWRITE&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;nil&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
    CloseHandle&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; hFile &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; hMapFile &lt;span class=&quot;sy3&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;begin&lt;/span&gt;
      AddListBoxItem_Sep&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;'  Ошибка записи в результирующий файл!'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
      Exit&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;end&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    lpMap&lt;span class=&quot;sy1&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;=&lt;/span&gt; MapViewOfFile&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; hMapFile&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; FILE_MAP_READ &lt;span class=&quot;sy3&quot;&gt;+&lt;/span&gt; FILE_MAP_WRITE&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
    CloseHandle&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; hMapFile &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; lpMap &lt;span class=&quot;sy3&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;nil&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;begin&lt;/span&gt;
      AddListBoxItem_Sep&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;'  Ошибка открытия результирующего файла!'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
      Exit&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;end&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// doing some checks (if this file really win32 PE EXE)&lt;/span&gt;
    &lt;span class=&quot;kw3&quot;&gt;Move&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; lpMap&lt;span class=&quot;sy2&quot;&gt;^&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; e_magic&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;SizeOf&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; e_magic &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;// 'MZ'&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; e_magic &lt;span class=&quot;sy3&quot;&gt;=&lt;/span&gt; IMAGE_DOS_SIGNATURE  &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;begin&lt;/span&gt;
      &lt;span class=&quot;co1&quot;&gt;// lpOffset now points on PE headers&lt;/span&gt;
      lpOffset&lt;span class=&quot;sy1&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;DWord&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; lpMap &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy3&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;PDword&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;DWord&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; lpMap &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy3&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$3C&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy2&quot;&gt;^&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;co1&quot;&gt;// read 'nt headers'&lt;/span&gt;
      &lt;span class=&quot;kw3&quot;&gt;Move&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;Pointer&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; lpOffset &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy2&quot;&gt;^&lt;/span&gt; &lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; inh&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;SizeOf&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; inh &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; inh&lt;span class=&quot;sy1&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;Signature&lt;/span&gt; &lt;span class=&quot;sy3&quot;&gt;=&lt;/span&gt; IMAGE_NT_SIGNATURE &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;  &lt;span class=&quot;co1&quot;&gt;// 'PE00'&lt;/span&gt;
      &lt;span class=&quot;co1&quot;&gt;// seems to valid win32 PE header&lt;/span&gt;
      &lt;span class=&quot;kw1&quot;&gt;begin&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;co1&quot;&gt;// retrieving EP section index (1- based)&lt;/span&gt;
        wEPSection&lt;span class=&quot;sy1&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;=&lt;/span&gt; PESectionFromRVA&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;Pointer&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; lpOffset &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; inh&lt;span class=&quot;sy1&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;OptionalHeader&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;AddressOfEntryPoint&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; wEPSection &amp;gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;begin&lt;/span&gt;
          &lt;span class=&quot;co1&quot;&gt;// lpOffset now points to array of 'image secton headers'&lt;/span&gt;
          lpOffset&lt;span class=&quot;sy1&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;=&lt;/span&gt; lpOffset &lt;span class=&quot;sy3&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;SizeOf&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; IMAGE_NT_HEADERS &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
          Result&lt;span class=&quot;sy1&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;=&lt;/span&gt; PEDecrypt_Section&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; lpMap&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;Pointer&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; lpOffset &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; wEPSection&lt;span class=&quot;sy1&quot;&gt;,&lt;/span&gt; lpCryptoData &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;end&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;else&lt;/span&gt;
          AddListBoxItem_Sep&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;'  Ошибка определения исполнимого файла (IMAGE_NT_SIGNATURE)!'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
      &lt;span class=&quot;kw1&quot;&gt;end&lt;/span&gt;
      &lt;span class=&quot;kw1&quot;&gt;else&lt;/span&gt;
        AddListBoxItem_Sep&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;'  Ошибка проверки исполнимого файла (IMAGE_NT_SIGNATURE)!'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw1&quot;&gt;end&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;else&lt;/span&gt;
      AddListBoxItem_Sep&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;'  Ошибка проверки исполнимого файла (IMAGE_DOS_SIGNATURE)!'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
  UnmapViewOfFile&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; lpMap &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
  &lt;span class=&quot;kw1&quot;&gt;end&lt;/span&gt;
  &lt;span class=&quot;kw1&quot;&gt;else&lt;/span&gt;
    AddListBoxItem_Sep&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;'  Операция отменена пользователем. '&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw1&quot;&gt;end&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
&lt;br/&gt;

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

&lt;p&gt;
&lt;a href=&quot;http://www.fateyev.com/ru/_detail/coding/2010/pics/nevosoft/15.jpg?id=coding%3A2010%3Aobzor_zaschity_nevosoft&quot; class=&quot;media&quot; title=&quot;coding:2010:pics:nevosoft:15.jpg&quot;&gt;&lt;img src=&quot;http://www.fateyev.com/ru/_media/coding/2010/pics/nevosoft/15.jpg&quot; class=&quot;mediacenter&quot; title=&quot;15.jpg&quot; alt=&quot;15.jpg&quot; /&gt;&lt;/a&gt;
&lt;br/&gt;

Скачать утилиту можно &lt;a href=&quot;http://www.fateyev.com/files/coding/nevotools.zip&quot; class=&quot;interwiki iw_zip&quot; title=&quot;http://www.fateyev.com/files/coding/nevotools.zip&quot;&gt;здесь&lt;/a&gt;; исходники (на Delphi 7) &lt;a href=&quot;http://www.fateyev.com/files/coding/nevotools_src.zip&quot; class=&quot;interwiki iw_zip&quot; title=&quot;http://www.fateyev.com/files/coding/nevotools_src.zip&quot;&gt;здесь&lt;/a&gt;. 
&lt;/p&gt;

&lt;p&gt;
Учтите, что данная программа представлена лишь для образовательных целей и ни в коем случае не может использоваться для изготовления пиратских копий игр; прочтите на сайте &lt;a href=&quot;http://www.fateyev.com/ru/coding/start#issledovanie_zaschity_po&quot; class=&quot;wikilink1&quot; title=&quot;coding:start&quot;&gt;отказ от ответственности&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/nevosoft?do=showtag&amp;amp;tag=nevosoft&quot; class=&quot;wikilink1&quot; title=&quot;tag:nevosoft&quot; rel=&quot;tag&quot;&gt;nevosoft&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/2010/obzor_zaschity_nevosoft#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>nevosoft</category>
        <category>coding</category>
            <pubDate>Mon, 05 Mar 2012 15:20:00 +0000</pubDate>
        </item>
    </channel>
</rss>
