![]() |
eXeL@B —› Вопросы новичков —› Узнать принцип шифрования данных / разобраться в дизассемблированном коде |
Посл.ответ | Сообщение |
|
Создано: 20 декабря 2012 17:33 · Личное сообщение · #1 Программа работает с устройством через COM-порт (или USB). Написана на Delphi 2006/2007. Но или коряво написана или есть простая защита. В ollydbg видно вызовы некоторых апи-функций, запускается под отладчиком без особых проблем, иногда правда или вылетает или зависает, но это наверное косяки разработчиков. В устройстве хранятся данные. На доступ к устройству можно поставить пароль. Буквенный пароль в 4 символа в зашифрованном виде выглядит типа такого: "311725371". Я так понимаю, данные при отправлении в устройство шифруются, а при получении дешифруются. Вызов функции декодирования пароля я нашел, но сложность в том, что почти никаких апи-функций в ней нету (за исключением нескольких), код большой, к тому же в фукнции этой есть много вызовов подпрограмм, которые в свою очередь вызывают другие подпрограммы. Много часов потратил чтобы разобраться - темный лес. Видно, что программа обнуляет буффер размером 0x1000, а дальше непонятно где что и как. Можете подсказать в какую сторону копать, где искать? Хотябы какие-нибудь наводки. Код функции: Code:
В IDS_280 и IDS_281 содержаться какие-то байтовые данные. ![]() |
|
Создано: 20 декабря 2012 17:44 · Поправил: tihiy_grom · Личное сообщение · #2 |
|
Создано: 20 декабря 2012 17:46 · Личное сообщение · #3 |
|
Создано: 20 декабря 2012 17:48 · Личное сообщение · #4 |
|
Создано: 20 декабря 2012 17:50 · Личное сообщение · #5 |
|
Создано: 20 декабря 2012 17:53 · Личное сообщение · #6 |
|
Создано: 20 декабря 2012 17:57 · Поправил: V01and · Личное сообщение · #7 > Трассировка в отладчике и вдумчивое изучение каждого шага трассировки тоже спасает очень здорово. Исследовал много часов - мозгов уже не хватает, поэтому обратился за помощью. Если бы хотябы не вызовы подпрограмм со всеми вытекающими, которые только запутывают. Если бы хотябы там хоть какие-нибудь апи-функции были. А то ж вобще не понятно что делает определенная подпрограмма. > IDR спасёт отца русской демократии. Юзал Dede (который зависает - устарел уже видимо), IDR - справился. Только вот чем они могут помочь. Открыл полученный после IDR проект в делфи - там тот же дизассемблированный код, только форма видна и некоторые компоненты. Может конечно я чего-нибудь незнаю... Подскажите конкретней пожалуйста. > или Olly+ida_sigs Спасибо, сейчас погуглю насчет этого. upd: Спасибо всем за советы, ушел пробовать разные варианты. ![]() |
|
Создано: 20 декабря 2012 18:14 · Личное сообщение · #8 V01and пишет: Только вот чем они могут помочь. V01and пишет: Исследовал много часов - мозгов уже не хватает, поэтому обратился за помощью. Если бы хотябы не вызовы подпрограмм со всеми вытекающими, которые только запутывают. Если бы хотябы там хоть какие-нибудь апи-функции были. А то ж вобще не понятно что делает определенная подпрограмма. map-файл создайте и примените с помощью плага mapimp (для OllyDbg), после этого, думаю, многое должно прояснится. ----- ds ![]() |
|
Создано: 20 декабря 2012 20:58 · Личное сообщение · #9 |
|
Создано: 28 декабря 2012 03:38 · Личное сообщение · #10 Нет, не швейную машинку. Тут дело посерьезней ![]() map-файл, импортированный в олли действительно помог. Стало более понятно где какие вызовы. Но все еще остается много вопросов. И как говорится чем дальше в лес тем толще партизаны. Так как программа работает с девайсом, подключенным через ком-порт, я узнал какие компоненты используются для этого, накатал простую программу на делфи с использованием этих компонентов. Также сниффером узнал какие данные посылаются в устройство. Сделал тоже самое в своей программе. Но сравнивая полученные результаты вижу что они немного отличаются. Мне устройство возвращает около 4k байт. Меньше половины из них отличаются. Также сниффером узнал, что данные в устройство посылаются незашифрованными. Также с данными посылается некий хеш пароля. Обратно данные возвращаются в другом виде. Идея была такая, чтобы получить эти байты, понять принцип дешифрования в олли и написать свой дешифратор. Но дизассемблированный код в ольке очень запутанный (с другими имел дело - там все было понятно). Полученные данные храняться в одном буффере, потом в каком-то месте (не нашел в каком) переносятся в несколько других буфферов с использованием FPU. Между вызовами расставлены GetTickCount от отладки (плагины OllyAdvanced и т.д. не помагают). В другом месте я вижу, что в другом буффере уже дешифрованные данные в виде дробных чисел. И эти дробные числа конвертятся в целые из которых уже получается результат, который нужен. Пробовал также трассировку с записью всего лога в файл двух вариантов - с правильным паролем и неправильным. Но тоже безрезультатно. Патчил возможные переходы - не помогло. Видимо защита в другом. Я исчерпал все возможные варианты обхода защиты. Подскажите, что еще можно предпринять? ![]() |
|
Создано: 28 декабря 2012 03:39 · Личное сообщение · #11 |
|
Создано: 28 декабря 2012 07:06 · Личное сообщение · #12 |
|
Создано: 28 декабря 2012 14:04 · Личное сообщение · #13 Терпение уже заканчивается. Неделю копаться в коде все-таки. Ну экспортировал я его в делфи-проект, но ничего инетересного там нету. Пробовал также и IDR. Нужна идея. Хотябы понять принцип по которому дешифруются полученные байты. Может кто работал с ком-портом, какие есть тонкости при работе с ним? ![]() |
|
Создано: 28 декабря 2012 14:08 · Личное сообщение · #14 раз заканчивается терпения и знания, значит подаете запрос в тему http://exelab.ru/f/action=vthread&forum=1&topic=17633 оглашаете суму вознаграждения - и вам все сделают ![]() |
|
Создано: 28 декабря 2012 19:21 · Личное сообщение · #15 |
|
Создано: 03 января 2013 18:24 · Личное сообщение · #16 |
![]() |
eXeL@B —› Вопросы новичков —› Узнать принцип шифрования данных / разобраться в дизассемблированном коде |