8 / 7 / 2
Регистрация: 10.12.2009
Сообщений: 103
1

Защитить свой протокол от изменений так, чтобы нельзя было незаметно изменить его. Объект CAPICOM.HashedData (нужен комментарий)

29.10.2012, 18:53. Показов 3917. Ответов 5
Метки нет (Все метки)

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

Заранее благодарю откликнувшихся)))

fourth.vbs

Добавлено через 5 часов 37 минут
Здесь есть этот скрипт,но нужна помощь,его нужно откомментировать)


Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
Const ForReading = 1, ForWriting = 2, ForAppending = 8
 
Const CAPICOM_HASH_ALGORITHM_MD5 = 3
 
Algorithm = CAPICOM_HASH_ALGORITHM_MD5
 
Sub TextOut (Text, File)
  Dim  objFSO, FOut 
  Set  objFSO=WScript.CreateObject("Scripting.FileSystemObject")
  Set  FOut = objFSO.OpenTextFile (File,ForAppending,true)
  FOut.Writeline Text
  FOut.Close
End Sub
 
Sub TextOut1 (Text, File)
  Dim  objFSO, FOut 
  Set  objFSO=WScript.CreateObject("Scripting.FileSystemObject")
  Set  FOut = objFSO.OpenTextFile (File,ForWriting,true)
  FOut.Write Text
  FOut.Close
End Sub
 
Set FSO = CreateObject("Scripting.FileSystemObject") 
Set t_file = FSO.OpenTextFile("proto.txt", 1)
source = t_file.ReadAll
t_file.Close
 
Set HashedData = CreateObject("CAPICOM.HashedData")
HashedData.Algorithm = Algorithm
HashedData.Hash source
HashValue = HashedData.Value
 
Set FSO1 = CreateObject("Scripting.FileSystemObject") 
Set t_file1 = FSO.OpenTextFile("hash.txt", 1)
source1 = t_file1.Readline
t_file1.Close
 
if source1 = HashValue then
 
    Set FSO2 = CreateObject("Scripting.FileSystemObject")
    Set file1 = FSO.GetFile("file.txt")
    fsize = file1.Size
    dlm = file1.DateLastModified
    
    result = "Last modified: " & dlm & vbCrLf & "Size - " & fsize
    
    TextOut result, "proto.txt"
    
    source2 = source & result & vbCrLf
    
    Set HashedData1 = CreateObject("CAPICOM.HashedData")
    HashedData1.Algorithm = Algorithm
    HashedData1.Hash source2
    HashValue1 = HashedData1.Value
    
    TextOut1 HashValue1, "hash.txt" 
 
else 
 
    MsgBox "Файл протокола изменен"
 
end if


hash.vbs

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Option Explicit
 
Dim Algorithm
Dim HashValue
Dim HashedData
 
Const ForReading = 1, ForWriting = 2
 
Const CAPICOM_HASH_ALGORITHM_MD5 = 3
 
Sub TextOut (Text, File)
  Dim  objFSO, FOut 
  Set  objFSO=WScript.CreateObject("Scripting.FileSystemObject")
  Set  FOut = objFSO.OpenTextFile (File,ForWriting,true)
  FOut.Write Text
  FOut.Close
End Sub
 
Algorithm = CAPICOM_HASH_ALGORITHM_MD5
 
Dim FSO, FSO1
Dim t_file, t_file1
Dim source, source1
 
Set FSO = CreateObject("Scripting.FileSystemObject") 
Set t_file = FSO.OpenTextFile("proto.txt", 1)
source = t_file.ReadAll
t_file.Close
 
Set HashedData = CreateObject("CAPICOM.HashedData")
HashedData.Algorithm = Algorithm
HashedData.Hash source
HashValue = HashedData.Value
 
TextOut HashValue, "hash.txt"
 
Set HashedData = Nothing
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.10.2012, 18:53
Ответы с готовыми решениями:

Изменить программу, чтобы нельзя было посчитать с отрицательным числом
В программе ВВОД нужно сделать так, чтобы если введено число меньше или равно нулю то программа...

Как сделать так чтобы в ComboBox нельзя было печатать
Здравствуйте! Как сделать так, чтобы в ComboBox нельзя было вводить текст вручную, а только...

Сделать так, чтобы JFrame нельзя было вернуть в нормальное состояние
Всем доброго дня, я хочу сделать так, чтобы мой JFrame нельзя было вернуть в нормальное состояние....

Как записать диск так чтобы копию нельзя было снять?
Здравствуйте! как записать диск так чтобы копию нельзя было снять? Спасибки

5
Эксперт WindowsАвтор FAQ
17663 / 7507 / 887
Регистрация: 25.12.2011
Сообщений: 11,279
Записей в блоге: 16
02.11.2012, 02:26 2
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
Option Explicit
 
Const ForReading = 1, ForWriting = 2, ForAppending = 8
 
Const CAPICOM_HASH_ALGORITHM_MD5 = 3
 
Algorithm = CAPICOM_HASH_ALGORITHM_MD5
 
Sub TextOut(Text, File)
  'Подпрограмма дозаписи файла file указанным текстом text
  Dim objFSO, FOut
  Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
  Set FOut = objFSO.OpenTextFile(File, ForAppending, True) 'True - создать файл, если не существует
  FOut.Writeline Text
  FOut.Close
End Sub
 
Sub TextOut1(Text, File)
  'Подпрограмма записи в файл file указанного текста text
  Dim objFSO, FOut
  Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
  Set FOut = objFSO.OpenTextFile(File, ForWriting, True) 'True - создать файл, если не существует
  FOut.Write Text
  FOut.Close
End Sub
 
'Читаем все с файла proto.txt
Set FSO = CreateObject("Scripting.FileSystemObject")
Set t_file = FSO.OpenTextFile("proto.txt", 1)
Source = t_file.ReadAll
t_file.Close
 
Set HashedData = CreateObject("CAPICOM.HashedData")
'Устанавливаем свойство - алгоритм Хеша
HashedData.Algorithm = Algorithm
'Натравливаем содержимое прочтенного файла
HashedData.Hash Source
'Получаем хеш
HashValue = HashedData.Value
 
'Читаем все с файла hash.txt
Set FSO1 = CreateObject("Scripting.FileSystemObject")
Set t_file1 = FSO.OpenTextFile("hash.txt", 1)
source1 = t_file1.Readline
t_file1.Close
 
'Если хеши совпадают
If source1 = HashValue Then
 
    Set FSO2 = CreateObject("Scripting.FileSystemObject")
    Set file1 = FSO.GetFile("file.txt")
    'Объем файла
    fsize = file1.Size
    'Дата последней модификации
    dlm = file1.DateLastModified
    
    result = "Last modified: " & dlm & vbCrLf & "Size - " & fsize
    
    'Дрописываем к исходному файлу эту инфу
    TextOut result, "proto.txt"
    
    'Теперь будем хешировать то, что и раньше, но еще и + эти данные
    source2 = Source & result & vbCrLf
    
    Set HashedData1 = CreateObject("CAPICOM.HashedData")
    HashedData1.Algorithm = Algorithm
    HashedData1.Hash source2
    HashValue1 = HashedData1.Value
    
    'Пересоздаем файл хеша
    TextOut1 HashValue1, "hash.txt"
 
Else
 
    MsgBox "Файл протокола изменен"
 
End If
'Получается смысл в том, чтобы протокол хранил дату проверки своей целостности
'А хеш-файл хранит MD5-хеш этого протокола и постоянно изменяется, как только
'проведена новая проверка протокола.

'Немного ущербный алгоритм
'Зачем тут по три раза создавать одни и те же объекты.
'Капиком можно было загнать в отдельную подпрограмму и не гонять по два раза.

hash.vbs запускают первым. Он создает Хеш-файл,
читая содержимое файла-протокола.

Добавлено через 6 минут
Кстати, в результате получается неверный хеш MD5.
Сейчас смотрю что идет не так.
Вероятно читать содержимое таким методом нельзя.

Добавлено через 9 минут
Да, так и есть: 2 лишних байта CrLf

Добавлено через 1 час 41 минуту
И создатель скрипта явно не читал справки:
Цитата Сообщение от microsoft
To create the hash of a large amount of data, call the Hash method for each piece of data. The hash of each piece of data is concatenated to the Value property until the property is read. The contents of the Value property are reset when the property is read.
Добавлено через 11 минут
Даже без этих 2 байт выдает неверный хеш - не смог разобраться.
1
8 / 7 / 2
Регистрация: 10.12.2009
Сообщений: 103
03.11.2012, 18:54  [ТС] 3
А можете улучшить код?
0
Эксперт WindowsАвтор FAQ
17663 / 7507 / 887
Регистрация: 25.12.2011
Сообщений: 11,279
Записей в блоге: 16
04.11.2012, 02:40 4
Чтобы получить правильный хеш нужно подать на вход этому объекту
байтовый массив, записанный без старших байтов (нулей). String -> Byte Array.

По скольку в VBS есть только тип Variant, сделать это не получится,
ну или крайне сложно.

Да и задача у Вас стоит - защитить протокол от изменений.
С ней данный алгоритм справляется на ура.
1
Эксперт WindowsАвтор FAQ
17663 / 7507 / 887
Регистрация: 25.12.2011
Сообщений: 11,279
Записей в блоге: 16
10.11.2012, 20:19 5
Лучший ответ Сообщение было отмечено как решение

Решение

Вот так выглядит корректный алгоритм создания файла HashFile с MD5-хеш-суммой файла SrcFile:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Option Explicit
Dim SrcFile, HashFile, HashValue, Algorithm, VarByte
 
Const ForReading = 1, ForWriting = 2
Const CAPICOM_HASH_ALGORITHM_MD5 = 3
 
SrcFile = "H:\1\proto.txt"
HashFile = "h:\1\hash.txt"
 
Algorithm = CAPICOM_HASH_ALGORITHM_MD5
 
With CreateObject("ADODB.Stream")
    .Type = 1 'adTypeBinary
    .Open
    .LoadFromFile (SrcFile)
    VarByte = .Read(.Size)
    .Close
End With
 
With CreateObject("CAPICOM.HashedData")
    .Algorithm = Algorithm
    .Hash VarByte
    HashValue = .Value
End with
 
With CreateObject("Scripting.FileSystemObject")
    With .OpenTextFile(HashFile, ForWriting, True)
        .Write HashValue
        .Close
    End With
End With
1
Эксперт WindowsАвтор FAQ
17663 / 7507 / 887
Регистрация: 25.12.2011
Сообщений: 11,279
Записей в блоге: 16
16.09.2013, 13:24 6
Еще один способ.
Переводим строку в байтовый массив с помощью метода из состава Net.FrameWork

Этот код вычисляет MD5-хеш заданной строки.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Dim HashValue, Algorithm, VarByte, strText
 
Const CAPICOM_HASH_ALGORITHM_MD5 = 3
 
Algorithm = CAPICOM_HASH_ALGORITHM_MD5
 
'Строка, хеш которой вычисляем
strText = "Используем метод ASCIIEncoding из состава Net.Framework"
'http://msdn.microsoft.com/en-us/library/system.text.asciiencoding.aspx
 
VarByte = CreateObject("System.Text.ASCIIEncoding").GetBytes_4(strText)
 
With CreateObject("CAPICOM.HashedData")
    .Algorithm = Algorithm
    .Hash VarByte
    HashValue = .Value
End With
 
MsgBox HashValue
Напомню, чтобы зарегистрировать в системе библиотеку Capicom, необходимо:
1) Скачать Capicom SDK
2) Установить
3) Перейти в папку “C:\Program Files (x86)\Microsoft CAPICOM 2.1.0.2 SDK\Lib\X86”
4) Скопировать файл CAPICOM.dll в папку %SystemRoot%\Windows\System32 (для 32-разрядных ОС) или
%SystemRoot%\Windows\SysWow64 (для 64-разрядных ОС)
5) Выполнить из-под консоли с повышенными правами команду:
Bash
1
regsvr32 capicom.dll
0
Вложения
Тип файла: rar capicom.dll.rar (151.5 Кб, 12 просмотров)
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.09.2013, 13:24

Как сделать так, чтобы определенный edit нельзя было редактировать ?
На форме имеется едит в котором автоматически просчитывается цена по формуле, как сделать так,...

Как сделать так, чтобы компонент RadioGroup нельзя было изменять?
как сделать так чтобы компонент RadioGroup нельзя было изменять?

Как сделать так, чтобы нельзя было вводить не буквы и не цифры в delphi ?
как сделать так что бы нельзя было вводить не буквы и не цифры в delphi ?

Как сделать так, чтобы на рабочем столе значки нельзя было перемещать?
Всем привет. Такая вот проблемка. Как сделать так, чтобы на рабочем столе значки нельзя было...

Сделать так, чтобы при выборе одного checkbox'a нельзя было выбрать другой
Помогите сделать так, что бы при выборе одного checkbox'a нельзя было выбрать другой. А так же как...

Как поставить защиту на диск,чтобы нельзя было его скинуть
Скажите пожалуйста как сделать так,чтобы скинуть на диск прогу,а затем установить защиту


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.