Skip to content

Instantly share code, notes, and snippets.

@trszdev
Last active April 27, 2019 20:39
Show Gist options
  • Save trszdev/f33617aecd2433302cc5d0f8e569e939 to your computer and use it in GitHub Desktop.
Save trszdev/f33617aecd2433302cc5d0f8e569e939 to your computer and use it in GitHub Desktop.
1C .lgd log changer
"""
> 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