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

 eXeL@B —› Вопросы новичков —› Исследование алгоритма дешифровки прошивки
Посл.ответ Сообщение

Ранг: 11.2 (новичок), 9thx
Активность: 0.030
Статус: Участник

Создано: 29 августа 2012 16:31 · Поправил: Flasher-11
· Личное сообщение · #1

Приветствую всех
Дешифровщик --> Тута <--
Code:
  1. 0040182E CALL imgDecod.004014F4 - вход в процедуру дешифровки


Code:
  1. 00401318  PUSH EBP
  2. 00401319  MOV EBP,ESP
  3. 0040131B  PUSH EDI
  4. 0040131C  PUSH ESI
  5. 0040131D  PUSH EBX
  6. 0040131E  SUB ESP,0C
  7. 00401321  MOV EAX,DWORD PTR SS:[EBP+8]
  8. 00401324  MOV EDX,DWORD PTR DS:[EAX+8]
  9. 00401327  MOV ECX,DWORD PTR DS:[40550C]
  10. 0040132D  SUB EDX,ECX
  11. 0040132F  MOV DWORD PTR SS:[EBP-14],EDX
  12. 00401332  MOV EBX,DWORD PTR DS:[EAX]
  13. 00401334  MOV EDX,DWORD PTR DS:[405508]
  14. 0040133A  SUB EBX,EDX
  15. 0040133C  MOV DWORD PTR SS:[EBP-10],EBX
  16. 0040133F  MOV ECX,DWORD PTR DS:[EAX+4]
  17. 00401342  MOV EAX,DWORD PTR DS:[EAX+C]
  18. 00401345  MOV DWORD PTR SS:[EBP-18],EAX
  19. 00401348  XOR EDI,EDI
  20. 0040134A  JMP SHORT imgDecod.00401352
  21. 0040134C  MOV DWORD PTR SS:[EBP-10],EBX
  22. 0040134F  MOV DWORD PTR SS:[EBP-14],ESI
  23. 00401352  MOV EBX,DWORD PTR SS:[EBP-14]
  24. 00401355  LEA EDX,DWORD PTR DS:[EBX+EBX+1]
  25. 00401359  IMUL EDX,EBX
  26. 0040135C  ROR EDX,1B
  27. 0040135F  MOV EBX,DWORD PTR SS:[EBP-10]
  28. 00401362  LEA EAX,DWORD PTR DS:[EBX+EBX+1]
  29. 00401366  IMUL EAX,EBX
  30. 00401369  ROR EAX,1B
  31. 0040136C  MOV ESI,ECX
  32. 0040136E  SUB ESI,DWORD PTR DS:[EDI+405504]
  33. 00401374  MOV ECX,EAX
  34. 00401376  AND ECX,1F
  35. 00401379  ROR ESI,CL
  36. 0040137B  XOR ESI,EDX
  37. 0040137D  MOV EBX,DWORD PTR SS:[EBP-18]
  38. 00401380  SUB EBX,DWORD PTR DS:[EDI+405500]
  39. 00401386  MOV ECX,EDX
  40. 00401388  AND ECX,1F
  41. 0040138B  ROR EBX,CL
  42. 0040138D  XOR EBX,EAX
  43. 0040138F  SUB EDI,8
  44. 00401392  MOV EAX,DWORD PTR SS:[EBP-14]
  45. 00401395  MOV DWORD PTR SS:[EBP-18],EAX
  46. 00401398  MOV ECX,DWORD PTR SS:[EBP-10]
  47. 0040139B  CMP EDI,-98
  48. 004013A1  JNZ SHORT imgDecod.0040134C
  49. 004013A3  LEA EAX,DWORD PTR DS:[ESI+ESI+1]
  50. 004013A7  IMUL EAX,ESI
  51. 004013AA  ROR EAX,1B
  52. 004013AD  LEA EDI,DWORD PTR DS:[EBX+EBX+1]
  53. 004013B1  IMUL EDI,EBX
  54. 004013B4  ROR EDI,1B
  55. 004013B7  MOV EDX,DWORD PTR SS:[EBP-10]
  56. 004013BA  SUB EDX,DWORD PTR DS:[40546C]
  57. 004013C0  MOV ECX,EDI
  58. 004013C2  AND ECX,1F
  59. 004013C5  ROR EDX,CL
  60. 004013C7  XOR EDX,EAX
  61. 004013C9  MOV DWORD PTR SS:[EBP-10],EDX
  62. 004013CC  MOV EDX,DWORD PTR SS:[EBP-14]
  63. 004013CF  SUB EDX,DWORD PTR DS:[405468]
  64. 004013D5  MOV ECX,EAX
  65. 004013D7  AND ECX,1F
  66. 004013DA  ROR EDX,CL
  67. 004013DC  SUB ESI,DWORD PTR DS:[405464]
  68. 004013E2  MOV ECX,DWORD PTR SS:[EBP+C]
  69. 004013E5  MOV DWORD PTR DS:[ECX+C],ESI
  70. 004013E8  MOV EAX,DWORD PTR SS:[EBP-10]
  71. 004013EB  MOV DWORD PTR DS:[ECX+8],EAX
  72. 004013EE  SUB EBX,DWORD PTR DS:[405460]
  73. 004013F4  MOV DWORD PTR DS:[ECX+4],EBX
  74. 004013F7  XOR EDX,EDI
  75. 004013F9  MOV DWORD PTR DS:[ECX],EDX
  76. 004013FB  ADD ESP,0C
  77. 004013FE  POP EBX
  78. 004013FF  POP ESI
  79. 00401400  POP EDI
  80. 00401401  LEAVE
  81. 00401402  RETN


С некоторыми частями я разобрался, но начиная с 0040134C тут для меня абра-кадабра, отслеживал дамп, но так и не понял что там и к чему. Читает построчно по 16 символов с прошивки, помещает строчку отдельно и начинает над ней колдовать. Я не прошу решить все за меня, прошу подтолкнуть меня куда и что надо смотреть, что бы наконец-то понять алгоритм.



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

Создано: 29 августа 2012 16:34
· Личное сообщение · #2

Судя по kanal
RC5/RC6




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

Создано: 29 августа 2012 17:02 · Поправил: reversecode
· Личное сообщение · #3

самопал помоему какой то,
Flasher-11 пишет:
0040134C тут для меня абра-кадабра, отслеживал дамп, но так и не понял что там и к чему

в псевдо коде разбираетесь?
грузите в IDA + hexrays = профит!
алго там простой



Ранг: 11.2 (новичок), 9thx
Активность: 0.030
Статус: Участник

Создано: 29 августа 2012 19:49 · Поправил: Flasher-11
· Личное сообщение · #4

reversecode, в IDA я работал всего 1 раз. Пользуюсь олей, буду признателен если кинете линки на хорошие статьи по IDA

-----
Алгоритм почти разобрал, дешифруется на основе 176-ти байтного ключа. А вот как он генерируется, пока не нашел.



Ранг: 189.9 (ветеран), 334thx
Активность: 0.30
Статус: Участник

Создано: 29 августа 2012 19:54
· Личное сообщение · #5

Flasher-11, есть спецальный топик про IDA там статьи/книги.



Ранг: 11.2 (новичок), 9thx
Активность: 0.030
Статус: Участник

Создано: 31 августа 2012 20:24 · Поправил: Flasher-11
· Личное сообщение · #6

Ключ 176 байтный, на основе чего генерируется, я пока не узнал
Code:
  1. 00405454  64 E4 88 B4                                                       d䈴
  2. 00405464  7B 81 F4 D4 F9 2C A1 DD C8 89 7E A2 4F 26 5E 4A   {ЃфФщ,ЎЭИ‰~ўO&^J
  3. 00405474  1D B2 17 2A 39 ED F7 96 98 E4 51 98 ED 84 8E 6B    І*9нч–?дQ?н„Ћk
  4. 00405484  17 60 A3 79 9F BD DB 1F B0 5D 36 3C B2 4A 86 93   `ЈyџЅЫ°]6<ІJ†“
  5. 00405494  37 2D 0A 93 9A 5A 12 0F 41 ED 76 AB 4F AB 34 42   7-.“љZAнv«O«4B
  6. 004054A4  81 4C 63 CB 3C 2D CF 27 17 20 00 7E 99 68 88 D8   ЃLcЛ<-П' .~™h€Ш
  7. 004054B4  F7 45 DE A8 B9 9B 85 4E AB 3F 8A 0F A7 91 11 3D   чEЮЁ№›…N«?Љ§‘=
  8. 004054C4  4C 9F B8 63 D4 82 8E F7 7A 9B 11 FA 5B 8E 1D B1   LџёcФ‚Ћчz›ъ[Ћ±
  9. 004054D4  E5 8E 98 E0 67 AB D4 B3 1A 8C 02 17 D4 F0 61 4B   еЋ?аg«ФіЊФрaK
  10. 004054E4  34 93 75 3B 92 F9 04 05 7C 14 FC 29 8B 00 E9 0D   4“u;’щ|ь)‹.й.
  11. 004054F4  FA D0 03 79 CF F4 31 0B 0C 6E D1 68 50 E0 A8 ED  ъРyПф1 .nСhPаЁн
  12. 00405504  D6 51 B4 78 FE D4 52 79 8B 26 0D ED 00               ЦQґxюФRy‹&.н.


Далее, считываем по 16 байт из прошивки. Допустим S = 16 байт (2A99A280|46D06398|24A26204|931E0395)
Берем из S(24A26204)-K(260DED00) = 17557B99
S(2A99A280)-K(D452798B) = 074FC42C
Потом получаем строчку из 12 байт (931E0395|17557B99|074FC42C)
Ну а дальше начинаются мат.вычисления и переколбашивание строки.
Описывать я это здесь не буду, писал на листочке каждый шаг, получилось объемно.
Но понять не могу пока, как записать этот алгоритм.

---------------------
Veliant, Спасибо Тоже ходил вокруг да около модификации ключа.



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

Создано: 31 августа 2012 22:35
· Личное сообщение · #7

Сначала идет стандартная генерация RC5 с константами 0xB7E15163 и 0x61C88647, а вот потом полученный массив модифицируется в зависимости от типа прошивки.
1)прошивка с хидером IMAGEWTY. Временный массив заполняется WORD'ами (L'i')
2)Прошивка пошифрована и выполняется дважды декодирование. Первый раз с заливкой временного буффера word'ом (L'm'), второй раз (L'g');

Собственно само алго по модификации ключей rc5 находится в 004015A4 и выглядит так
Code:
  1. do
  2.   {
  3.     while ( 1 )
  4.     {
  5.       v9 = __ROR__(v6 + v7 + bufKey[idxA], 29);
  6.       v6 = v9;
  7.       v10 = v9 + v7;
  8.       v11 = v10 + dword_405040[idxB];
  9.       v12 = v10 & 0x8000001F;
  10.       if ( v12 < 0 )
  11.         LOBYTE(v12) = ((unsigned __int8)(v12 - 1) | 0xE0) + 1;
  12.       v8 = __ROL__(v11, v12);
  13.       v7 = v8;
  14.       bufKey[idxA] = v9;
  15.       dword_405040[idxB] = v8;
  16.       idxA = (idxA + 1) % 44;
  17.       idxB = (idxB + 1) & 0x80000007;
  18.       if ( idxB < 0 )
  19.         break;
  20.       ++j;
  21.       if ( j == 132 )
  22.         return j;
  23.     }
  24.     idxB = ((idxB - 1) | 0xFFFFFFF8) + 1;
  25.     ++j;
  26.   }
  27.   while ( j != 132 );

где bufKey - генерится по алго rc5, а dword_405040 - временный буффер.
Вот этот код тебе и нужно привести к нормальному виду

ну а функция 004014F4 выполняет encrypt/decrypt в зависимости от последнего параметра

| Сообщение посчитали полезным: Flasher-11

Ранг: 11.2 (новичок), 9thx
Активность: 0.030
Статус: Участник

Создано: 07 сентября 2012 01:27
· Личное сообщение · #8

Было время разобрал алгоритм модификации ключей, писал на C#
Пошел дальше, насколько я правильно понял
1)Прошивка с хидером IMAGEWTY. Временный массив заполняется WORD'ами (L'i') - то мы шифруем этим ключом прошивку
2)Прошивка пошифрована и выполняется дважды декодирование. Первый раз с заливкой временного буффера word'ом (L'm'), второй раз (L'g') - Первый раз дешифруем ключом с (L'm'), а второй раз дешифруем с (L'g').
Верно ли?



Ранг: 11.2 (новичок), 9thx
Активность: 0.030
Статус: Участник

Создано: 09 сентября 2012 22:16
· Личное сообщение · #9

Ура! Разобрался, все декодирует правильно, всем спасибо за помощь


 eXeL@B —› Вопросы новичков —› Исследование алгоритма дешифровки прошивки
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати