Last active
April 27, 2019 20:39
-
-
Save trszdev/f33617aecd2433302cc5d0f8e569e939 to your computer and use it in GitHub Desktop.
1C .lgd log changer
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
""" | |
> python logmorpher.py 1Cv8.lgd 14 | |
Для запуска необходим python3.6+ | |
Скрипт для изменения .lgd логов 1С: | |
* смещает даты на указанное количество дней и случайное количество секунд | |
* заменяет все компьютеры и пользователей на текущих | |
* изменяет идентикаторы сессий и транзакций на случайные | |
Перед отправкой изменненой базы преподавателю рекомендуется стереть временные файлы 1C (пустые папки и файлы), | |
и убедиться в том, что логи успешно изменились | |
Логи представляют собой sqlite базу данных, поэтому их содержимое можно посмотреть в любом браузере sqlite, | |
например: https://sqlitebrowser.org или https://sqliteonline.com | |
""" | |
from sqlite3 import connect as sql3connect | |
from sys import argv | |
from os.path import isfile | |
from platform import node as computer_name | |
from os import getlogin as user_name | |
from random import randint | |
from re import escape, sub | |
SECOND = 10000 | |
SECONDS_IN_DAY = 60 * 60 * 24 | |
if len(argv) != 3 or not isfile(argv[1]): | |
print('\tusage: python logmorpher.py [path-to-lgd-file] [days]') | |
print('\texample: python logmorpher.py 1Cv8.lgd 14') | |
exit(1) | |
additional_seconds = randint(60, 360) | |
lgd_filename, offset_str = argv[1:] | |
offset = int(offset_str) * SECOND * SECONDS_IN_DAY + additional_seconds * SECOND | |
replacement = '{"S",""},\r\n{"S","%s\\\\%s"}' % (computer_name(), user_name()) | |
print('Current computer:', computer_name()) | |
print('Current user:', user_name()) | |
print('Offset:', offset) | |
print('Additional seconds:', additional_seconds) | |
with sql3connect(lgd_filename) as db: | |
db.execute('UPDATE EventLog SET computerCode = 1') | |
db.execute('DELETE FROM ComputerCodes WHERE code != 1') | |
db.execute('UPDATE ComputerCodes SET name = ?', [f'"{computer_name()}"']) | |
db.execute('UPDATE EventLog SET transactionID = ABS(RANDOM()) % 999999 WHERE transactionID != 0') | |
db.execute('UPDATE EventLog SET session = (10 + (ABS(RANDOM()) % 30)*2) WHERE session != 2') | |
db.execute('UPDATE EventLog SET date = date + ?, transactionDate = transactionDate + ? WHERE transactionID != 0', [offset, offset]) | |
db.execute('UPDATE EventLog SET date = date + ? WHERE transactionID == 0', [offset]) | |
logs = db.execute('SELECT rowID, data FROM EventLog').fetchall() | |
for row_id, data in logs: | |
new_data = sub('{"S",""},\r\n{"S","(.+)"}', replacement, data) | |
db.execute('UPDATE EventLog SET data = ? WHERE rowID = ?', [new_data, row_id]) | |
db.commit() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment