Денис Фатеев
Честно казано, тук не планирам да анализирам подробно защитния механизъм, ще бъдат показани само основните моменти, тъй като (както показва опитът от предишната статия за Alawar и писмата на читателите) техническите подробности в програмирането не са интересни за обикновените потребители . Тези от читателите, които се интересуват от самия процес на изучаване на защитата, ще могат да проследят целия изследователски път съгласно заключенията по-долу. Няма да е трудно, дори начинаещи могат да се справят.
За нагледен пример за статията, нека вземем първата игра, която срещаме от производителя. Изтеглих Lost, който е хитът на сезона на сайта. Инсталирайте играта по обичайния начин:

Изтеглете програмата за изтегляне от сайта, стартирайте я, задайте пътя за инсталация и изчакайте, докато самата игра бъде изтеглена:


Алгоритъмът за защита е както следва:
1) Инсталираната игра се стартира чрез пряк път, сочещ към 'drm.exe' с уникален идентификатор на играта в параметъра. Черупката има достъп до вътрешната база данни и търси параметрите, съответстващи на нея по идентификатора на играта: свободно време за потребителя, изпълним файл на играта, параметри на защита на изпълнимия файл и друга информация. В резултат на проверките игралният файл се зарежда, по време на процеса на изтегляне от него се премахва защитата и се прехвърля контрол върху него, като в същото време се включва таймерът за безплатна игра, ако играта не е „закупена“. След приключване на игралния процес черупката записва текущата стойност на оставащото свободно време в базата данни. Естествено, щом стойността на свободното време за игра в базата данни е равна на нула, черупката вече няма да позволи играта да започне;
2) Вътрешната база данни е обикновена база данни SQLite3, кодирана с XOR върху ключов масив с размер 256 байта, съхраняван в тялото на черупката. Данните от масив ключове са статични и поради причини за съвместимост не се променят с времето (тук и по-долу се използват кодови фрагменти в Delphi):
Винаги, когато черупката трябва да чете или записва данни в базата данни, базата данни се дешифрира в паметта, с нея се извършват необходимите манипулации, извършва се криптиране и резултатът се поставя обратно на диска. Самата криптирана база данни се съхранява в скрит файл 'base.db' в директорията Application Data на текущия потребител:

Трябва да се отбележи, че обвивката заключва файла на базата данни от четене/запис от програми на трети страни (поддържа файла отворен изключително). За всякакви манипулации с файла на базата данни първо трябва да приключите процеса 'drm.exe'.
При желание можем да дешифрираме основата, като използваме следния алгоритъм:
След дешифрирането можете да видите структурата и данните, съхранени в базата данни, с помощта на който и да е преглед на SQLite, например SQLite Browser (картината може да се кликва):
