Тема: Декомпиляция модуля 1С
Декомпиляция модуля 1С
- Просмотр профиля
- Сообщения форума
- Личное сообщение
- Просмотр профиля
- Сообщения форума
- Личное сообщение
Магистр
Регистрация 29.11.2013 Адрес Берег Волги Сообщений 3193 Сказал(а) спасибо 563 Поблагодарили 8941 раз(а) в 2256 сообщениях
- Просмотр профиля
- Сообщения форума
- Личное сообщение
- Просмотр профиля
- Сообщения форума
- Личное сообщение
Магистр
Регистрация 29.11.2013 Адрес Берег Волги Сообщений 3193 Сказал(а) спасибо 563 Поблагодарили 8941 раз(а) в 2256 сообщениях
Пользователь сказал cпасибо:
- Просмотр профиля
- Сообщения форума
- Личное сообщение
- Просмотр профиля
- Сообщения форума
- Личное сообщение
Подводные камни
Это, судя по всему, переименованная (Декомпилятор1Сv8.epf) разработка Авы (Awa), которая может работать только с девственно чистым кодом 1С8х. Но она обламывается на обфусцированном коде. Например, она не позволит декомпилировать саму себя и код обфусуированный специальными коммерческими программами вроде WiseAdvice (который применялся, скорее всего, для некоторых модулей демоверсии «Камина»).
А если учесть, что последние разработки Авы распространяются через infostart ru, который наполовину принадлежит фирме 1С, то можно предположить, что это делается для того, чтобы программисты собственных конфигураций покупали соответствующие обфускаторы. Что частично снимает претензии с самой фирмы 1С, мол, встроенная защита в «восьмерке», как и в «семерке», такая же никудышная. Типа, хотите более усиленную защиту – платите бабки. В общем, знакомая история, вирусмайкеры делают вирусы, чтобы, в том числе, покупались антивирусные программы. Врачи иногда выписывают «лишние» лекарства, чтобы аптеки не бедствовали и т.п.
Однако как говориться, на хитрую пикантную подробность найдется винт с контргайкой. Теоретически любое обфусцирование, не ведущее к потере работы (псевдо) кода, не является надежной защитой и относительно легко обходится. И такие средства есть, естественно, не для публичного использования. Частичный выход – шифрование строк и вынос бизнес логики в бинарный код (dll). Короче, бесконечная борьба средств борьбы и защиты.
Как возможно вернуть исходный текст модуля
ЧтениеXML.ОткрытьФайл(ИмяФайла);
// проверка формата файла обмена
Если Не ЧтениеXML.Прочитать() Или
ЧтениеXML.ТипУзла <> ТипУзлаXML.НачалоЭлемента Или
ЧтениеXML.ЛокальноеИмя <> «_1CV8DtUD» Или
ЧтениеXML.URIПространстваИмен <> «http://www.1c.ru/V8/1CV8DtUD/» Тогда
Предупреждение(«Неверный формат файла выгрузки», 10, «Ошибка загрузки. «);
Возврат;
КонецЕсли;
Если Не ЧтениеXML.Прочитать() Или
ЧтениеXML.ТипУзла <> ТипУзлаXML.НачалоЭлемента Или
ЧтениеXML.ЛокальноеИмя <> «Data» Или
ЧтениеXML.URIПространстваИмен <> «http://www.1c.ru/V8/1CV8DtUD/» Тогда
Предупреждение(«Неверный формат файла выгрузки», 10, «Ошибка загрузки. «);
Возврат;
КонецЕсли;
// чтение и запись в ИБ записанных в выгрузке объектов
Если Не ЧтениеXML.Прочитать() Тогда
Предупреждение(«Неверный формат файла выгрузки», 10, «Ошибка загрузки. «);
Возврат;
КонецЕсли;
Сообщить(«Начало загрузки: » + ТекущаяДата());
Пока ВозможностьЧтенияXML(ЧтениеXML) Цикл
Если Истина Тогда
Попытка
Попытка
Попытка
Попытка // Планы обмена свойства ОбменДанными не имеют
ЗаписанноеЗначение.ОбменДанными.Загрузка = Истина;
Исключение
КонецПопытки;
Исключение
КонецПопытки;
Исключение
КонецПопытки;
Исключение
КонецПопытки;
Попытка
Попытка
Попытка
ЗаписанноеЗначение.Записать();
Исключение
Если НЕ Истина Тогда
Если Вопрос(«При записи произошла ошибка:» + Символы.ПС + ТекстОшибки + »
|Продолжит загрузку?», РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Нет Тогда
ВызватьИсключение;
КонецЕсли;
ВызватьИсключение;
Попытка
Сообщить(«Ошибка при загрузке данных. Объект: » + ЗаписанноеЗначение + «, Тип: » + ТипЗнч(ЗаписанноеЗначение) + »
|Ошибка : » + ТекстОшибки, СтатусСообщения.Важное);
Исключение
Сообщить(«Ошибка при загрузке данных.
|Ошибка : » + ТекстОшибки, СтатусСообщения.Важное);
КонецПопытки;
Загружено = Загружено — 1;
КонецПопытки;
Исключение
КонецПопытки;
Исключение
КонецПопытки;
Загружено = Загружено + 1;
Если Загружено % 100 = 0 Тогда
Состояние(«Загружено объектов — » + Загружено);
ОбработкаПрерыванияПользователя();
КонецЕсли;
// проверка формата файла обмена
Если ЧтениеXML.ТипУзла <> ТипУзлаXML.КонецЭлемента Или
ЧтениеXML.ЛокальноеИмя <> «Data» Или
ЧтениеXML.URIПространстваИмен <> «http://www.1c.ru/V8/1CV8DtUD/» Тогда
Предупреждение(«Неверный формат файла выгрузки», 10, «Ошибка загрузки. «);
Возврат;
КонецЕсли;
Если Не ЧтениеXML.Прочитать() Или
ЧтениеXML.ТипУзла <> ТипУзлаXML.КонецЭлемента Или
ЧтениеXML.ЛокальноеИмя <> «_1CV8DtUD» Или
ЧтениеXML.URIПространстваИмен <> «http://www.1c.ru/V8/1CV8DtUD/» Тогда
Предупреждение(«Неверный формат файла выгрузки», 10, «Ошибка загрузки. «);
Возврат;
КонецЕсли;
Сообщить(«Загружено объектов: » + Загружено);
Сообщить(«Окончание загрузки: » + ТекущаяДата());
Предупреждение(«Загрузка данных успешно завершена», 10);
Обфускатор байт-кода 1C
Обфускатор является внешней обработкой. Запускается только в режиме управляемых форм, для чтения/записи файлов *.epf, *.erf, *.cf, *.cfe и *.cfu использует обработку "Распаковщик / запаковщик файлов". Обфускатор может обрабатывать файлы любых версий 1cv8. Работает с версии платформы 8.3.18 из-за асинхронных конструкций Асинх и Ждать.
Расшифровка аббревиатуры:
- Байт-код (byte-code, bytecode, байткод) и p-код (p-code, p-код , пи-код, п-код) — синонимы, как скомпилированная во внутреннее представление виртуальной машины программа.
- Опкод (opcode, операционный код, код операции, оператор, операнд, аргумент) — это код одиночной команды, т.е. компилируя программу получаем байт-код, состоящий из опкодов.
Предисловие:
1С не является интерпретатором в чистом виде. Это означает, что 1С не исполняет исходные тексты модулей непосредственно. Для исполнения модулей 1С сначала производит компиляцию модуля в промежуточное представление, обычно называемое байт-кодом, а уже затем виртуальная машина 1С исполняет этот байт-код.
1С может хранить модули тремя четырьмя способами:
- Исходный текст модуля открыт. Это обычный вид хранения модуля. Компиляция модуля происходит во время выполнения при первом обращении к модулю. Внутри контейнера модуль хранится как текстовый файл text, содержащий исходный код модуля.
- На модуль поставлен пароль. Компиляция происходит в момент сохранения модуля при редактировании. Внутри контейнера модуль хранится в виде двух файлов – text, содержащий исходный текст модуля, зашифрованный ключом, полученным из пароля, и image, содержащий скомпилированный образ модуля (байт-код). Ни пароль, ни ключ шифрования 1С не хранит, поэтому, не зная пароль, расшифровать исходный текст нельзя. Для выполнения 1С использует заранее скомпилированный байт-код из файла image.
- Поставка без исходных текстов. В этом случае исходный текст модуля отсутствует. В контейнере хранится только скомпилированный образ модуля image, который 1С использует при выполнении модуля. Открыть такой модуль на редактирование нельзя никак.
- Поставка без исходных текстов. Аналогично пункту 3, но открыть такой модуль на редактирование можно. Не стоит забывать, что такое использование стандартной поставки с доступом к редактированию модуля является недокументированным.
Назначение флажков (переключателей):
Обфускатор может делать несколько действий, за каждое из которых отвечает свой флажок/переключатель.
Флажок "Удалить номера строк" — удаляются оп-коды номеров строк.
Флажок "Изменить имена переменных" — изменяются имена переменных.
Флажок "Добавить переходы" — добавляются условные (истинные и ложные) и безусловные переходы.
Флажок "Сгенерировать число блоков" — генерирует число блоков.
Переключатель "Кодировка констант":
- без изменения — константы не кодируются.
- кодировка Base64 — кодировка констант формата base64.
- кодировка Hex — кодировка констант формата base16 (hex).
Переключатель "Порядок вложенных блоков":
- без изменения — оставить порядок вложенных блоков без изменения.
- случайный — случайный порядок вложенных блоков (индексируются в произвольном порядке).
Переключатель "Порядок констант":
- без изменения — оставить порядок констант без изменения.
- случайный — случайный порядок констант (индексируются в произвольном порядке).
Переключатель "Порядок переменных модуля":
- без изменения — оставить порядок переменных модуля без изменения.
- случайный — случайный порядок переменных модуля (индексируются в произвольном порядке).
Переключатель "Порядок меток":
- без изменения — оставить порядок меток без изменения.
- случайный — случайный порядок меток (индексируются в произвольном порядке).
Переключатель "Порядок процедур":
- без изменения — оставить порядок процедур без изменения.
- случайный — случайный порядок процедур (индексируются в произвольном порядке).
Переключатель "Порядок разделов":
- без изменения — оставить порядок разделов без изменения.
- случайный — случайный порядок разделов (рассортирует разделы в случайном порядке).
- повторяющийся — повторяющийся порядок разделов (рассортирует разделы в повторном порядке).
Переключатель "Кодировка файла image":
- без изменения — файлы image не кодируются.
- кодировка SCSU — кодировка файла image формата SCSU.
Переключатель "Запись файла image":
- без изменения — файлы image не модифицируются.
- без разделителя строк — записывает файл image без разделителя строк.
- с разделителем строк — записывает файл image с разделителем строк.
Переключатель "Поставка модулей":
- без изменения — поставка как в исходном файле.
- Если был установлен пароль на тексты модулей, то оставляет возможность установки пароля на тексты модулей после обфускации байт-кода. При вводе корректного пароля приведет к расшифровке исходных текстов, но 1С при закрытии модуля заново скомпилирует модуль и перезапишет обфусцированный скомпилированный образ, т.е. обфускация слетит.
- Если исходный текст модуля отсутствовал, то в контейнере будет хранится только скомпилированный образ модуля после обфускации байт-кода.
- исходный текст модуля отсутствует — возможность исключать исходные тексты модулей из поставки.
- Появляется окно с надписью "Исходный текст модуля отсутствует". Открыть такой модуль на редактирование нельзя.
- постоянный неверный пароль — при вводе корректного пароля не приведет к расшифровке исходных текстов.
- пароль на модуль "0" — устанавливается пароль на модуль "0" с заранее подготовленным текстом.
- модуль без исходного текста — возможность исключать исходные тексты модулей из поставки. Открыть такой модуль на редактирование можно.
Обрабатываемые файлы
Обфускатор может обрабатывать файлы *.epf, *.erf, *.cf, *.cfe и *.cfu. Обработка происходит безопасным способом – создается копия обрабатываемого файла с добавкой «_obf» в имени файла, и вся работа идет уже с этой копией. Таким образом, при любом исходе работы обфускатора, исходный файл остается целым. Если нужно обрабатывать непосредственно исходный файл, то рекомендуется создавать резервную копию файла и поставить флажок "Не создавать копию". Обрабатываемый файл должен быть предварительно закрыт паролем прежде чем обрабатывать. Если модуль закрытой обработки будет изменен разработчиком, то ее нужно будет обрабатывать еще раз.
Цель: затруднить просмотр, декомпиляцию и деобфускацию байт-кода.
При попытке прочитать / разобрать результирующий файл будут выданы ошибки.
Список публикаций, использованных при разработке:
Сравнение обфускаторов:
Запуск с установ-ленной защитой
Работа с контейнерами 1С:
- Распаковщик / запаковщик файлов — работа с двоичными данными, буферами и потоками без использования внешних файлов, библиотек и компонент.
- v8unpack — внешняя компонента для работы с контейнерами 1С (epf, erf, cf). Компонента нужна для распаковки файлов из контейнера и запаковки их обратно.
- v8cf (
16.06.2023 — Версия 1.4.5.1:
- Добавлена возможность изменить порядок меток.
- Исправлена ошибка с вылетом программы.
08.06.2023 — Версия 1.4.4.1:
- Добавлена возможность изменить имена переменных.
01.06.2023 — Версия 1.4.3.1:
- Добавлен вывод дерева данных байт-кода 1с в файл Image .
- Доработан парсер файла Image в дерево данных байт-кода 1с .
- Доработан переключатель "Порядок разделов".
- Упразднен пункт "обратный" в переключателе "Порядок разделов".
- Упразднен пункт "с разделителем разделов" в переключателе "Запись файла image".
25.05.2023 — Версия 1.4.2.1:
- Добавлена возможность изменить порядок вложенных блоков(циклы, условия и т.д.).
- Добавлена справка (клавиша F1).
- Доработана генерация чисел блоков.
- Доработано отображение дерева данных байт-кода 1с.
- Переход на использование асинхронных методов.
- Изменен подготовленный текст в переключателе "Поставка модулей" в пункте "пароль на модуль "0"".
10.05.2023 — Версия 1.4.1.1:
- Добавлен парсер файла Image в дерево данных байт-кода 1с.
- Добавлен флажок "Сгенерировать число блоков" в закладке "Основное".
- Улучшено отображение дерева данных байт-кода 1с.
- Скорректирован порядок записи меток процедуры.
- Упразднен парсер файла Image в массив данных байт-кода 1с.
Причина:
— Ошибка при разборе огромного файла image.
02.05.2023 — Версия 1.3.9.1:
- Добавлено отображение дерева данных байт-кода 1с.
17.04.2023 — Версия 1.3.8.1:
- Добавлена возможность изменить порядок переменных модуля.
- Поддержаны асинхронные методы "Асинх/Ждать".
25.03.2023 — Версия 1.3.7.1:
- Добавлена возможность кодировать файл image.
- Добавлена кодировка констант "Hex".
23.03.2023 — Версия 1.3.6.1:
- Добавлена возможность кодировать константы.
21.03.2023 — Версия 1.3.5.1:
- Добавлена возможность изменить порядок процедур.
- Добавлены флажки "Удалить номера строк" и "Добавить переходы" в закладке "Основное".
- Упразднен флажок "Обфусцировать".
18.03.2023 — Версия 1.3.4.1:
- Добавлена новая поставка модулей "модуль без исходного текста" с доступом к редактированию модуля .
- Поставка модулей "пустой модуль" переименована в "пароль на модуль "0"" и переделана.
10.03.2023 — Версия 1.3.1.1:
- Экзотическая кодировка файла image.
10.01.2023 — Версия 1.2.5.6:
- Добавлена возможность изменить порядок констант.
- Добавлена возможность разложить результирующий файл image на составляющие.
- Добавлен флажок "Отключить вывод информации" в закладке "Настройки".
10.12.2022 — Версия 1.2.4.5:
- Добавлен новый пункт "Повторяющийся" в поле "Порядок разделов".
23.11.2022 — Версия 1.2.2.3:
- Добавлена возможность изменить порядок записи разделов.
16.11.2022 — Версия 1.2.1.2:
- Добавлена возможность разложить файл image на составляющие в форме "Выбрать модули".
08.11.2022 — Версия 1.2.0.1:
- Добавлена возможность разложить файл image на составляющие.
24.10.2022 — Версия 1.1.0.7:
- Добавлена возможность изменить запись файла image.
- Добавлен вывод времени (дни, часы, минуты, секунды).
21.10.2022 — Версия 1.1.0.6:
- Добавлена обфускация команды BeginTry.
- Добавлены кнопки "Распаковать" и "Открыть" у поля "Файл".
- Исправлена проблема с долгой обработкой файла без флага "Обфусцировать".
- Исправлена ошибка при запаковке файла *.cfe:
В процессе работы с объектом ‘ЗаписьДанных’ произошло изменение позиции нижележащего потока извне.
12.10.2022 — Версия 1.1.0.4:
- Добавлена возможность удалять тексты запароленных модулей, открывать окно ввода пароля и создать пустой модуль.
02.10.2022 — Версия 1.1.0.3:
- Добавлена обфускация команды Goto.
- Добавлена возможность открыть непосредственно файл *.epf (внешняя обработка) после обфускации байт-кода.
20.09.2022 — Версия 1.1.0.2:
- Исправлена ошибка при формировании отчета.
16.09.2022 — Версия 1.1.0.1:
- Добавлен новый распаковщик/запаковщик файлов *.epf, *.erf, *.cf, *.cfe, *.cfu. Написан полностью на 1с.
- Упразднены все предыдущие распаковщики/запаковщики файлов.
Причина:
— в v8unpack нет запаковки файла cfu, ошибка хеша после запаковки файла cfe и т.д.;
— в 1с (выгрузка/загрузка обработки/отчета в/из XML без добавления в командную строку "/F <base> /N <user> /P <password>") после запаковки файлов все ссылочные реквизиты становятся текстовыми.
05.07.2022 — Версия 1.0.9.5:
- Добавлен распаковщик/упаковщик файлов V8Unpack viewer.
- Добавлена возможность выбора файла cfu в формате файлов v8unpack.
- Добавлен ключ -inflate в формате файлов v8unpack.
04.07.2022 — Версия 1.0.8.5:
- Добавлены ключи -unpack, -undeflate, -deflate и -pack в формате файлов v8unpack.
03.07.2022 — Версия 1.0.7.5:
- Добавлены параметры /DisableStartupMessages и /DisableStartupDialogs в формате 1С.
- Исправлена ошибка:
При переоткрытии формы не сохраняются данные каталога распаковки в настройках.
01.07.2022 — Версия 1.0.6.4:
- Добавлена возможность выбора формата 1С (bin, выгрузка/загрузка обработки/отчета в/из XML) / v8unpack (image, epf, erf, cf, cfe).
30.06.2022 — Версия 1.0.5.4:
- Добавлен флажок "Не создавать копию".
29.06.2022 — Версия 1.0.4.4:
- Добавлено автоматическое закрытие формы выбора запароленных модулей.
- Скорректирована обфускация команды Unused.
25.06.2022 — Версия 1.0.3.3:
- Добавлена возможность выбора файла cfe.
- Добавлен распаковщик/упаковщик файлов v8unpack 3.0.43.28.
24.06.2022 — Версия 1.0.2.3:
- Добавлена возможность выбора файла cf.
- Добавлена возможность выбора модулей.
21.06.2022 — Версия 1.0.1.3:
-
Исправлена ошибка:
При обфускации файла, в константах и параметрах с типом "Число", заменяются знаки с "." на ",".
Ошибка при проведении документа
Разработкой на 1С я не занимаюсь, но начальство сказало решить
возникшую проблему.
При попытке проведения документа возникает ошибка:
<ОбщийМодуль.СервисноеПредставительство(322)>: Поле объекта не обнаружено (АТЛ_ПроданныеЗапчасти)
Открыл конфигуратор, а в нем модуль:
Общие.ОбщийМодуль.СервисноеПредставительство
Выдает "Исходный текст модуля отсутствует"
Как то странно, ведь в ошибке есть ссылка на строчку 322 в этом модуле.
Конфигурацию базы данных я обновлял.
В чем может быть дело?
Ошибка при проведении документа "Реализация товаров и услуг"
Добрый день. У меня вопрос скорее не к программистам, а к тем кто разбирается в конфиграции.
Рассылка E-mail при проведении документа
Подскажите пожалуйста, незнаю как подступиться Необходимо при приеме/увольнении сотрудника.
Время документа изменяется при проведении
В ТиС 9.43 то и дело проявляется эффект помещения при проведении различных документов в конец дня.
Запись данных в справочник при проведении документа
Всем привет, столкнулась с такой проблемой, не могу сделать запись данных в справочник при.