Показать сообщение отдельно
Старый 14.07.2009, 21:45   #1
odd
Мастер
 
Аватар для odd
 
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений
(для 713 пользователей)
Lib_vault - Ресурсы под замком

Представляю вам первую версию библиотеки для работы с зашифрованными пакетами ресурсов. Для чего это нужно? Для ограждения ресурсов вашего мидлета от любопытных глаз и кривых рук взломщиков. Конечно, защита пока не идеальна, нужно будет ещё добавить шифрование заголовка и скроллинг битов, но пока можно пользоваться и такой версией, защита уже вполне есть и лучше пока пользоваться такой чем вообще никакой.

Подробно опишу последовательность действий при создании зашифрованного пакета с ресурсами, чтобы потом не возникало вопросов что делать и как. В последующих версиях запаковщика нужно будет делать аналогичные действия, сами разберетесь.

Итак, для начала нужно создать пакет с нашими ресурсами. Для этого запускаем запаковщик (он прилагается к данной статье, на момент написания самая свежая версия запаковщика это 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. 
В общем, это и всё, что я хотел сегодня рассказать. Я показал как успешно хранить ваши ресурсы в зашифрованном виде, как маскировать их под обычные файлы. Ждите выходов новых версий запаковщика и распаковщика соответственно тоже.
Вложения
Тип файла: zip Lib_vault.zip (2.9 Кб, 975 просмотров)
Тип файла: zip RESPacker3.zip (273.2 Кб, 1016 просмотров)
Тип файла: zip VaultTest.zip (12.4 Кб, 908 просмотров)
(Offline)
 
Ответить с цитированием
Эти 16 пользователя(ей) сказали Спасибо odd за это полезное сообщение:
Bananbl4 (28.03.2010), GRAY_WOLF (15.10.2009), im_zorg (11.01.2010), Ksanatos (31.08.2010), Mr.Twister (15.07.2009), NetBuilding (21.07.2010), Phantom (16.07.2009), PVD (27.02.2010), Pyth_ON (15.07.2009), Richik (21.07.2009), Romanzes (28.02.2010), scimitar (01.10.2011), Serg153 (15.07.2009), Trazzy (18.11.2009), ViNT (16.07.2009), VM (15.07.2009)