Для тех, кто в танке, небольшая справка: 1С:Предприятие
- это система для разработки баз данных.
Главный упор делается на бухгалтерию,
торговлю и прочие коммерческие штучки, хотя,
при наличии сумасшедшего заказчика, в этой
системе можно написать практически все, что
угодно, начиная от системы учета домашних
финансов, до поддержки почти любого
производства. Ну, это неважно. Важно то, что
иногда до этих данных доступ бывает просто
необходим, а пароль такая штука, что всем
подряд почему-то не дается :-(…
Начнем с первого способа (самый простой)
Любой маломальский программист в 1С знает,
что все данные для пользователя хранятся в
файле "\Путь-для-конфигурации\usrdef\users.usr".
Поэтому самый простой способ забраться в
данные - это просто прибить этот файл и
заходить совершенно свободно. Но! Если
конфигурацию оформлял аккуратный
программист, то он сделает совершенно
простую вещь - установит в конфигурации
интерфейс с нулевыми правами и такой способ
отпадет сам собой. Хотя, я такое на
сторонних конфигурациях встречал очень
редко.
Способ номер два (для продвинутых)
Основан на том же самом файле "\Путь-для-конфигурации\usrdef\users.usr".
Только в этом случае мы его прибивать не
будем, а подменим. В большинстве типовых
конфигураций есть начальный набор прав
называемый стандартными терминами. Для "1С:Торговля
и Склад" это будет "Интерфейс_Администратора",
"Интерфейс_Продавца" и так далее.
Залазим в файл "users.usr" простым HEX
редактором и в конце видим такие строчки:
"всякая чушь" Вася "чушь" .\Vasya
"чушь" Интерфейс_Администратора "чушь"
Администратор
где
- Вася - имя пользователя;
- .\Vasya - путь к каталогу пользователя, если
начинается с точки, то путь высчитывается
относительно корневого каталога базы. Или
же просто пишется "C:\SUPERTRADE\1C\Vasya";
- Интерфейс_Администратора - название
интерфейса с описанием меню и внешнего вида;
- Администратор - название блока прав.
Если руки растут откуда нужно с помощью
того же самого HEX редактора можно для любого
пользователя присвоить администраторские
права и заходить совершенно свободно. Если
же живем по принципу "не хочу, ибо мне в
лом", тогда дома берешь аналогичную
конфигурацию, подготавливаешь в ней полный
набор прав и называешь его Администратор -
приносишь, подменяешь и сидишь спокойно.
Разумеется, если названия интерфейсов
писались новые - то нужно знать название
необходимого набора прав.
Способ третий (для извращенцев)
Сам я этот способ использовал только пару
раз, когда база полностью рушилась. В
принципе, этим методом пользовались еще
несколько моих знакомых программистов, так
что он вполне реален. Дело в том, что в
каталоге конфигурации (в случае DBF-ной базы,
не SQL) хранится несколько типов файлов.
*.CFG - он нам особо не нужен, ничего важного
там нет;
1Cv7.DD - файл словаря, он нам тоже пригодится;
1Cv7.MD - файл с метаданными, всякие там макросы
и формы документов-отчетов-журналов, планы
счетов, интерфейсы и прочее.
*.CDX - индексированные файлы, нам они по
барабану, можно их покилять, чтоб вид не
портили.
И, наконец-то(!) *.DBF - собственно файлы с
данными. Вот их-то и надо разбирать.
Предупрежу сразу - эта статья писалась как
общеобразовательная, поэтому никаких
глубинных технических деталей я давать не
буду. Скажу только, что ковырять самому *.DBF-файлы
- дело нудное и неблагодарное. В Интернете
есть и DBF-вьюверы и даже программы, которые
разбирают файл словаря от 1С и потом
связывают с DBF-ками. Все это можно найти,
было бы желание, но этот способ слишком уж
экзотичен.
Способ четвертый (для крутых)
Вот этот способ для настоящих взломщиков!
Шутка, хотя и со смыслом, объясню почему. Как-то
я решил запустить ArtMoney, и сдуру возьми и
просканируй запущенную 1С на предмет пароля.
Честно скажу, я был неприятно удивлен, когда
мне выдался адрес с моим паролем и без
всякого шифрования. Когда я отошел от шока
и быстренько запустил SoftIce - увидел, что
какие бы конфигурации я не запускал -
результат остается прежним, естественно
менялся адрес, но это классика. Взлом
модулей 1С я сразу отмел по лени, а вот идея
написать свою программку меня
заинтересовала. И получилось два алгоритма:
1-й:
а. Начать сканировать блоки память
запущенной 1С (разумеется, сначала ее надо
найти в памяти и т.д. и т.п.);
б. Найти в памяти подстроку "LockWaitTime",
запомнить адрес найденной подстроки в
переменную addr;
в. Если addr-7 содержит строку 00 00 00 40 00 00 00 (в HEX
форме, разумеется), то сканируем память до
начала блока памяти в обратном порядке до
следующей строки 00 00 00 40 00 00 00, то, что будет
между ними и есть пароль.
Этот вариант более универсален, не требует
дополнительных расчетов и вполне подходит
для трояна, но выдает от нефиг делать штук 20
паролей.
2-й:
а. Начать сканировать память запущенной 1С;
б. Найти полный путь к каталогу
пользователя в памяти программы;
в. Стартуя в обратном порядке от начала
найденного пути, находим 00;
г. После этого считываем в обратном порядке
символы до следующего 00 в переменную pass;
д. Отступаем 8 назад и смотрим
последовательность: xx 00 00 00 40 00 00 00, где xx -
количество букв в пароле.
е. Если xx равно длине pass - то это и есть
вероятный пароль.
А этот вариант гораздо более надежен,
выдает всего 2-3 возможных пароля, но
требуется знать путь к каталогу
пользователя, под именем которого запущена
1С.
Четвертый способ все-таки больше подходит
при отсутствии прямого доступа к файлам 1С,
скажем, при написании трояна. Я проверял под
Windows 98, версии 1С:Предприятие 7.7 17 релиза.
Способ пятый (для математиков)
Сам пароль в шифрованном виде храниться
тоже в файле "\Путь-для-конфигурации\usrdef\users.usr",
его можно попробовать сломать брутфорсом.
Алгоритм хэширования паролей - MD5, так что на
перебор, по идее, может уйти довольно много
времени.
Способ шестой (для любителей Microsoft Office):
Дело в том, что из Microsoft Office (ау, вирусы!)
можно смело влезть напрямую в данные 1С.
Самое забавное то, что права пользователя
тут роли не играют, можно просто на языке VBA
в Excel поступить следующим образом:
а. Создать объект 1С в зависимости от
текущей версии:
V1CEnterprise.Application - версия независимый ключ;
V77.Application - версия зависимый ключ;
V77S.Application - версия зависимый ключ, SQL версия;
V77L.Application - версия зависимый ключ, локальная
версия;
V77M.Application - версия зависимый ключ, сетевая
версия.
б. Применимо к этому объекту можно
полностью управлять структурой документов
и справочников в 1С, хоть скачивать, хоть
закачивать данные.
Способ шестой (для вирмакеров)
Этот способ мне подсказали вирусы парня
по имени BKNY0NNX. Эти вирусы писались
исключительно для 1С:Предприятия и заражали
внешние отчеты. Так вот, если написать некий
внешний отчет, который будет сливать данные
в отдельный файл, а потом подпихнуть его на
место существующего внешнего отчета (можно
даже с сохранением всех старых функций), то
товарисч бухгалтер сам будет запускать
процедуру слития данных, запуская "зараженный"
отчет. А если учесть, что 1С позволяет
отправлять данные по электронной почте - то
можно данные получать регулярно по e-mail и
даже не заходить больше в эту контору.
Одним словом, если кому-то понадобятся
данные с вашей 1С - то этот кто-то сможет без
проблем вытащить все, что ему пожелается.
Кстати, тут я рассматривал проблемы
безопасности только 1С:Предприятия, но дело
в том, что встроенный язык 1С позволяет
операции с файлами, то есть, если захватить
тотальный контроль над самой программой -
можно, в принципе, получить доступ и к
остальным файлам на компьютере и даже в
локалке, поэтому, господа хакеры, этот
способ очень перспективный…
Если у кого-то возникли вопросы,
обращайтесь мне на мыло cybershadow@mail.ru.