Макрос который запускает другие макросы, только в случае валидного кода-пароля

Автор fujica, 14 апреля 2019, 11:48

0 Пользователи и 1 гость просматривают эту тему.

fujica

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

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


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;
}

И вторая часть кода в макросе, даже не представляю.

???


Задавайте любые уточняющие вопросы, отвечу на все.

economist

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

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

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

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

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

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