Денис писал(а):Пересчитываем хэши всех ресурсов, в функции, достающей и возвращающей объект из ресурсов параметром передаем хэш. Например, так:
Пользуясь классом
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
При загрузке произвольных данных возвращается массив байт, при загрузке строк возвращаются строки, проблема в том, что при загрузке картинок возвращается объект-картинка. Чтобы посчитать хэш, придется преобразовать содержимое этого объекта в массив байт. Или еще поискать класс, который умеет считать хэш из объекта-картинки.