Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

18 Август 2019, 20:28 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Вы можете задать вопрос по LibreOffice или Apache OpenOffice  без регистрации, используя форму
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Макрос который запускает другие макросы, только в случае валидного кода-пароля  (Прочитано 668 раз)
0 Пользователей и 1 Гость смотрят эту тему.
fujica
Участник
**
Offline Offline

Сообщений: 17


« Стартовое сообщение: 14 Апрель 2019, 11:48 »

Добрый день.
Задача в общих чертах.
Нужно сделать так чтобы таблица(а конкретно макросы в ней) работала одну неделю по "одноразовому" коду который у меня будут запрашивать и вводить в ячейку, по окончанию недели пароль становился недействительным (неделя считается с пн по вс, в не зависимости от даты ввода кода). То есть нужно запрашивать извне дату и по определённому алгоритму вычислять "код" и сравнивать значение с ячейкой.
Что логично, нужна ещё и функция нахождения, этого кода в отдельном макросе, для меня.
Вопрос в том как заблокировать исполнение макросов, можно в самой первой строчке каждого макроса поставить условие на проверку? Но это слишком заметно. Какие ещё есть варианты? Встроить функцию в середине, которая будет крашить макрос?..

Конкретика. Мои идеи.
Пишем макрос в котором определяем псевдорандомную функцию (ГПСЧ) и передаём ей значение из ячейки она сравнивает его с внутренним в функции и если они совпадают, то возвращает положительный ответ, иначе отрицательный.
Примерный алгоритм на псевдокоде:
Код:

int multiplier = 1103515245;
int addend = 12345;
int X_next = [54321];
int year = int(getteme(год));
int number_week = int(getteme(номер недели)); \\желательно брать из интернета, если такое возможно

int test_rand(value_cell){
X_next = multiplier+year*X_next + addend + number_week;
if (value_cell == X_next) return 1;
else return 0;
}
И вторая часть кода в макросе, даже не представляю.
Код:
???

Задавайте любые уточняющие вопросы, отвечу на все.
« Последнее редактирование: 14 Апрель 2019, 11:50 от fujica » Записан
economist
Форумчанин
***
Offline Offline

Сообщений: 980


« Ответ #1: 15 Апрель 2019, 12:51 »

Тема интересная, жаль нет готовых расширений по защите кода. Вот несколько мыслей. В макросе важно не хранить пароль и проверять не сам пароль, а его хэш после XOR. Хэш 100% обратим.

хэш=(pass XOR ДатаПн) XOR ДатаПт

В таком хэше зашифрован сам пароль и две даты, но понять это, глядя на хэш - нельзя.

Проверять валидность ключа можно функцией, лежащей в отдельном зашифрованном и обфусцированном модуле (еще бы лучше в DLL написанной на С). Помещение алгоритма проверки валидности кода в рабочем теле программы на Basic - слишком очевидно и наверняка легко дебажится. 

"Ломалок паролей" на модули LO Basic я 2 года назад не нашел (а для VBA в Excel - полно их), так что такую защиту считаю вполне приемлемой для несильно коммерческих проектов.

Если комп с программой постоянно в Инете - дату/время нужно брать по NTP, иначе простая смена даты в BIOS или системе "обойдет" пароль. Функцию проверки желательно "дергать" в основном коде во многих местах, даже не логичных, перемежая её с ложняками на другие похожие функции-пустышки.   
Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!