forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Библиотеки (http://forum.boolean.name/forumdisplay.php?f=124)
-   -   Lib_vault - Ресурсы под замком (http://forum.boolean.name/showthread.php?t=8667)

odd 14.07.2009 21:45

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

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

Итак, для начала нужно создать пакет с нашими ресурсами. Для этого запускаем запаковщик (он прилагается к данной статье, на момент написания самая свежая версия запаковщика это 3).

Нажимаем кнопку "Добавить" и выбираем файлы, которые нужно поместить в архив. У меня получилось примерно такой архивчик:



Потом поставьте галочку напротив строчки "Использовать шифрование" и наберите в текстовой строчке пароль для доступа к вашему архиву.

Ещё в качестве дополнительной меры можно добавлять фейковый (ложный, поддельный) файл в начало архива. Как видно из скриншота, я туда поместил файл с картинкой под названием "lock.png". Всё, теперь нажимаем кнопку "Запаковать", программа спросит имя файла и путь сохранения. Я указал название "logo.png". Архив готов. При создании архива появилось окошко с числом "2894". Запишем это число на бумажечке, оно нам ещё пригодится. Можете попробовать открыть полученный файл на компьютере, картинка откроется совершенно нормально, без ругани, что файл как-то странно перегружен. Ну и что, что такая маленькая картинка занимает 16 Кб. Может я ламер и запаковал картинку в плохом формате сжатия :-D

Теперь приступаем к созданию нашего приложения.
Перед тем как начать, кратко опишу функции, которые поддерживает библиотека Lib_vault:

PHP код:

OpenVault(fnameStringofInteger) - Открыть файл с ресурсами
    fname 
имя файла с ресурсами (символ "/" в начале писать не нужно)
    
of отступ в байтах от начала файла (в случае добавления фейковых файлов перед заголовкоминаче 0)
    
Security(passStringscrollInteger) - Установить параметры безопасности для архива ресурсов
    pass 
пароль
    scroll 
циклический сдвиг каждого байта на N битов влево
    
(пока не поддерживается запаковщикомно уже забронированопока ставьте значение 0)
    
Image LoadImage(resInteger) - Загрузить картинку из архива
    res 
номер ресурса в архиве
    
String LoadText
(resIntegerencInteger) - Загрузить текстовый файл целиком
    res 
номер ресурса в архиве
    enc 
кодировка символов
    0 
не делать перекодировку
    1 
перекодировка Windows (cp1251) -- > UTF-8
    2 
перекодировка ANSI -- > UTF-8
    
LoadSound
(resIntegerformatStringloopInteger) - Загрузить мелодию из архива
    res 
номер ресурса в архиве
    format 
формат аудио (пример"audio/midi"подробнее смотри стандартный хелп по функции OpenPlayer
    loop 
количество разкоторое будет воспроизводиться мелодия
    
PlaySound 
Начать воспроизведение мелодии загруженной ранее функцией LoadSound

StopSound 
Закончить воспроизведение мелодии 

Ну а теперь собственно сама программа, я подробно всё откомментировал.
Думаю у вас не возникнет дополнительных вопросов.
PHP код:

Program VaultTest;
Uses vault;
Var
    
imimage;
    
sstring;
Begin
    
    im
:=LoadImage('/logo.png');  // Открываем наш архив как обычную картинку
    
DrawImage(im55); // Рисуем на экране симпатичный замочек (закрытый)
    
RepaintDelay(5000); // Ждем 5 секунд
    
    
SetColor(255255255); FillRect(00GetWidthGetHeight); // Очистка экрана
    
    
OpenVault('logo.png'2894); // Открываем наше хранилище (сдвиг от начала файла 2894 байт)
    
Security('1234567890'0); // Пароль 1234567890, циклический сдвиг битов не применялся (пока 0)
    
    
im:=vault.LoadImage(0); // Извлекаем ресурс #0 - картинку
    
DrawImage(im55); // Рисуем на экране симпатичный замочек (уже открытый!)
    
    
s:=vault.LoadText(11); // Загружаем текстовый файл целиком (кодировка Win-1251)
    
SetColor(000); DrawText(s270); // Рисуем текст на экране
    
    
vault.LoadSound(2'audio/midi'1); // Загружаем ресурс #2 - MIDI мелодию, играть будем 1 раз
    
vault.PlaySound// Начать воспроизведение
    
    
RepaintDelay(50000); // Ждем 50 секунд
    
End

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

Serg153 15.07.2009 12:08

Ответ: Lib_vault - Ресурсы под замком
 
Либа работает нормально... распаковывает...
а вот Ресурпакер - при распаковке кажется глючит....
1- если неуказать смещение(при наличии "ложного" файла) - то прога Зависает и за несколько секунд пишет сотни и тысячи файлов с лабудой в каталог распаковки...
2 - если Указать смещение - то распаковка происходит,
но - все русурсы распаковывает с одним расширением PNG
хотя, как в примере там были три типа (png, txt, mid)
и размер Распакованных ресурсов неявляется истинным - он равен размеру упакованного файла (в примере 3 файла по 16Кб...)
---
может подправите Пакер?
а так, усё работает... :-)

Tadeus 15.07.2009 16:45

Ответ: Lib_vault - Ресурсы под замком
 
Lib_vault: Prepare for the future :crazy:

ViNT 16.07.2009 02:46

Ответ: Lib_vault - Ресурсы под замком
 
Пакер пока в разработке, еще не сделаны некоторые проверки корректности входных данных.

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

impersonalis 16.07.2009 12:34

Ответ: Lib_vault - Ресурсы под замком
 
Какой алгоритм шифрования используется?
Если вы считаете, что мой вопрос раскрывает секретность, то Вам сюда - http://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF_%D0%9A% D0%B5%D1%80%D0%BA%D0%B3%D0%BE%D1%84%D1%84%D1%81%D0 %B0
Цитата:

Система не должна быть секретной, и если она попадёт в руки противника, это не должно причинить неудобства.
«принцип Керкгоффса».

И, если я не ошибаюсь, создание крипто-прог возможно только по лицензии ФАПСИ ?

odd 16.07.2009 18:43

Ответ: Lib_vault - Ресурсы под замком
 
Тут принцип несколько другой. Сам алгоритм не защищен и может быть легко получен любым декомпилятором. Для усложнения жизни хакерам сам ключ можно не хранить в программе, а получать его, скажем, из сети Интернет. Сам алгоритм шифрования самый простой из возможных, напоминает скорее шифрацию в полиморфик вирусах, чем реально стойкие современные криптоалгоритмы.

ФАПСИ осталось не у дел. Я уверен, что опытные криптографы даже не зная алгоритма шифрования и его ключа всё равно смогут взломать данную защиту причем в рекордно короткие сроки (менее чем за 1 день).

Phantom 16.07.2009 20:44

Ответ: Lib_vault - Ресурсы под замком
 
Цитата:

1 - перекодировка Windows (cp1251) -- > UTF-8
2 - перекодировка ANSI -- > UTF-8
Разве это не одно и то же? Может вместо ANSI ты имел в виду ASCII?

odd 18.07.2009 15:40

Ответ: Lib_vault - Ресурсы под замком
 
ACSII это вообще то первые 128 символов, а с ними как раз никаких проблем не возникает. А вот вторые 128 символов кодируют как кто захочет, кто в cp1251, кто в КОИ, кто в ISO8859-5. Хз. Возможно это в реальной жизни кодировка ISO, во всяком случае алгоритмы у cp1251 и ANSI(ISO?) совершенно разные.

Phantom 18.07.2009 18:36

Ответ: Lib_vault - Ресурсы под замком
 
Мой текстовый редактор при сохранении в ANSI сохраняет в WINDOWS-1251

МонстР 03.08.2009 22:12

Ответ: Lib_vault - Ресурсы под замком
 
Odd, а может напишешь шифровальшик на php? Или можешь мне в асю написать и разьяснить алоритм шифровки, попробую сам)

DmitryNPK 15.10.2009 21:10

Ответ: Lib_vault - Ресурсы под замком
 
Почему-то либа распаковывает тестовый файл (тот что в архиве), а если сам собираешь - не распаковывает.

ViNT 15.10.2009 21:21

Ответ: Lib_vault - Ресурсы под замком
 
А встроенный распаковщик программы распаковывает?

GRAY_WOLF 15.10.2009 21:30

Ответ: Lib_vault - Ресурсы под замком
 
Где-то при сборке допустил глюк. Читай по внимательней 1 пост.

DmitryNPK 15.10.2009 21:33

Ответ: Lib_vault - Ресурсы под замком
 
Да. Пытался сделать архив 1 в 1 как в тесте - ни каких ошибок не выскакивает, просто картинки/текст - не показывает.

GRAY_WOLF 15.10.2009 21:42

Ответ: Lib_vault - Ресурсы под замком
 
Цитата:

Сообщение от DmitryNPK (Сообщение 121727)
Да. Пытался сделать архив 1 в 1 как в тесте - ни каких ошибок не выскакивает, просто картинки/текст - не показывает.

Без исходника, что либо сказать трудно. Выложи посмотрим.


Часовой пояс GMT +4, время: 15:29.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot