Доброе время суток всем! Есть сабж - DLL, в которой реализованы некоторые функции, необходимые для работы 1С конфы, DLL привязана к эл.ключу защиты КАТРАН, который нельзя сэмулировать, хотябы потому, что его нету, ну и ещё потому что он не эмулируется ПОКА )) Чего хочу: отучить библиотеку от ключа. =) Проблема в том, что нужно мне это по работе сделать, а ранее я ничем подобным не занимался и асм и околоасемблерную теорию знаю очень очень мало. Пришло время разбираться, как говорится ... Что делал: 1. По тексту библиотеки ОЧЕНЬ похоже, что написана на Дельфях, ну по крайней мере на VCL точно, т.е. в теории может быть и Билдер. + она не упакована. 2. Библиотека в момент загрузки в память уже проверяет наличие ключа и естесственно не найдя его - не загружается. 3. Открыл её в DeDe, получил список всего что можно - т.е. кучу процедур с именами типа _PROC_адрес. Нашёл имена классов и даже модулей, которые отвечают за работу с ключом. 4. В Ольке пытался дебажить - нифига - есть защита от отладки - в какой-то момент попадает в цикл и всё... 5. В таблице экспорта всего 4 функции, хотя реально в ней около сотни функций должно быть. Одним словом - поскольку это первые шаги в этом непростом деле - я не знаю куда двигаться дальше, а очень хочется добиться результата. Уважаемые гуру, направьте на верный путь войны с этой бедой ... ПОЖАААЛУЙСТА )))))
=) Не смейтесь над неразумным Да, именно они... Насколько я понял - это стандартные функции, которые всегда есть в любой DLL, или нет? Просто я в своё время когда сталкивался с ДЛЛ мне казалось, что экспортируемые функции должны быть в таблице экспорта ... а тут я ничего не нашёл. Тем не менее - что же дальше?
Прошу прощения, оказывается файл не залился из-за ограничения размера ... а я и не заметил ) Вот на рапиде залитая DLL http://www.rapidshare.ru/1198496 Уважаемые, неужели ни у кого нет никаких конкретных предложений?
Значит что ещё в мыслях: DeDe и IDR (by crypto) позволили найти классы отвечающие за работу с ключом (судя по названию) - это TProtectDLL, TProtectorDLL, TBaseKeyClass (наследники TKatranKey, TSoftKey) ну и ещё некоторые. В классах этих копаться - ну мягко говоря мне не понятно КАК и ЧТО я там должен понять ) И ещё найден модуль Func1C в котором, видимо, и реализованы функции для 1С. Вопрос такой: Что с этими функциями можно сделать? Возможно ли их как-то вытащить и использовать отдельно, без DLL? Как найти соответствие между их именами в 1С (например зфПечать) и их представлением в декомпиляторах - типа _sub_480D887C ?
ShurupINC за безплатно тут мало кто,что-то будет делать вытащить наверника можно,а использовать,тоже наверника
1nsidE А я не прошу ничего с ней делать ) Я прошу лишь советов - сделать я хочу сам, иначе я ничему не научусь ... Сегодня первый день мучений - а уже кое-что и сам нашёл. И z0mailbox тоже на мысль натолкнул - теперь понятно, что это COM-сервер, стало понятно куда копать, разбираюсь дальше. Очень печально, что всё СРАЗУ упирается в деньги ... Неужели и советы начинающему платные?
=) Нет..., я вообще надеялся, что концовочка моего первого сообщения натолкнёт народ на мысль, что я не на халяву за готовым решением пришёл, а обратился за помощью в изучении вопроса, и то - скорее направлений, а не конкретных решений. Или то что я тут пишу смахивает на "сделайте всё за меня на халяву" ? )))
эээ... ну я прошу прощения, я тоже вас не понял ) я думал это вы с юморцой так сказали )) Всё, замяли )) А если вернуться к нашим баранам - есть конструктивные советы? Что в первую очередь надо ещё почитать/посмотреть?
ну что тебе сказать - дебажыть ком-сервера для нуба не самый простой вариант я тебе мало что подскажу - с катранами не работал первое что ты должен сделать - найти катрановский АПИ без этого ты дальше не пройдешь если твоя длл слинкована с катрановской либой - то тебе надо найти вызовы этой либы в длл для этого придется посидеть в дебаггере на вызовах CreateFile/DeviceIoControl они скорее всего сишные и сразу будут бросатца в глаза на фоне дельфийского бреда после тебе надо переписать эти вызовы своим позитивным кодом - понятно да? другие варианты - очень может быть (я такое часто встречал) - защита образует свой отдельный ком-объект особенно если она юзается не только этой длл-кой а другими кусками продукта тогда бывает легче написать свой подменяющий ком (есть такое дивное валью - TreatAs) прототипы функций частично ресерчатся частично берутся из OleView
ShurupINC К предыдущему посту добавлю еще пару советов по ольке. Когда будешь отлаживать, чтобы меньше вылетать на самые простые антиотладочные приемы, настрой ее соответствующим образом. Поставь плагин IsDebugPresent. Отключи реакцию на все екзепшены. Плюс добавь некоторые нестандартные (такие как например 40000005, 80000004, С000001Е.. ). Отключи реакцию на access violations в kernel32. Да вообще там много еще всяких есть фишек. Если попал в исключение, в некоторых случаях его можно разрулить (вроде Shift-F8). Почитай про взлом разных протекторов\пакеров. Там есть много таких советов и трюков по борьбе с антиотладкой. Но мне кажется вы очень рано взялись за это дело. Начните с простых задач. Поймите суть. Ну и подучите ассембрел, стандартные конструкции компиляторов, стабы.. В конце концов почитайте "Исскуство дизассемблирования" (КК).
z0mailbox Спасибо, это уже кое что ) Первый вариант - я понял, т.е. речь идёт именно об "отучении от ключа" - надо те места, где библиотека обращается к ключу и проверяет его наличие или какие-то специфические ответы заменить на "розовые рюшечки" аля всё на месте... Вот только пока Катрановский API мне не попался ... всё ссылается на их сайт KATRAN-SOFT.ru кажется, а он не работает ... ну ничего, ищем дальше, где-то наверняка есть. Второй вариант - т.е. какая-то служба или другая программа создают свой COM-объект, который сам в себе с ключом общается, а клиент только спрашивает у этого COM-объекта, так? ну вообще не очень похоже ... 1. в библиотеке нашлось несколько модулей, которые судя по названиям работают именно с ключом напрямки (EQ_Katran, классы TKatranKey, TSoftKey и т.д.), да и в самой конфе я ничего более не нашёл - т.е. других "внешних" объектов там не создаётся. Единственно что меня смущает, так это то, что в 1С делается так: Код (Text): ЗагрузитьВнешнююКомпоненту(ПолноеИмяКомпоненты); Компонента = Новый("AddIn." + ИмяКомпоненты,Неопределено); //и дальше самое интересное (на мой взгляд) Компонента.Функция(параметры); Это у меня в голове не укладывается, потому что мы загружаем в память библиотеку и должны попросить сервер создать конкретный объект и дать конкретный интерфейс. Ну объект я вижу "AddIn.ИмяКомпоненты", а где интерфейс мы указываем? И ещё не понятно где этот интерфейс в самой конфигурации объявлен. Ведь он же должен быть где-то описан, так? У меня есть ещё предположение, я его ранее описал - возможно я нашёл в библиотеке модуль, в котором реализованы сами функции 1С (предположил по примерному количеству и по названию модуля Func1C). Так может возможно из расшифровать? Т.е. увидеть их реальные сигнатуры и вообще - вытащить в свою библиотеку и подменить их библиотеку своей, которая просто позволяет эти функции использовать? )))
TermoSINteZ Спасибо за совет, уже читаю ) Да, я конечно согласен, что с моим уровнем новичка - задача не такая простая, иначе бы уже было это решение, пусть и за деньги но было бы, а пока все предлагают только урезанный функционал ) Его мне и самому удалось добиться - декомпилировал закрытые модули, убрал вызовы защищённых функций и заменил заглушками - работает, только не всё ) А тут просто вопрос встал - либо покупаем, либо я её раскручу ... ну, видимо не раскручу, быстрее будет купить, а потом уже в свободном полёте решать вопрос. Но я пока не сдаюсь, такие задачки заставляют двигаться вперёд ))
Все было сделано, если я не ошибаюсь, при установке. Все функции и сервер прописываются в реестре. Это я вывел из того, что плагин из ТоталКоммандера показывает COM-функции только для установленных COM.
Так, есть ещё новости. Нашёл тему Помогите сломать ключ КАТРАН, там в конце ссылочка на документацию по Катрану... Так вот, те способы, которые там описаны - очень разнятся от того, что я вижу в конфигурации. Походу "писатели конфы" по другому использует ключ... В описании написано, что защищённые функции выносятся в определённый редактор (он прилагается) и с помощью ключа шифруется в .PSD файл, который расшифровать можно тоже только с помощью ключа. А используется это в следующем виде: загружается библиотека движка, ей передаётся файл с зашифрованными функциями, а потом к этой у этой компоненты просто вызывается функция "Выполнить" и в качестве параметра передаётся строковое имя защищённой функции. Т.е. выглядит это всё не так как у меня, у меня явно библа самостоятельно написана, и ВОЗМОЖНО ключ тут ТОЛЬКО для того, чтобы проверять его наличие ... Хотя "глупо использовать холодильник только как полку для обуви ...". Но тем не менее - API по работе с ключом не предполагается, т.к. в их варианте использования программисту его знать не надо...
ну если ты попал на таких лохов - то вперед но чё-то я сумневаюсь времена IsHASP() давно уже канули в лету КМК честно скажу - ДАВНО ПОРА - стыдно было с этими децкими недо-ключами хаспами возиться даже респект девелоперам!
Ну я конечно согласен с этим - такая защита как описана выше - действительно дорогого стоит ... я в начале и расстроился, что так и есть. Но меня смутило обстоятельство что варианты использования описанные в мануале и то, что я вижу в конфиге - совсем разные. В мануале по ключу нет ни слова, что нужно писать свою библиотеку какую-то, там просто подсовывается этот скомпилированный PSD файл и движок сам расшифровывает и выполняет зашитые в нём функции. Хотя может это всё зашито в DLL и я просто не вижу этого в ресурсах или ещё где ... ХЗ. Ну оптимизма уже почти не осталось )) Ещё я раскопал ответ на мой вопрос про Код (Text): ЗагрузитьВнешнююКомпоненту(ПолноеИмяКомпоненты); Компонента = Новый("AddIn." + ИмяКомпоненты,Неопределено); //и дальше самое интересное (на мой взгляд) Компонента.Функция(параметры); Оказывается для 1С COM объект должен реализовывать ещё кучу интерфейсов, в том числе ILanguageExtention. Вот с помощью него 1С-овский компилятор и находит по имени функцию, там есть такой метод FindMethod... Т.е. многоуважаемый ALL считает, что тема исчерпана и лечить больного бесполезно?
Я считаю, что пора перестать "толочь воду в ступе", а хотя бы попробовать посмотреть эту DLL через плагин-вьювер ТоталКомманедра, который покажет имена и параметры функций и позволит предметно обсуждать, что там зашито и что нет. А хорошие защиты губит глупость разработчиков - им лень компилить защищенные функции Я бы сам посмотрел, но для этого надо это все ставить...