#0
by АЛьФ
Так как предыдущая тема ( ; ) стала слишком большой и давать ссылку в середине той ветки - это только путать людей, открываю новую ветку. Смысл ветки: проверка стойкости защиты, которую обеспечивает КЗК-2. Первая попытка такой проверки с треском провалилась за что я выражаю искреннюю благодарность ASV. Подробности о второй версии КЗК на следующей неделе у меня на сайте. Скачать и поковырять демонстрационную обработку можно здесь:
#0
by АЛьФ
Так как предыдущая тема ( ; ) стала слишком большой и давать ссылку в середине той ветки - это только путать людей, открываю новую ветку. Смысл ветки: проверка стойкости защиты, которую обеспечивает КЗК-2. Первая попытка такой проверки с треском провалилась за что я выражаю искреннюю благодарность ASV. Подробности о второй версии КЗК на следующей неделе у меня на сайте. Скачать и поковырять демонстрационную обработку можно здесь:
#6
by АЛьФ
2 По идее ничего не надо. Все должно запускаться. 2 precomp.dll - это компонента, которая обеспечивает работу защищенных модулей.
#10
by АЛьФ
2 Компоненту надо положить в одно из следующих мест: каталог BIN Предприятия, Каталог базы, каталог пользователя. Или прописать в обработки полный путь к ней.
#12
by DGorgoN
блин, ясен перец что перенес.. и права админа у меня.. просто её зарегил - и поехало..
#17
by КонецЦикла
Принцип работы в двух словах можно описать? Эта длл индивидуальна получается для каждой конфиги?
#18
by АЛьФ
2 Нет, не индивидуальна. Работа основана на том, что перед исполнением 1С компилирует исходный код модуля в свой внутренний р-код (как и подавляющее большенство интерпретаторов, насколько я понимаю). Я делаю предварительную компиляцию и в модуле сохраняется не программный текст, а заархивированный скомпилированный модуль. Соответственно, при запуске такой обработке, компонента это дело перехватывает и разворачивает в памяти. Таким образом собственно исходники на стороне клиента не появляются.
#20
by АЛьФ
2 Нет. КЗК-2 выполняет необратимую (в идеале) операцию и не содержит в себе средств вернуть скомпилированный текст обратно к исходному виду.
#22
by АЛьФ
2 Для классов пока не сделано сохранение (уж больно там запарочно место хранения определять). Пока это отложил. Тем более, что функционал по классам обещал сделать бесплатным :)
#23
by ASV
первые впечатления: 1. в первом //[BЕGIN COMPILЕD] заменили букву Е на русские, второй 2. после разархивирования: переменные на месте, исполняемый код зашифрован (заниматься его расшифровкой не будем, придется брать из 1С) 3. нумера строк в исполняемом коде вырезаны
#25
by ASV
на выходных посмотрю, если номера переменных из архива совпадают с номерами используемыми в память, то все будет ок.
#29
by КонецЦикла
Прошу пояснить как операция может быть "необратимой" если ее надо выполнить в среде 1С? ;)
#30
by АЛьФ
2 Естественно. 2 1С не исполняет напрямую то, что ты пишешь в модуле. Предварительно она это дело компилирует. В случае 1С получает уже скомпилированный модуль.
#31
by КонецЦикла
Это я понимаю, "получает скомпилированный модуль" - по какому-то же алгоритму наверное? И как редактировать такую конфигурацию самому разработчику? Что-то не договариваешь :)
#32
by АЛьФ
2 А никак не редактировать. Иметь у себя всегда некомпилированную версию. А алгоритм компиляции - в движке 1С.
#34
by АЛьФ
2 Вот это и пытаюсь выяснить этой веткой :) На самом деле я не зря написал в скобках "в идеале". При желании, умении и достаточном количестве времени можно ведь и пароль к базе ЦРУ прямым перебором подобрать :) Мне лично сложно ответить сколько сил и времени надо потратить, чтобы написать декомпилятор (не тот склад ума). Со своей стороны я приложил достаточно усилий, чтобы это было достаточно сложно и долго.
#35
by а лю 427
Если транслятор/интерпретатор неоптимизирующий - то декомпиляция выдаст тескт, довольно точно совпадающий с исходным. Если при этом номера строк не удалены - получится очень-очень близко к оригиналу. При оптимизирующем компиляторе близкого к исходному кода можно не получить.
#36
by Guk
Да простит меня Алексей, но так и тянет устроить голосование: Кем работает АЛьФ, и за что ему платят. Неужели поделки типа формекса, кзк, инсертера и т.п. приносят какие-то деньги?...
#38
by tor0310
ну судя по всему 1-й КЗК народом используется, у знакомого взял набор примочек к одинэсине что он понатаскал с инета, 2 обработки были КЗК закрыты да и сам вот думаю какую-то из версий купить, решусь как будет ясно по ценам и чем отличаются 1-я и 2-я версия
#39
by Garykom
весьма хорошо покупают судя по встречаемости сам уже несколько раз натыкался, особенно добила ДЛО'шная конфа продвигаемая ЗАО ТПП Северо-Запад - руки бы оборвать тов. "fflena@rambler.ru" за такой изврат (строго партионный товарный учет лекарств на бух регистрах;)
#44
by Морозов Александр
аха... и походу выполнить процедуру скомпелированного модуля тоже не работает - у меня ругается, хоть с Turbobl, хоть с Formex.
#45
by а лю 427
Покупай, покупай... Судя по твоим вопросам - нетленка будет еще та... Чем больше таких защищенных поделок, тем больше можно ободрать клиента (иногда - на пару порядков). Вот напишет свою нетленку - а мы ее перепишем и сдерем в 8-10 раз больше.... Слава Альфу!!! P.S. денег Альфу не дам ни копейки (с) ну все таки я полтора года занимался примерно этой же задачей (компиляция и декомпиляция)
#46
by АЛьФ
2 Зачем же голосование? Я и так скажу. Официально моя должность называется "заместитель начальника планово-экономического отдела". Платят мне (на основной работе) за кодинг того, что напридумывают другие. Поделки мои приносят денги достаточные, чтобы ими було интересно заниматься. Я все же уже не в том возрасте, чтобы делать что-то на чистом энтузиазме и бесплатно. 2 По идее должно работать. Посмотрю в чем может быть дело. А ты как это проверяешь? Опиши, плиз полностью свои действия.
#47
by Морозов Александр
да пропростому : ЗагрузитьВнешнююКомпоненту("formex.dll"); ЗагрузитьВнешнююКомпоненту("Turbobl"); ЗагрузитьВнешнююКомпоненту("precomp.dll"); Конт=""; ОткрытьФорму("Отчет", Конт,"c:Календарь.ert"); Сервис = СоздатьОбъект("Сервис"); Сервис.ВыполнитьПроцедуру(Конт,"Сформировать"); //ругается Значение не представляет агрегатный объект (Очистить) Конт.Сформировать;// ругается типа нет такой процедуры да и я так понял что при загруженной precomp плюется на все в модуле кроме того что скомпелировано...
#49
by Морозов Александр
а чего есть разница? ВК загружена в ПриНачалеРобтыСистемы... а открываю из обработки твой календарь...
#51
by Морозов Александр
Ну хорошо.... Глобальный модуль: ПРоцедура ПриНачалеРаботыСистемы ЗагрузитьВнешнююКомпоненту("precomp.dll"); ЗагрузитьВнешнююКомпоненту("formex.dll"); ЗагрузитьВнешнююКомпоненту("Turbobl.dll"); ....... Обработка ДЛЯОТКРЫТИЯ.ERT: Процедура Сформировать Конт=""; глУск=СоздатьОбъект("УскорительГК"); //для проверки загрузки Turbobl ОткрытьФорму("Отчет", Конт,"c:Календарь.ert"); Сервис = СоздатьОбъект("Сервис"); Сервис.ВыполнитьПроцедуру(Конт,"Сформировать");// ошибка:Значение не представляет агрегатный объект (Очистить) Конт.Сформировать; // ошибка: E:ДЛЯОТКРЫТИЯ.ERT}: Поле агрегатного объекта не обнаружено (Сформировать) КонецПроцедуры В твоем календаре добавил в процедуру ПриОткрытии - Сообщить("процедура выполняется"); никакой реакции, да и отладчик тоже не срабатывает на точку останова - отсюда вывод при загруженной ВК precomp.dll исполняется только скомпелированный код
#53
by АЛьФ
2 Вывод правильный. Если срок лицензии работы скомпилированного модуля закончится (сейчас я не ограничивал), а так же если не загружена компонента, то будет работать открытая часть. Похоже, что вот этот код работает: Сервис.ВыполнитьПроцедуру(Конт,"Сформировать");// ошибка:Значение не представляет агрегатный объект (Очистить) Но спотыкается на этой строке: Если Т = "" Тогда Т = СоздатьОбъект("Таблица"); Иначе Т.Очистить; КонецЕсли; Т.е. просто ошибка в FormEx работы с параметрами по умолчанию. Передай в ВыполнитьПроцедуру в качестве параметра выполняемой процедуры пустую строку.
#54
by Морозов Александр
ну сделал так: Сервис.ВыполнитьПроцедуру(Конт,"Сформировать",""); всеравно ошибка та-же... ну может это ошибка и самого формекса... помнится была ветка - там была ошибка что при выполнии процедуры печати ругалась на ИспользоватьТаблицу("Моятаблица") типа не обнаружена "МояТаблица"... а вот Turbobl работал правильно, а здесь и он не работает.
#55
by АЛьФ
2 СписокАргументов = СоздатьОбъект("СписокЗначений"); СписокАргументов.ДобавитьЗначение("","-"); Сервис.ВыполнитьПроцедуру(Конт,"Сформировать",СписокАргументов);
#57
by АЛьФ
2 Теперь ошибка в том, что исходная таблица не находится. А вообще такие вызовы для других внешних отчетов нормально срабатывают?
#58
by Морозов Александр
С твоим Формексом такая ошибка всегда если тока используется конструкция ИспользоватьТаблицу("МояТаблица")... ошибки не будет если "МояТаблица" в общих таблицах. А так по фигу что запускаеш хоть внешний хоть внутренний отчет, хоть документ..
#60
by Морозов Александр
ладно... чет аладушек мне захотелося - пойду в магазин куплю кифирчику куплю, жена постряпает.
#61
by АЛьФ
2 Гляну. А вот почему не работает TurboBL все же непонятно... Может версия старая очень?
#63
by АЛьФ
2 Не знаю. Честно по нему ничего сказать не могу. А остальные внешние обработки с ним нормально работают?
#66
by Трулалала
а почему в обработке сразу не написать Путь="";Файл="";РасположениеФайла(Путь,Файл); ЗагрузитьВнешнююКомпоненту(Путь+"precomp.dll");
#67
by АЛьФ
2 Ну... ведь не обязательно все будут распаковывать их в один каталог. Такая проблема с загрузкой компоненты возникла только у трех людей. Остальные или увидели мои ответы, или уже знали по каким правилам грузятся компоненты в 1С.
#72
by Трулалала
А есть задается где-нибудь ключ шифрования, который потом можно использовать для расшифровки? Или это в принципе расшифровки не поддается, т.е. шифрование только в одну сторону?
#79
by Alexander_M
несколько лет назад задумался над вопросом защиты кода придумал такую вещь: при передаче клиенту делать такую обработку всех модулей, короче, чтобы функции и процедуры "раскрывались" в местах их использования, т.е. их код подставляется вместо их вызова (и так по рекурсии) вроде и код открытый, а сопровождать и модифицировать нереально если в КЗК перед компиляцией делать что-то подобное, то видимо хрен кто сломает вобсчем дарю идею, ждем КЗК-3 :)
#82
by ASV
[1с] Если p2=0 Тогда Возврат текДата=НачМесяца(ТекДеньНедели); стр=КонМесяца(ТекДеньНедели); Если _Таблица="" Тогда _Таблица=СоздатьОбъект("Таблица"); _Таблица.70005!(""Календарь"",1) тРасшифровка=""; _Таблица.100005!(""Шапка"",1) ПроверитьДату=0; 00ПроверитьДатуVal=текДата; ПолучитьНазваниеТаблицы=""+ДатаЧисло(ТекущаяДата); Если 00ПроверитьДатуVal<=стр Тогда Если ПроверитьДату=0 Тогда Название=НомерНеделиГода(00ПроверитьДатуVal); Таблица.100005!(""СтрокаГ|СтрокаВ"",1) |js[72] Название=""; ПроверитьДату=ПроверитьДату+1; Если ПроверитьДату<>НомерДняНедели(00ПроверитьДатуVal) Тогда _Таблица.130005!(""СтрокаГ|СтрокаВ"",1) КонецПроцедуры ПроверитьДату=НомерДняНедели(00ПроверитьДатуVal); Название=ДатаЧисло(00ПроверитьДатуVal); Если ПроверитьДату>5 или Число(Шаблон("["+СтрЗаменить(Формат(00ПроверитьДатуVal,"ДДДММГГГ"),""."",""+"")+"]"))=1980 Тогда _Таблица.130005!(""СтрокаГК|СтрокаВ"",1) Если ПроверитьДату=7 Тогда ПроверитьДату=0; 00ПроверитьДатуVal=00ПроверитьДатуVal+1; |js[175] Название=""; Если ПроверитьДату<>0 Тогда ПроверитьДату=ПроверитьДату+1; Если ПроверитьДату<>8 Тогда _Таблица.130005!(""СтрокаГ|СтрокаВ"",1) ПроверитьДату=ПроверитьДату+1; _Таблица.240005!("1",1) _Таблица.250005!("0",4) _Таблица.270005!("Календарь на "+тРасшифровка,1) [/1с]
#85
by ASV
константы и имена переменных получены разархивированием //[BEGIN COMPILED] исполняемый код получен копированием из памяти (вручную) дефрагментация кода произведена вручную начало процедуры не найдено
#88
by Diter
а по поводу ВК подтверждаю. попытка использовать совместно FormEx и КЗК приводит к тому что КЗК не "открывает" закрытые модули и пишет "процедура не найдена". Если не ошибаюсь - такое же наблюдается и с 1С++ и КЗК
#93
by АЛьФ
2 Порядок загрузки компонент? Логично же, что разворачивание закрытого модуля должно быть до его использования. Т.е. ВК от КЗК должна всегда грузиться самой первой.
Тэги: Админ
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- Запись периодических реквизитов: Время,Документ,Номер,Номер Стр
- Безопасность: Как обеспечить безопасность базы в файловом варианте?
- Безопасность: Антивирус Microsoft не прошел тест на безопасность
- Безопасность: Нереальная безопасность
- УТ11 "Номер сообщения меньше номер ранее принятого сообщения" где поменять?
- Сколько разрядов у «Номер отправленного сообщения» и «Номер принятого сообщения»
В этой группе 1С
- Как поставить дату в печатную форму справочника
- Удвоение остатков в отчете
- Как бороться с коллизиями, которые возникают при обмене базами?
- ЗиК 7.7 Дата запрета редактирования документов. Как сделать в ЗиК'е?
- Как добавить картинку в дерево значений?
- АвтоВремяТекущее() для записанных документов
- Быстрый отбор строк Таблицы значений, соответствующих ТЗ2
- Структура таблиц любой базы 1С
- Как в 1С 77 отключить справку
- Выгрузка ЗиК 77 ---> БП 80
- Метаданные.ОбщиеФормы как получить список элементов на форме?
- Конвертация данных (Преобразование табличных частей)
- Как сделать строку таблицы значений невидимой для отдельного пользователя?
- Обработчик ПриИзменении для ячейки, созданной программно
- Как получить программный модуль внешней обработки не из 1С
- v7: Ошибка при формировании книги покупок
- Ошибки 1С 77
- Вылетает 1С под 1-м пользователем с определённой машины
- Процедура интервала дат в журнале документов.
- Обрезание базы