Как да извличате ресурси от игри » Уроци за модифициране на java » Семинар
Много често производителите на игри крият своите игрови ресурси (изображения, музика, текст) от свободен достъп. За да изтеглите тези ресурси, трябва да напишете unpacker. За да превеждате игри, трябва да напишете и пакет, което е много по-трудно. Има и универсални програми за извличане на ресурси, но в много случаи те са безполезни. В тази статия ще ви разкажа как се създават програми за работа с криптирани ресурси (използвайки примера на играта java ME „Some Allies And Enemies Sword“).
След отваряне на архива с играта и първоначалната проверка веднага става ясно, че ресурсите се съхраняват в директорията "sprite", в криптиран вид. Всички тези файлове имат приятелски имена, което прави възможно търсенето на тези имена във файловете на класа:
След това се маркира редът, в който изображението се дешифрира (използва се xor):
За да се намери този низ за декриптиране, беше необходимо да се пресъздаде зареждането на ресурси, за това няколко реда код (или по-скоро целият метод) бяха копирани в IDE с някои изменения:Сега малко за структурата на файла: необходимата част започва със знаците "SOFG", при четене се проверява дали тези знаци са началото на блока с изображения. Освен това 4 байта е шифър, с който се кодират изображенията, той има свой собствен във всеки файл. След това 1 байт е броят на изображенията във файла, след това 4 байта са дължината на изображението и самото изображение без „PNG“ (избраната област е на екрана).
Когато структурата се анализира, разопаковачът се добавя и изображенията се извличат:
И накрая се сравняват изходният файл и този, получен при опаковането, така че да няма разлики в тях. За да направите това, Total Commander има удобен инструмент - сравнение на файлове:
Това завършва техническата работа, остава само да преведете играта. Забележка: файлът touxiang.rar беше малко по-различен от всички останали, за него програмата за разопаковане трябваше да бъде модифицирана, както се оказа, в този файл с изображения на героите на играта.