![]() |
eXeL@B —› Основной форум —› Софт управления контроллером под HASP'ом |
Посл.ответ | Сообщение |
|
Создано: 30 августа 2011 16:42 · Поправил: Модератор · Личное сообщение · #1 Привет ломателям донглов. Есть софт. Софт несколько приватен, поэтому выложить его не могу. К софту прилагается ключ HASP HL Pro. Сложилось впечатление, что софт умеет работать с ключами двух типов - Aladdin HASP и Rainbow Technologies Sentinel (более того, я так понял обе конторы подмял под себя SafeNet). Итак, что накопал. Во время работы данного софта обращений к ключу не обнаружено (скорее всего их нет). Но если дернуть ключ во время работы, софтина подвисает (я полагаю так ведет оборону сам драйвер хаспа). Насколько я понял, обращение к ключу происходит на FormCreate. Сначала идет обращение к ключу HASP и сразу за ним проверка строки ошибки с шаблонной строкой "OK": Code:
Code:
Как мне подсказали опытные ломатели хасп, строка "aYkhErjfgz/VEqShjFt//uRT3n06h+hRyt4H74fd<...>=" представляет собой Code:
Итак, код выше выполняется только в том случае, если почему-то произошла ошибка. Естественно в моем случае этой ошибкой является отсутствие вставленного в машину ключа. Машина на которой есть рабочий ключ хаспа подключена к "суровому" станку. У меня особо нет возможности для экспериментов на той машинке, у себя же развернул виртуалку. А в чем собственно вопрос? А вопросы будут такие: 1. Дейсвительно ли все так, как я описал? Т.е. верно ли, что представленная схема это реально связка HASP+Sentinel по принципу "что есть, с тем и работает"? Если нужны дополнительные данные (кроме драйверов, с которыми работают эти куски кода), могу попробовать достать. 2. Во время эксперимента на боевой машине, я пропатчил переход "jnz _printError", и софт там завис. Потом удалил на своей машине драйвер Sentinel и понял, что виснуть может и на цикле "jnz openSentinel". Т.е. как пропатчить правильно я то конечно понимаю (либо убить оба цикла, либо сразу после сравнения строк поставить железный JMP вместо условного JNZ), но во время экспериментов выяснилось, что HASP жестко обороняется. Вот что я под этим имею в виду: 2.1) восстановить файл из бекапа не получается, вылезает ошибка, что файл уже используется (при этом пропатчить его никаких проблем ![]() 2.2) ни один из файлов в каталоге нельзя переименовать (зато можно переместить, можно добавить произвольный файл); 2.3) нельзя переименовать какой-либо файл в каталоге, изменив его разрешение на .exe, можно только скопировать его на нейтральную территорию, а затем пропатчить если надо, переименовать и скопировать обратно. Отсюда следующий вопрос: как мне запустить патченную версию из этого же каталога, т.е. что умеет HASP? Допустим я убедился, что эта софтина "научилась" работать без ключа, как вообще вынести драйвера HASP с их дебильной защитой (дебильной в плане рациональности)? ![]() |
|
Создано: 30 августа 2011 16:50 · Личное сообщение · #2 Скачай вот эту хреньку http://exelab.ru/f/action=vthread&forum=13&topic=6248&page=7#12 и сразу поймешь что там за 940 символов и как правильно функции называются. Я даже с помощью этой хреньки и память ключа всю считал, и эту память в ключе подредактировал и проэмулил все HaspEncrypt/Decrypt ----- Yann Tiersen best and do not fuck ![]() |
|
Создано: 30 августа 2011 17:06 · Личное сообщение · #3 У меня цель немного другая. Мне не особо интересно, что это за 940 символов. Мне сказали, что это ключ, я этому верю. В данном случае явно есть возможность отвязать от ключа патчем одного байта. И если так, то очень хорошо. Софт слишком кривой, чтобы полагаться на него и дальше. Конечная цель вообще обойтись без ключа, а затем и без проги (сделать свою софтину управления контроллером станка). Т.е. основной вопрос, что вообще умеет хасп? Может ли спалить свой же ключ в целях безопасности? Может ли заблокировать систему, так что ее потом только сносить придется? И как корректно удалить драйвер хаспа? ![]() |
|
Создано: 30 августа 2011 21:56 · Личное сообщение · #4 int По вашему описанию я понял, что вся суть защиты заключается в вызовах так называемых HASP API. Они вручную расставляются на этапе компиляции разработчиком, так что хасп в таком случае может ровно столько, сколько прописано в SDK. В нём можно найти прототипы, примеры вызова и описание возможностей всех защитных функций. Лежит он на оф. сайте хаспа. Весь дистрибутив весит 1,4 Гб, но если попросите, то могут выложить лишь pdf с описанием АПИ хаспа. Я б сам выложил, но мой рабочий жёсткий сейчас временно недоступен. А, вообще, как показывает мне мой скромный опыт, то ИМХО виной всему Sentinel. Алладиновский ключ так себя не ведёт. ----- Stuck to the plan, always think that we would stand up, never ran. ![]() |
|
Создано: 30 августа 2011 22:04 · Личное сообщение · #5 С SDK благодаря прямой наводке PE_Kill'а я уже разобрался. Реально используется только hasp_login. Т.е. имеем защиту по типу IsDonglePresent. Просто реально интересно узнать от тех, кто имел опыт распаковки драйвера, на что у меня сейчас сил и опыта не хватит (конверт в ядре это для меня крутой уровень), что он может. Т.е. насколько опасны такие эксперименты? Может он поймает факт модификации софта и сделает что-нибудь интересное. Например, поломает ключ или завесит систему через пару дней (тайм-бомба). Поэтому я сразу и спросил, как избавится от драйвера. Я нагуглил один способ (вроде бы штатный), попробую его. ![]() |
|
Создано: 30 августа 2011 22:52 · Личное сообщение · #6 |
|
Создано: 31 августа 2011 02:18 · Личное сообщение · #7 Едем дальше. Собственно, основной функционал этой софтины это управление контроллером одной железки. Как я уже выше обозначил, конечная цель дернуть ключевые алгоритмы из этой программы. Напоролся на очень интересный момент. Железка подцеплена к COM-порту. А вот программа работает с портами ввода/вывода с номерами 0x378 и 0x37A, что соответствует LPT-портам. Чудеса? Может кто-нибудь этот момент прокомментировать? P.S. Не знаю зачем Archer тему перетащил. Вроде ковыряю конкретную программу, а HASP по-большому счету вообще не причем. ![]() |
|
Создано: 31 августа 2011 09:43 · Поправил: Vamit · Личное сообщение · #8 |
|
Создано: 31 августа 2011 10:02 · Личное сообщение · #9 int пишет: Железка подцеплена к COM-порту. А вот программа работает с портами ввода/вывода с номерами 0x378 и 0x37A, что соответствует LPT-портам Может используется эмуль COM>LPT ? (моё предположение на основе того что есть эмуль USB>COM). ----- Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли. ![]() |
|
Создано: 31 августа 2011 10:45 · Личное сообщение · #10 |
|
Создано: 31 августа 2011 13:22 · Личное сообщение · #11 Какой нафиг эмулятор и ключ? Вы о чем? Софт уже без ключа работает, я там один переход пропатчил. Я сейчас изучаю протокол взаимодействия программы и станка (которым программа и управляет). Vamit пишет: А ключ в какой порт всунут? Ключ был USB-шный, хасповский. tundra37 пишет: Думаю, ошибся. Не, не ошибся. Там реально используются только эти два порта. На самом деле я обнаружил что в компьютер вставлены два контроллера LPT портов, порты замкнуты между собой каким-то шлейфом (вроде без микросхем внутри). Отдельно от них есть контроллер COM-портов. К одному из них зацеплен станок. ![]() |
|
Создано: 31 августа 2011 13:49 · Личное сообщение · #12 |
|
Создано: 31 августа 2011 14:04 · Личное сообщение · #13 r_e У меня такое же предположение, только склонялся к мысли что в твоей схеме вместо back-end служит обычный шнурок сцепляющий внутри корпуса LPT плату с COM платой. Хотя контроллер COM-портов выглядит вполне себе стандартно. В принципе похоже на то, что раньше в цепи было два компа. Производитель решил объединить все в один, но не стал переписывать софт. P.S. Пошел вскрывать корпус. ![]() ![]() |
|
Создано: 31 августа 2011 16:09 · Личное сообщение · #14 Вскрытие корпуса разрешило все вопросы. LPT-порт на материнской плате <--> шлейф на планку с внешним LPT-портом <--> внешний шлейф LPT<->LPT <--> контроллер с внешним LPT-портом, внутри питание от материнской платы и шлейф к другой планке <--> планка с разветвлением на два COM-порта <--> нуль-модемный кабель от станка до этой планки. Таким образом, все выглядит как какой-то девайс подключенный к LPT-порту - это единственный канал данных. На этом изучение софтины завершено (изучен протокол управления через LPT-порт), всех благодарю. ![]() |
![]() |
eXeL@B —› Основной форум —› Софт управления контроллером под HASP'ом |
Эта тема закрыта. Ответы больше не принимаются. |