Сейчас на форуме: asfa, _MBK_, Adler (+8 невидимых)

 eXeL@B —› Вопросы новичков —› Узнать принцип шифрования данных / разобраться в дизассемблированном коде
Посл.ответ Сообщение

Ранг: 12.4 (новичок)
Активность: 0.010
Статус: Участник

Создано: 20 декабря 2012 17:33
· Личное сообщение · #1

Программа работает с устройством через COM-порт (или USB). Написана на Delphi 2006/2007. Но или коряво написана или есть простая защита. В ollydbg видно вызовы некоторых апи-функций, запускается под отладчиком без особых проблем, иногда правда или вылетает или зависает, но это наверное косяки разработчиков.

В устройстве хранятся данные. На доступ к устройству можно поставить пароль. Буквенный пароль в 4 символа в зашифрованном виде выглядит типа такого: "311725371". Я так понимаю, данные при отправлении в устройство шифруются, а при получении дешифруются.

Вызов функции декодирования пароля я нашел, но сложность в том, что почти никаких апи-функций в ней нету (за исключением нескольких), код большой, к тому же в фукнции этой есть много вызовов подпрограмм, которые в свою очередь вызывают другие подпрограммы. Много часов потратил чтобы разобраться - темный лес. Видно, что программа обнуляет буффер размером 0x1000, а дальше непонятно где что и как. Можете подсказать в какую сторону копать, где искать? Хотябы какие-нибудь наводки.

Код функции:
Code:
  1. 00803A78  /$ 55             PUSH EBP
  2. 00803A79  |. 8BEC           MOV EBP,ESP
  3. 00803A7B  |. 81C4 04F0FFFF  ADD ESP,-0FFC
  4. 00803A81  |. 50             PUSH EAX
  5. 00803A82  |. 83C4 E0        ADD ESP,-20
  6. 00803A85  |. 53             PUSH EBX
  7. 00803A86  |. 56             PUSH ESI
  8. 00803A87  |. 33D2           XOR EDX,EDX
  9. 00803A89  |. 8995 E4EFFFFF  MOV DWORD PTR SS:[EBP-101C],EDX
  10. 00803A8F  |. 8995 E8EFFFFF  MOV DWORD PTR SS:[EBP-1018],EDX
  11. 00803A95  |. 8945 FC        MOV DWORD PTR SS:[EBP-4],EAX
  12. 00803A98  |. 33C0           XOR EAX,EAX
  13. 00803A9A  |. 55             PUSH EBP
  14. 00803A9B  |. 68 3E3C8000    PUSH uniQ.00803C3E
  15. 00803AA0  |. 64:FF30        PUSH DWORD PTR FS:[EAX]
  16. 00803AA3  |. 64:8920        MOV DWORD PTR FS:[EAX],ESP
  17. 00803AA6  |. 33D2           XOR EDX,EDX
  18. 00803AA8  |. 55             PUSH EBP
  19. 00803AA9  |. 68 193C8000    PUSH uniQ.00803C19
  20. 00803AAE  |. 64:FF32        PUSH DWORD PTR FS:[EDX]
  21. 00803AB1  |. 64:8922        MOV DWORD PTR FS:[EDX],ESP
  22. 00803AB4  |. A1 CCD78200    MOV EAX,DWORD PTR DS:[82D7CC]
  23. 00803AB9  |. 8B00           MOV EAX,DWORD PTR DS:[EAX]
  24. 00803ABB  |. 33D2           XOR EDX,EDX
  25. 00803ABD  |. 8B08           MOV ECX,DWORD PTR DS:[EAX]
  26. 00803ABF  |. FF51 68        CALL DWORD PTR DS:[ECX+68]
  27. 00803AC2  |. BB 01100000    MOV EBX,1001
  28. 00803AC7  |. 8D85 EFEFFFFF  LEA EAX,DWORD PTR SS:[EBP-1011]
  29. 00803ACD  |> C600 00        /MOV BYTE PTR DS:[EAX],0
  30. 00803AD0  |. 40             |INC EAX
  31. 00803AD1  |. 4B             |DEC EBX
  32. 00803AD2  |.^75 F9          \JNZ SHORT uniQ.00803ACD
  33. 00803AD4  |. 8D8D E8EFFFFF  LEA ECX,DWORD PTR SS:[EBP-1018]
  34. 00803ADA  |. A1 CCD78200    MOV EAX,DWORD PTR DS:[82D7CC]
  35. 00803ADF  |. 8B00           MOV EAX,DWORD PTR DS:[EAX]
  36. 00803AE1  |. 8B80 040A0000  MOV EAX,DWORD PTR DS:[EAX+A04]
  37. 00803AE7  |. BA 583C8000    MOV EDX,uniQ.00803C58                    ; ASCII "IDS_280"
  38. 00803AEC  |. E8 C311D4FF    CALL uniQ.00544CB4
  39. 00803AF1  |. 8B95 E8EFFFFF  MOV EDX,DWORD PTR SS:[EBP-1018]
  40. 00803AF7  |. 8B45 FC        MOV EAX,DWORD PTR SS:[EBP-4]
  41. 00803AFA  |. E8 05540000    CALL uniQ.00808F04
  42. 00803AFF  |. C645 FB 00     MOV BYTE PTR SS:[EBP-5],0
  43. 00803B03  |. 33C0           XOR EAX,EAX
  44. 00803B05  |. 55             PUSH EBP
  45. 00803B06  |. 68 F63B8000    PUSH uniQ.00803BF6
  46. 00803B0B  |. 64:FF30        PUSH DWORD PTR FS:[EAX]
  47. 00803B0E  |. 64:8920        MOV DWORD PTR FS:[EAX],ESP
  48. 00803B11  |. 8D8D E4EFFFFF  LEA ECX,DWORD PTR SS:[EBP-101C]
  49. 00803B17  |. A1 CCD78200    MOV EAX,DWORD PTR DS:[82D7CC]
  50. 00803B1C  |. 8B00           MOV EAX,DWORD PTR DS:[EAX]
  51. 00803B1E  |. 8B80 040A0000  MOV EAX,DWORD PTR DS:[EAX+A04]
  52. 00803B24  |. BA 683C8000    MOV EDX,uniQ.00803C68                    ; ASCII "IDS_281"
  53. 00803B29  |. E8 8611D4FF    CALL uniQ.00544CB4
  54. 00803B2E  |. 8B95 E4EFFFFF  MOV EDX,DWORD PTR SS:[EBP-101C]
  55. 00803B34  |. 8B45 FC        MOV EAX,DWORD PTR SS:[EBP-4]
  56. 00803B37  |. E8 C8530000    CALL uniQ.00808F04
  57. 00803B3C  |. 8B45 FC        MOV EAX,DWORD PTR SS:[EBP-4]
  58. 00803B3F  |. E8 88F9FFFF    CALL uniQ.008034CC
  59. 00803B44  |. 84C0           TEST AL,AL
  60. 00803B46  |. 0F84 80000000  JE uniQ.00803BCC
  61. 00803B4C  |. 33DB           XOR EBX,EBX
  62. 00803B4E  |. 8DB5 EFEFFFFF  LEA ESI,DWORD PTR SS:[EBP-1011]
  63. 00803B54  |> 8B45 FC        /MOV EAX,DWORD PTR SS:[EBP-4]
  64. 00803B57  |. E8 6C500000    |CALL uniQ.00808BC8
  65. 00803B5C  |. 8806           |MOV BYTE PTR DS:[ESI],AL
  66. 00803B5E  |. A1 CCD78200    |MOV EAX,DWORD PTR DS:[82D7CC]
  67. 00803B63  |. 8B00           |MOV EAX,DWORD PTR DS:[EAX]
  68. 00803B65  |. 8B80 B8090000  |MOV EAX,DWORD PTR DS:[EAX+9B8]
  69. 00803B6B  |. B2 01          |MOV DL,1
  70. 00803B6D  |. E8 F261CCFF    |CALL uniQ.004C9D64
  71. 00803B72  |. 899D E0EFFFFF  |MOV DWORD PTR SS:[EBP-1020],EBX
  72. 00803B78  |. DB85 E0EFFFFF  |FILD DWORD PTR SS:[EBP-1020]
  73. 00803B7E  |. D835 703C8000  |FDIV DWORD PTR DS:[803C70]
  74. 00803B84  |. D80D 743C8000  |FMUL DWORD PTR DS:[803C74]
  75. 00803B8A  |. DD5D F0        |FSTP QWORD PTR SS:[EBP-10]
  76. 00803B8D  |. 9B             |WAIT
  77. 00803B8E  |. DD45 F0        |FLD QWORD PTR SS:[EBP-10]
  78. 00803B91  |. E8 2EFCBFFF    |CALL uniQ.004037C4
  79. 00803B96  |. 8BD0           |MOV EDX,EAX
  80. 00803B98  |. A1 CCD78200    |MOV EAX,DWORD PTR DS:[82D7CC]
  81. 00803B9D  |. 8B00           |MOV EAX,DWORD PTR DS:[EAX]
  82. 00803B9F  |. 8B80 BC090000  |MOV EAX,DWORD PTR DS:[EAX+9BC]
  83. 00803BA5  |. E8 AA04D5FF    |CALL uniQ.00554054
  84. 00803BAA  |. 43             |INC EBX
  85. 00803BAB  |. 46             |INC ESI
  86. 00803BAC  |. 81FB CF0F0000  |CMP EBX,0FCF
  87. 00803BB2  |.^75 A0          \JNZ SHORT uniQ.00803B54
  88. 00803BB4  |. 8D95 EFEFFFFF  LEA EDX,DWORD PTR SS:[EBP-1011]
  89. 00803BBA  |. 8B45 FC        MOV EAX,DWORD PTR SS:[EBP-4]
  90. 00803BBD  |. 8B80 0C350000  MOV EAX,DWORD PTR DS:[EAX+350C]
  91. 00803BC3  |. E8 DCDB0000    CALL uniQ.008117A4
  92. 00803BC8  |. C645 FB 01     MOV BYTE PTR SS:[EBP-5],1
  93. 00803BCC  |> 33C0           XOR EAX,EAX
  94. 00803BCE  |. 5A             POP EDX
  95. 00803BCF  |. 59             POP ECX
  96. 00803BD0  |. 59             POP ECX
  97. 00803BD1  |. 64:8910        MOV DWORD PTR FS:[EAX],EDX
  98. 00803BD4  |. 68 FD3B8000    PUSH uniQ.00803BFD
  99. 00803BD9  |> 8B45 FC        MOV EAX,DWORD PTR SS:[EBP-4]
  100. 00803BDC  |. E8 43710000    CALL uniQ.0080AD24
  101. 00803BE1  |. A1 CCD78200    MOV EAX,DWORD PTR DS:[82D7CC]
  102. 00803BE6  |. 8B00           MOV EAX,DWORD PTR DS:[EAX]
  103. 00803BE8  |. 8B80 B8090000  MOV EAX,DWORD PTR DS:[EAX+9B8]
  104. 00803BEE  |. 33D2           XOR EDX,EDX
  105. 00803BF0  |. E8 6F61CCFF    CALL uniQ.004C9D64
  106. 00803BF5  \. C3             RETN

В IDS_280 и IDS_281 содержаться какие-то байтовые данные.



Ранг: 441.3 (мудрец), 297thx
Активность: 0.410.04
Статус: Участник

Создано: 20 декабря 2012 17:44 · Поправил: tihiy_grom
· Личное сообщение · #2

IDR спасёт отца русской демократии.

Трассировка в отладчике и вдумчивое изучение каждого шага трассировки тоже спасает очень здорово.



Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 20 декабря 2012 17:46
· Личное сообщение · #3

или IDA
или Olly+ida_sigs



Ранг: 33.8 (посетитель), 38thx
Активность: 0.060
Статус: Участник

Создано: 20 декабря 2012 17:48
· Личное сообщение · #4

Как я понял нужен пароль к устройству ?
Ну а если пробовать так:
aaaa
aaab
aaac
и т.д.
и анализировать как меняется шифрованная строка ?



Ранг: 512.7 (!), 360thx
Активность: 0.270.03
Статус: Модератор

Создано: 20 декабря 2012 17:50
· Личное сообщение · #5

V01and пишет:
Написана на Delphi 2006/2007


IDR поможет для анализа




Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 20 декабря 2012 17:53
· Личное сообщение · #6

sendersu пишет:
IDR поможет для анализа

+ 500 грамм коньяка

-----
aLL rIGHTS rEVERSED!




Ранг: 12.4 (новичок)
Активность: 0.010
Статус: Участник

Создано: 20 декабря 2012 17:57 · Поправил: V01and
· Личное сообщение · #7

> Трассировка в отладчике и вдумчивое изучение каждого шага трассировки тоже спасает очень здорово.
Исследовал много часов - мозгов уже не хватает, поэтому обратился за помощью. Если бы хотябы не вызовы подпрограмм со всеми вытекающими, которые только запутывают. Если бы хотябы там хоть какие-нибудь апи-функции были. А то ж вобще не понятно что делает определенная подпрограмма.

> IDR спасёт отца русской демократии.
Юзал Dede (который зависает - устарел уже видимо), IDR - справился. Только вот чем они могут помочь. Открыл полученный после IDR проект в делфи - там тот же дизассемблированный код, только форма видна и некоторые компоненты. Может конечно я чего-нибудь незнаю... Подскажите конкретней пожалуйста.

> или Olly+ida_sigs
Спасибо, сейчас погуглю насчет этого.


upd: Спасибо всем за советы, ушел пробовать разные варианты.




Ранг: 253.5 (наставник), 684thx
Активность: 0.260.25
Статус: Участник
radical

Создано: 20 декабря 2012 18:14
· Личное сообщение · #8

V01and пишет:
Только вот чем они могут помочь.

V01and пишет:
Исследовал много часов - мозгов уже не хватает, поэтому обратился за помощью. Если бы хотябы не вызовы подпрограмм со всеми вытекающими, которые только запутывают. Если бы хотябы там хоть какие-нибудь апи-функции были. А то ж вобще не понятно что делает определенная подпрограмма.


map-файл создайте и примените с помощью плага mapimp (для OllyDbg), после этого, думаю, многое должно прояснится.

-----
ds




Ранг: 47.6 (посетитель), 15thx
Активность: 0.030.02
Статус: Участник

Создано: 20 декабря 2012 20:58
· Личное сообщение · #9

опять швейную машинку мучают
пароль у неё 1234 он перед кейсом команд проверяется



Ранг: 12.4 (новичок)
Активность: 0.010
Статус: Участник

Создано: 28 декабря 2012 03:38
· Личное сообщение · #10

Нет, не швейную машинку. Тут дело посерьезней

map-файл, импортированный в олли действительно помог. Стало более понятно где какие вызовы. Но все еще остается много вопросов. И как говорится чем дальше в лес тем толще партизаны.

Так как программа работает с девайсом, подключенным через ком-порт, я узнал какие компоненты используются для этого, накатал простую программу на делфи с использованием этих компонентов. Также сниффером узнал какие данные посылаются в устройство. Сделал тоже самое в своей программе. Но сравнивая полученные результаты вижу что они немного отличаются. Мне устройство возвращает около 4k байт. Меньше половины из них отличаются. Также сниффером узнал, что данные в устройство посылаются незашифрованными. Также с данными посылается некий хеш пароля. Обратно данные возвращаются в другом виде. Идея была такая, чтобы получить эти байты, понять принцип дешифрования в олли и написать свой дешифратор. Но дизассемблированный код в ольке очень запутанный (с другими имел дело - там все было понятно). Полученные данные храняться в одном буффере, потом в каком-то месте (не нашел в каком) переносятся в несколько других буфферов с использованием FPU. Между вызовами расставлены GetTickCount от отладки (плагины OllyAdvanced и т.д. не помагают). В другом месте я вижу, что в другом буффере уже дешифрованные данные в виде дробных чисел. И эти дробные числа конвертятся в целые из которых уже получается результат, который нужен.
Пробовал также трассировку с записью всего лога в файл двух вариантов - с правильным паролем и неправильным. Но тоже безрезультатно.
Патчил возможные переходы - не помогло. Видимо защита в другом.

Я исчерпал все возможные варианты обхода защиты. Подскажите, что еще можно предпринять?



Ранг: 12.4 (новичок)
Активность: 0.010
Статус: Участник

Создано: 28 декабря 2012 03:39
· Личное сообщение · #11

Есть драйвера этого устройства, само устройство, программа, написанная на делфи 2006/2007. Должен же быть выход!




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 28 декабря 2012 07:06
· Личное сообщение · #12

выход есть - терпение! ida pro + Hex-Rays и ручное разгребание кода

-----
[nice coder and reverser]




Ранг: 12.4 (новичок)
Активность: 0.010
Статус: Участник

Создано: 28 декабря 2012 14:04
· Личное сообщение · #13

Терпение уже заканчивается. Неделю копаться в коде все-таки. Ну экспортировал я его в делфи-проект, но ничего инетересного там нету. Пробовал также и IDR. Нужна идея. Хотябы понять принцип по которому дешифруются полученные байты. Может кто работал с ком-портом, какие есть тонкости при работе с ним?




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 28 декабря 2012 14:08
· Личное сообщение · #14

раз заканчивается терпения и знания, значит подаете запрос в тему
http://exelab.ru/f/action=vthread&forum=1&topic=17633
оглашаете суму вознаграждения - и вам все сделают

| Сообщение посчитали полезным: =TS=

Ранг: 12.4 (новичок)
Активность: 0.010
Статус: Участник

Создано: 28 декабря 2012 19:21
· Личное сообщение · #15

Подал запрос. Может кто-нибудь из присутствующих будет заинтересован?



Ранг: 92.4 (постоянный), 2thx
Активность: 0.040
Статус: Участник

Создано: 03 января 2013 18:24
· Личное сообщение · #16

что за устройство то (аппаратное которое) ???


 eXeL@B —› Вопросы новичков —› Узнать принцип шифрования данных / разобраться в дизассемблированном коде
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати