Страницы: 1
RSS
Метод защиты: Испортить файл отщипнув 5 байт и затем восстановить поврежденный файл.
 
На одном из форумов обнаружил код для выщипования первых пяти байт из любого файла и замены этих байт на нули.  
 
Sub Испортить_файл()  
 
'испортить можно только не открытый файл  
Dim sFN$  
'место расположения и имя требуемого испортить файла  
sFN$ = "C:\1.gif"  
 
Dim f%  
Dim i%  
'ключ  
Dim skey$  
Dim b As Byte  
Dim b0 As Byte  
 
f = FreeFile  
Open sFN For Binary As #f  
For i = 1 To 5  
Get f, i, b  
skey = skey & Hex(b)  
Put f, i, b0  
Next i  
Close #f  
Debug.Print skey  
'назначил именованный диапазон AAA  
[AAA] = skey
End Sub  
 
и соответственно код для исправления:  
 
Sub Исправить_испорченный_файл()  
 
Dim f%  
Dim i%  
Dim b As Byte  
 
Dim sFN$  
'место расположения и имя требуемого исправить ранее испорченого файла  
sFN$ = "C:\1.gif"  
'ключ, который был получен, перед тем как испортить файл  
Dim skey$  
skey$ = [AAA]
f = FreeFile  
Open sFN For Binary As #f  
For i = 1 To 5      
b = CByte("&H" & Mid(skey, 2 * i - 1, 2))  
   Put f, i, b  
Next i  
Close f  
 
End Sub  
 
 
Пока отщипываем 5 байт - проблем нет.  
 
Хочу отщипнуть 10 байт, соответственно исправляю:  
For i = 1 To 10  
 
При восстановлении файла выдается 13 ошибка в строке:  
b = CByte("&H" & Mid(skey, 2 * i - 1, 2))  
 
Если к полученому 18 значному коду добавить пару знаков, то ошибка не выдается, но файл не восстанавливается...
 
Функция Hex не выдает ведущих нулей. Чтобы получать два знака для любого байта, исправьте строку в первой процедуре:  
 
skey = skey & IIf(b < 16, "0", "") & Hex(b)
 
Ай спасибо огромное!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
Тема заинтересовала. Может пригодиться.  
Только хорошо бы не заменять первые байты на нули, а как-то ОБРАТИМО их искажать в соответствии с вводимым пользователем словом-ключом.  
В соответствии с длинной введенного ключа можно было бы и количество искажаемых байтов определять.  
Только я абсолютно не умею делать байтовые операции с файлами и методами Get и Put пользоваться вообще не умею...  
И что-то не могу сообразить как, используя задаваемый ключ-пароль, ОБРАТИМО "перевирать" байты?  
Кнопочки-то CryptFile/DeCryptFile с соответствующими диалогами я сделал, а вот дальше - сам не могу...
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Alex_ST, а каков смысл такой защиты?  
Ведь, чтобы работать с таким файлом, придётся перехватывать событие открытия книги, и менять байты ДО открытия файла в Excel.  
При каждом сохранении файла придётся тоже извращаться, чтобы на диске не оказалась копия файла без защиты.  
К тому же, вся эта защита перестанет работать при отключении макросов.  
 
 
Чем не устраивает штатный пароль на открытие файла? (через Сервис - Параметры - Безопасность)  
 
Что мешает упаковать файл в запароленный архив RAR?  
(на RAR защита не ломается, если пароль надёжный, и не вскрывается перебором за ограниченное кол-во времени)
 
Ну можно вероятно использовать так - открывать файл кнопкой из ЭТОГО файла(т.е. сперва разлочиваем, открываем), при закрытии ЭТОГО файла залочиваем все связанные файлы - или каждый индивидуально кнопкой.  
Или если использовать например GetObject - то оперативно разлочили-открыли-взяли_данные-закрыли-залочили.  
Вполне может пригодиться где-нибудь. Но например у нас сеть постоянно бекапится - и вероятно все незалоченные копии будут доступны...
 
Игорь,  
примерно так я и думал использовать.  
При этом "ломаемый" файл вовсе не обязательно должен быть Ёксельным.  
Я, например, думал использовать такую защиту для хранения фоток и некоторых других файлов на расшаренном ресурсе сервера. А пароль давать только тем, кому можно их смотреть. Конечно, сначала скинув им файл с макросом для разлочивания.
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Леш, да не чудите. EducatedFool подсказал насчет РАРа. А так есть еще риск, что кто-то очень аккуратный увидев запорченый файл, просто удалит его с диска. Или еще какие нибудь грабли. Кулибины...:-)
Я сам - дурнее всякого примера! ...
 
Да я вообще-то и не настаиваю.  
Просто способ своей простотой заинтересовал.  
Было свободное время - поюзал на разных типах файлов, подрихтовал код...  
А что, то что я задумал действительно сложно реализуемо или просто больше никому не интересно?
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Так ведь тут для каждого файла нужно хранить индивидуальную информацию для разлочивания - даже если пароль может быть один.  
И не дай Бог Эксель глюканёт - погибнут все файлы...  
Рар с одним паролем лучше.
 
О.К.  
отговорили...  
Хотя просто как пример работы с файлами и байтами было бы интересно-поучительно.
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
Страницы: 1
Читают тему
Наверх