Представляю вам первую версию библиотеки для работы с зашифрованными пакетами ресурсов. Для чего это нужно? Для ограждения ресурсов вашего мидлета от любопытных глаз и кривых рук взломщиков. Конечно, защита пока не идеальна, нужно будет ещё добавить шифрование заголовка и скроллинг битов, но пока можно пользоваться и такой версией, защита уже вполне есть и лучше пока пользоваться такой чем вообще никакой.
Подробно опишу последовательность действий при создании зашифрованного пакета с ресурсами, чтобы потом не возникало вопросов что делать и как. В последующих версиях запаковщика нужно будет делать аналогичные действия, сами разберетесь.
Итак, для начала нужно создать пакет с нашими ресурсами. Для этого запускаем запаковщик (он прилагается к данной статье, на момент написания самая свежая версия запаковщика это 3).
Нажимаем кнопку "Добавить" и выбираем файлы, которые нужно поместить в архив. У меня получилось примерно такой архивчик:
Потом поставьте галочку напротив строчки "Использовать шифрование" и наберите в текстовой строчке пароль для доступа к вашему архиву.
Ещё в качестве дополнительной меры можно добавлять фейковый (ложный, поддельный) файл в начало архива. Как видно из скриншота, я туда поместил файл с картинкой под названием "lock.png". Всё, теперь нажимаем кнопку "Запаковать", программа спросит имя файла и путь сохранения. Я указал название "logo.png". Архив готов. При создании архива появилось окошко с числом "2894". Запишем это число на бумажечке, оно нам ещё пригодится. Можете попробовать открыть полученный файл на компьютере, картинка откроется совершенно нормально, без ругани, что файл как-то странно перегружен. Ну и что, что такая маленькая картинка занимает 16 Кб. Может я ламер и запаковал картинку в плохом формате сжатия
Теперь приступаем к созданию нашего приложения.
Перед тем как начать, кратко опишу функции, которые поддерживает библиотека Lib_vault:
OpenVault(fname: String; of: Integer) - Открыть файл с ресурсами
fname - имя файла с ресурсами (символ "/" в начале писать не нужно)
of - отступ в байтах от начала файла (в случае добавления фейковых файлов перед заголовком, иначе 0)
Security(pass: String; scroll: Integer) - Установить параметры безопасности для архива ресурсов
pass - пароль
scroll - циклический сдвиг каждого байта на N битов влево
(пока не поддерживается запаковщиком, но уже забронировано, пока ставьте значение 0)
Image LoadImage(res: Integer) - Загрузить картинку из архива
res - номер ресурса в архиве
String LoadText(res: Integer; enc: Integer) - Загрузить текстовый файл целиком
res - номер ресурса в архиве
enc - кодировка символов
0 - не делать перекодировку
1 - перекодировка Windows (cp1251) -- > UTF-8
2 - перекодировка ANSI -- > UTF-8
LoadSound(res: Integer; format: String; loop: Integer) - Загрузить мелодию из архива
res - номер ресурса в архиве
format - формат аудио (пример, "audio/midi") подробнее смотри стандартный хелп по функции OpenPlayer
loop - количество раз, которое будет воспроизводиться мелодия
PlaySound - Начать воспроизведение мелодии загруженной ранее функцией LoadSound
StopSound - Закончить воспроизведение мелодии
Ну а теперь собственно сама программа, я подробно всё откомментировал.
Думаю у вас не возникнет дополнительных вопросов.
Program VaultTest;
Uses vault;
Var
im: image;
s: string;
Begin
im:=LoadImage('/logo.png'); // Открываем наш архив как обычную картинку
DrawImage(im, 5, 5); // Рисуем на экране симпатичный замочек (закрытый)
Repaint; Delay(5000); // Ждем 5 секунд
SetColor(255, 255, 255); FillRect(0, 0, GetWidth, GetHeight); // Очистка экрана
OpenVault('logo.png', 2894); // Открываем наше хранилище (сдвиг от начала файла 2894 байт)
Security('1234567890', 0); // Пароль 1234567890, циклический сдвиг битов не применялся (пока 0)
im:=vault.LoadImage(0); // Извлекаем ресурс #0 - картинку
DrawImage(im, 5, 5); // Рисуем на экране симпатичный замочек (уже открытый!)
s:=vault.LoadText(1, 1); // Загружаем текстовый файл целиком (кодировка Win-1251)
SetColor(0, 0, 0); DrawText(s, 2, 70); // Рисуем текст на экране
vault.LoadSound(2, 'audio/midi', 1); // Загружаем ресурс #2 - MIDI мелодию, играть будем 1 раз
vault.PlaySound; // Начать воспроизведение
Repaint; Delay(50000); // Ждем 50 секунд
End.
В общем, это и всё, что я хотел сегодня рассказать. Я показал как успешно хранить ваши ресурсы в зашифрованном виде, как маскировать их под обычные файлы. Ждите выходов новых версий запаковщика и распаковщика соответственно тоже.