середа, 7 листопада 2018 р.

WinEdt і пробний період


Я вже давно користуюся одним єдиним текстовим редактором — WinEdt, який я відпочатку використовував лише для роботи з LaTeX. Але відколи туди додали підтримку Unicode, стало зрозуміло, що нічого більше мені не потрібно: він годиться і для звичайних текстів, і для HTML. На жаль, бʼюрократи чомусь дуже полюбляють формат doc, який инколи, через особливості форматування, доводиться відкривати за допомогою OpenOffice, проте таке буває кілька разів на рік. Зазвичай Google Docs цілком достатньо, і нема необхідности додатково встановлювати якихось офісних монстрів.

Але повернімося до WinEdt. Цей редактор цікавий тим, що автори приділяли основну увагу розширенню функціоналу, а не монетизації. Хоча вони й пропонують, і то дуже наполегливо, придбати WinEdt через 31 день після початку використання. Однак ці набридливі пропозиції можна відключити, що цікаво, за допомогою зовнішніх скриптів, що їх підтримує сам редактор. Мова скриптів настільки багата, що дозволяє не лише автоматизувати певні дії при роботі з текстом, але й виконувати зовнішні операції, що дуже зручно, оскільки (La)TeX — це окрема програма, що обробляє вхідний файл і видає результат у зверстаному вигляді, який можна бачити за допомогою третіх програм. Запуск усього цього зоопарку, власне, й автоматизує WinEdt.

Звісно, що це є ознакою не лише великих можливостей скриптів, але й простоти захисту таймера, що відраховує 31 день. Перші версії досить було інсталювати, попередньо встановивши дату десь на 2030 рік, або, якщо ти забув це зробити, просто виправити відтак запис у реєстрі. У шостій версії (чи навіть у сьомій — не памʼятаю) у реєстрі зʼявився додатковий ключ @HKEY_CURRENT_USER\Software\WinEdt (номер версії)\Inst, в якому справжня дата зберігалася в зашифрованому вигляді. Цю дату, до того ж, перед початком роботи, програма звіряла з поточною, і, якщо бачила, що відмінність дуже велика, запускала процес нагадування про платну реєстрацію. Проте якщо цей ключ видаляти в кінці роботи, то кожного наступного разу програма думала, що це перший запуск, тому, додавши відповідну команду до скрипта сценарію виходу, можна було щодня працювати, наче вперше. Таке було можливо робити аж до десятої версії, в яку автори додали подвійну перевірку: один зашифрований ключ зберігався у реєстрі, а инший — у файлі поточного стану WinEdt.dnt. Причому в останньому, очевидно, відраховувалася кількість часу від нуля, якому відповідало чарівне число 1089357896855742345, що його можна було знайти у файлі поточного стану зразу після інсталяції. Звісно, що за допомогою скриптів було неважко, замінити цей ключ ще й у файлі, що й зробили наші китайські друзі. Як на мій смак, зробили вони це поганенько, просто замінивши цифри у відповідних позиціях, тоді як замінювати треба було ціле число (що може мати иншу кількість цифр) у другому рядку. Припускаю, хоч і не перевіряв, що коли випадково це число маленьке, така заміна поламає відповідний рядок, що призведе до втрати всієї конфіґурації.

Мабуть, китайці розрекламували своє рішення аж занадто широко, оскільки, вже з версією 10.3, така операція не працює. Тому що, після виконання всіх скриптів, програма ще раз перевіряє чарівне число у файлі, і заміняє його на правильне. Вирішення цієї проблеми я знайшов випадково, звернувши увагу на проблеми, якщо файли конфіґурації копіюються з компакт-диска, який я використовую, щоб не інсталювати щоразу все це добро. Виявляється, що WinEdt не може змінювати (що абсолютно правильно) файли з атрибутом тільки для читання. Отже, виявляється цілком достатньо встановити цей атрибут зразу після того, як скрипт відновлює чарівне число нульового дня у файлі. Ну, а на початку роботи атрибут потрібно зняти.

Гадаю, фокус з атрибутами занадто неочевидний, проте є й цілком прямолінійне рішення: зберігати копію файла з правильним числом і відновлювати його при старті. Думаю, саме цим шляхом підуть китайці, потім про це довідаються автори, і своєрідна „гонка озброєнь“ триватиме. Що буде далі не дуже цікаво. Особисто я би на місці авторів додав перевірку контрольної суми файла WinEdt.dnt, щоб його не можна було так просто міняти. Але мова не про це.

Спостерігаючи за своєрідною еволюцією шарів захисту для дурного лічильника днів, можна з упевненістю сказати, що ці шари множаться, і відповідний код вставляється в різні, мало повʼязані між собою модулі — я вже нарахував принаймні чотири такі вставки. Усі ці перевірки не лише сповільнюють, але незабаром призводитимуть до просто некоректної роботи, бо відслідкувати їхню взаємодію між собою, а також з різними сценаріями виходу й запуску, ставатиме дедалі важче. Це дає поживу для роздумів про людську природу взагалі і шлях сучасної цивілізації зокрема. І найголовніше: я не розумію, на що сподіваються автори. Невже вони думають, що ті, хто бавиться з їхніми шифруваннями, заплатить їм нарешті за реєстрацію? Хоч би пожертви запропонували робити, якщо аж так грошей хочеться!

Нема коментарів

Дописати коментар