Ресурсы внутри exe

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
--=GAMER=--
Фиолетовый бот
Фиолетовый бот
Аватара пользователя
 
Сообщения: 810
Зарегистрирован: 22.03.2004 (Пн) 11:29
Откуда: Владивосток

Ресурсы внутри exe

Сообщение --=GAMER=-- » 05.04.2010 (Пн) 16:21

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

Заранее спасибо за ответы)
В темноте слепец — самый надежный проводник. В эпоху безумия пусть тебя ведет сумасшедший.

rRenderer Engine
VB Wiki

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Ресурсы внутри exe

Сообщение Antonariy » 05.04.2010 (Пн) 16:39

>_<
Вот уж от кого не ожидал…
Лучший способ понять что-то самому — объяснить это другому.

--=GAMER=--
Фиолетовый бот
Фиолетовый бот
Аватара пользователя
 
Сообщения: 810
Зарегистрирован: 22.03.2004 (Пн) 11:29
Откуда: Владивосток

Re: Ресурсы внутри exe

Сообщение --=GAMER=-- » 05.04.2010 (Пн) 17:13

Antonariy, неужто вопрос из FAQ :oops:
В темноте слепец — самый надежный проводник. В эпоху безумия пусть тебя ведет сумасшедший.

rRenderer Engine
VB Wiki

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Ресурсы внутри exe

Сообщение FireFenix » 05.04.2010 (Пн) 18:11

Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

--=GAMER=--
Фиолетовый бот
Фиолетовый бот
Аватара пользователя
 
Сообщения: 810
Зарегистрирован: 22.03.2004 (Пн) 11:29
Откуда: Владивосток

Re: Ресурсы внутри exe

Сообщение --=GAMER=-- » 06.04.2010 (Вт) 8:07

:oops: Спасибо, не силён я в IDE)
В темноте слепец — самый надежный проводник. В эпоху безумия пусть тебя ведет сумасшедший.

rRenderer Engine
VB Wiki

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: Ресурсы внутри exe

Сообщение Andrey Fedorov » 07.04.2010 (Ср) 0:26

--=GAMER=-- писал(а):Вопрос: как запихнуть все эти ресурсы внутрь vb проекта (что бы на выходе получился один лишь exe файл) , и как их использовать/подгружать по мере надобности.


Может лучше не надо растить монстра? По настоящему критичные изменения наверняка ведь могут быть произведены лишь в нескольких файлах - ну и хранить для таких файлов их контрольную сумму - можно просто в отдельном файле...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

--=GAMER=--
Фиолетовый бот
Фиолетовый бот
Аватара пользователя
 
Сообщения: 810
Зарегистрирован: 22.03.2004 (Пн) 11:29
Откуда: Владивосток

Re: Ресурсы внутри exe

Сообщение --=GAMER=-- » 07.04.2010 (Ср) 9:36

Была идея резать один большой джипег или бмп, на нужные части, ну и хранить его md5)
В итоге ресурсы обошлись "дешевле" )
В темноте слепец — самый надежный проводник. В эпоху безумия пусть тебя ведет сумасшедший.

rRenderer Engine
VB Wiki

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: Ресурсы внутри exe

Сообщение Andrey Fedorov » 07.04.2010 (Ср) 10:50

--=GAMER=-- писал(а):Была идея резать один большой джипег или бмп, на нужные части, ну и хранить его md5)
В итоге ресурсы обошлись "дешевле" )


Можно еще запихивать все файлы в MDB-шку и вытаскивать из нее.

А в чем, собственно, криминал подмены рисунка юзером на своей машине? Хочет менять - пускай развлекается - это его проблемы. Ресурсы программы при желании ведь тоже можно отредактировать...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Ресурсы внутри exe

Сообщение Денис » 07.04.2010 (Ср) 12:55

А, допустим, если имеется много графики, то вся эта графика пихается в ресурсы dll. Потом эта dll присоединяется поздним связыванием (даже с возможностью выбора из комбобокса). А уж эту dll можно хоть хэш хранить, хоть цифровой подписью подписать. И тут мы вплотную подходим к явлению скинов.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: Ресурсы внутри exe

Сообщение Andrey Fedorov » 07.04.2010 (Ср) 17:44

Денис писал(а):А, допустим, если имеется много графики, то вся эта графика пихается в ресурсы dll. Потом эта dll присоединяется поздним связыванием (даже с возможностью выбора из комбобокса). А уж эту dll можно хоть хэш хранить, хоть цифровой подписью подписать. И тут мы вплотную подходим к явлению скинов.


А скинам какая разница откуда берутся рисунки - из отдельных файлов, базы или dll/exe? Причем отдельные файлы в данном случае зачастую удобней - юзер может создавать свои...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Ресурсы внутри exe

Сообщение Денис » 07.04.2010 (Ср) 18:40

Andrey Fedorov писал(а):А скинам какая разница откуда берутся рисунки - из отдельных файлов, базы или dll/exe? Причем отдельные файлы в данном случае зачастую удобней - юзер может создавать свои...


Для пользователя разницы никакой, но производитель может, скажем, из соображений безопасности, выпускать свои подписанные скины. Как темы оформления в Windows, например, начиная с ХР. (Да, не спорю, можно крякнуть библиотеку тем и цеплять сторонние темы, но это езмь прямое нарушение лиц.соглашения и MS в этом случае не гарантирует работоспособность своей системы.)
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: Ресурсы внутри exe

Сообщение SLIM » 07.04.2010 (Ср) 21:34

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

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: Ресурсы внутри exe

Сообщение Andrey Fedorov » 07.04.2010 (Ср) 22:09

SLIM писал(а):Ну, или, взять и объединить все файлы в один непрерывный, да еще и закодировать. Тогда пользователь даже если и будет править что-то, то точно не будет знать что именно - цифры, буквы в текстовике никому не интересны.


Ну а проще всего это проделать с той-же mdb-шкой...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

--=GAMER=--
Фиолетовый бот
Фиолетовый бот
Аватара пользователя
 
Сообщения: 810
Зарегистрирован: 22.03.2004 (Пн) 11:29
Откуда: Владивосток

Re: Ресурсы внутри exe

Сообщение --=GAMER=-- » 08.04.2010 (Чт) 9:33

Постановка задачи была такой)
Что на выходе единственный exe файл) (Максимум разрешенного - рантаймы)

Ну уж если и отредактируют, то заменить exe проблемы не составит)
В темноте слепец — самый надежный проводник. В эпоху безумия пусть тебя ведет сумасшедший.

rRenderer Engine
VB Wiki

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Ресурсы внутри exe

Сообщение Денис » 08.04.2010 (Чт) 9:51

--=GAMER=-- писал(а):Постановка задачи была такой)
Что на выходе единственный exe файл) (Максимум разрешенного - рантаймы)

Ну уж если и отредактируют, то заменить exe проблемы не составит)


Ну, тогда все просто. Пересчитываем хэши всех ресурсов, в функции, достающей и возвращающей объект из ресурсов параметром передаем хэш. Например, так: FuncLoadMyRes(ResType, ResID, ResHash) as Object

Функция достает ресурс стандартной функцией, потом считает хэш и сравнивает. если совпадает, возвращает ресурс, ееееслииии жееее нееет :twisted: :
Код: Выделить всё
msgbox ("Нарушена целостность приложения!", vbCritical, "Приложение")
unload me
end
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

--=GAMER=--
Фиолетовый бот
Фиолетовый бот
Аватара пользователя
 
Сообщения: 810
Зарегистрирован: 22.03.2004 (Пн) 11:29
Откуда: Владивосток

Re: Ресурсы внутри exe

Сообщение --=GAMER=-- » 09.04.2010 (Пт) 4:42

А чем хуже проверять md5 самого exe, если все ресурсы в нём?)
В темноте слепец — самый надежный проводник. В эпоху безумия пусть тебя ведет сумасшедший.

rRenderer Engine
VB Wiki

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Ресурсы внутри exe

Сообщение MIT » 09.04.2010 (Пт) 6:42

--=GAMER=--, а расскажи: как ты собрался проверять md5 exe`шника? Где будет хранится значение, с которым должно сравниваться полученное?
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Ресурсы внутри exe

Сообщение Денис » 09.04.2010 (Пт) 10:26

Денис писал(а):Пересчитываем хэши всех ресурсов, в функции, достающей и возвращающей объект из ресурсов параметром передаем хэш. Например, так:


Пользуясь классом MD5Hash.cls отсюда, я написал небольшой примерчик. Я не стал заморачиваться с ресурсами, закомментил вызов LoadResData.
Чтобы начать работу, надо, значит, раскомментить нужные строки и удалить код, генерирующий блок случайных данных в буффер, а так же объявление буффера на уровне формы. Ну и еще кинуть на форму кнопку Command1:

Код: Выделить всё
Option Explicit

Dim TmpBuffer() As Byte

Private Function SecureLoadResData(ResID As Variant, ResType As Variant, ResHash As String) As Variant
   
   'Dim TmpBuffer() As Byte
   Dim TmpHash As String
   
   Dim cMD5 As MD5Hash
   Set cMD5 = New MD5Hash
   
   'TmpBuffer = LoadResData(ResID, ResType)
   TmpHash = cMD5.HashBytes(TmpBuffer)
   
   Set cMD5 = Nothing
   
   If TmpHash = ResHash Then
      SecureLoadResData = TmpBuffer
      Debug.Print "Done!"
   Else
      MsgBox "Нарушение целостности приложения!", vbCritical, "Приложение"
      Debug.Print TmpHash
   End If
   
End Function

Private Sub Command1_Click()
   SecureLoadResData 1, 1, "68A8514FE71BBFCF5B6F33145F146CB6"
End Sub

Private Sub Form_Load()
   
   'Randomize
   
   Dim i As Integer
   ReDim TmpBuffer(1000)
     
      For i = 0 To 1000
         TmpBuffer(i) = Int(Rnd * 255)
      Next
     
End Sub


При загрузке произвольных данных возвращается массив байт, при загрузке строк возвращаются строки, проблема в том, что при загрузке картинок возвращается объект-картинка. Чтобы посчитать хэш, придется преобразовать содержимое этого объекта в массив байт. Или еще поискать класс, который умеет считать хэш из объекта-картинки.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Yandex-бот и гости: 66

    TopList