Сейчас на форуме: tyns777, cppasm, dutyfree (+7 невидимых)

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

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

Создано: 02 декабря 2016 17:53
· Личное сообщение · #1

Приветствую.
Наткнулся на функцию. Шифрует и отправляет по сети. Как ее обратить?


Code:
  1. .text:004CD420 crypt1          proc near               ; CODE XREF: UDP_Send2+6Dp
  2. .text:004CD420
  3. .text:004CD420 key             = dword ptr  8
  4. .text:004CD420 blocksCnt       = dword ptr  0Ch
  5. .text:004CD420 srcBuf          = dword ptr  10h
  6. .text:004CD420 dstBuf          = dword ptr  14h
  7. .text:004CD420
  8. .text:004CD420                 push    ebp
  9. .text:004CD421                 mov     ebp, esp
  10. .text:004CD423                 mov     edx, [ebp+srcBuf]
  11. .text:004CD426                 push    ebx
  12. .text:004CD427                 push    esi
  13. .text:004CD428                 push    edi
  14. .text:004CD429                 movzx   ebx, byte ptr [edx]
  15. .text:004CD42C                 movzx   eax, byte ptr [edx+1]
  16. .text:004CD430                 movzx   ecx, byte ptr [edx+5]
  17. .text:004CD434                 shl     ebx, 8
  18. .text:004CD437                 or      ebx, eax
  19. .text:004CD439                 movzx   eax, byte ptr [edx+2]
  20. .text:004CD43D                 shl     ebx, 8
  21. .text:004CD440                 or      ebx, eax
  22. .text:004CD442                 movzx   eax, byte ptr [edx+3]
  23. .text:004CD446                 shl     ebx, 8
  24. .text:004CD449                 or      ebx, eax
  25. .text:004CD44B                 movzx   eax, byte ptr [edx+4]
  26. .text:004CD44F                 shl     eax, 8
  27. .text:004CD452                 or      eax, ecx
  28. .text:004CD454                 movzx   ecx, byte ptr [edx+6]
  29. .text:004CD458                 shl     eax, 8
  30. .text:004CD45B                 or      eax, ecx
  31. .text:004CD45D                 movzx   ecx, byte ptr [edx+7]
  32. .text:004CD461                 shl     eax, 8
  33. .text:004CD464                 or      eax, ecx
  34. .text:004CD466                 cmp     [ebp+blocksCnt], 1
  35. .text:004CD46A                 jnz     short loc_4CD4C0
  36. .text:004CD46C                 xor     esi, esi
  37. .text:004CD46E                 mov     [ebp+srcBuf], 20h
  38. .text:004CD475
  39. .text:004CD475 loc_4CD475:                             ; CODE XREF: crypt1+9Cj
  40. .text:004CD475                 mov     edi, [ebp+key]
  41. .text:004CD478                 mov     edx, eax
  42. .text:004CD47A                 shr     edx, 5
  43. .text:004CD47D                 mov     ecx, eax
  44. .text:004CD47F                 shl     ecx, 4
  45. .text:004CD482                 xor     edx, ecx
  46. .text:004CD484                 mov     ecx, esi
  47. .text:004CD486                 and     ecx, 3
  48. .text:004CD489                 add     edx, eax
  49. .text:004CD48B                 mov     ecx, [edi+ecx*4]
  50. .text:004CD48E                 add     ecx, esi
  51. .text:004CD490                 sub     esi, 61C88647h
  52. .text:004CD496                 xor     edx, ecx
  53. .text:004CD498                 add     ebx, edx
  54. .text:004CD49A                 mov     edx, ebx
  55. .text:004CD49C                 mov     ecx, ebx
  56. .text:004CD49E                 shl     ecx, 4
  57. .text:004CD4A1                 shr     edx, 5
  58. .text:004CD4A4                 xor     edx, ecx
  59. .text:004CD4A6                 mov     ecx, esi
  60. .text:004CD4A8                 shr     ecx, 0Bh
  61. .text:004CD4AB                 add     edx, ebx
  62. .text:004CD4AD                 and     ecx, 3
  63. .text:004CD4B0                 mov     ecx, [edi+ecx*4]
  64. .text:004CD4B3                 add     ecx, esi
  65. .text:004CD4B5                 xor     edx, ecx
  66. .text:004CD4B7                 add     eax, edx
  67. .text:004CD4B9                 dec     [ebp+srcBuf]
  68. .text:004CD4BC                 jnz     short loc_4CD475
  69. .text:004CD4BE                 jmp     short loc_4CD519
  70. .text:004CD4C0 ; ---------------------------------------------------------------------------
  71. .text:004CD4C0
  72. .text:004CD4C0 loc_4CD4C0:                             ; CODE XREF: crypt1+4Aj
  73. .text:004CD4C0                 mov     esi, 0C6EF3720h
  74. .text:004CD4C5                 mov     [ebp+srcBuf], 20h
  75. .text:004CD4CC                 lea     esp, [esp+0]
  76. .text:004CD4D0
  77. .text:004CD4D0 loc_4CD4D0:                             ; CODE XREF: crypt1+F7j
  78. .text:004CD4D0                 mov     edi, [ebp+key]
  79. .text:004CD4D3                 mov     edx, ebx
  80. .text:004CD4D5                 shr     edx, 5
  81. .text:004CD4D8                 mov     ecx, ebx
  82. .text:004CD4DA                 shl     ecx, 4
  83. .text:004CD4DD                 xor     edx, ecx
  84. .text:004CD4DF                 mov     ecx, esi
  85. .text:004CD4E1                 shr     ecx, 0Bh
  86. .text:004CD4E4                 add     edx, ebx
  87. .text:004CD4E6                 and     ecx, 3
  88. .text:004CD4E9                 mov     ecx, [edi+ecx*4]
  89. .text:004CD4EC                 add     ecx, esi
  90. .text:004CD4EE                 add     esi, 61C88647h
  91. .text:004CD4F4                 xor     edx, ecx
  92. .text:004CD4F6                 sub     eax, edx
  93. .text:004CD4F8                 mov     edx, eax
  94. .text:004CD4FA                 mov     ecx, eax
  95. .text:004CD4FC                 shl     ecx, 4
  96. .text:004CD4FF                 shr     edx, 5
  97. .text:004CD502                 xor     edx, ecx
  98. .text:004CD504                 mov     ecx, esi
  99. .text:004CD506                 and     ecx, 3
  100. .text:004CD509                 add     edx, eax
  101. .text:004CD50B                 mov     ecx, [edi+ecx*4]
  102. .text:004CD50E                 add     ecx, esi
  103. .text:004CD510                 xor     edx, ecx
  104. .text:004CD512                 sub     ebx, edx
  105. .text:004CD514                 dec     [ebp+srcBuf]
  106. .text:004CD517                 jnz     short loc_4CD4D0
  107. .text:004CD519
  108. .text:004CD519 loc_4CD519:                             ; CODE XREF: crypt1+9Ej
  109. .text:004CD519                 mov     edx, [ebp+dstBuf]
  110. .text:004CD51C                 mov     ecx, ebx
  111. .text:004CD51E                 shr     ecx, 18h
  112. .text:004CD521                 pop     edi
  113. .text:004CD522                 pop     esi
  114. .text:004CD523                 mov     [edx], cl
  115. .text:004CD525                 mov     ecx, ebx
  116. .text:004CD527                 shr     ecx, 10h
  117. .text:004CD52A                 mov     [edx+1], cl
  118. .text:004CD52D                 mov     ecx, ebx
  119. .text:004CD52F                 shr     ecx, 8
  120. .text:004CD532                 mov     [edx+2], cl
  121. .text:004CD535                 mov     ecx, eax
  122. .text:004CD537                 shr     ecx, 18h
  123. .text:004CD53A                 mov     [edx+4], cl
  124. .text:004CD53D                 mov     ecx, eax
  125. .text:004CD53F                 shr     ecx, 10h
  126. .text:004CD542                 mov     [edx+5], cl
  127. .text:004CD545                 mov     ecx, eax
  128. .text:004CD547                 shr     ecx, 8
  129. .text:004CD54A                 mov     [edx+3], bl
  130. .text:004CD54D                 mov     [edx+6], cl
  131. .text:004CD550                 mov     [edx+7], al
  132. .text:004CD553                 pop     ebx
  133. .text:004CD554                 pop     ebp
  134. .text:004CD555                 retn
  135. .text:004CD555 crypt1          endp
  136.  



Декомилятор
Code:
  1.  
  2. unsigned int __cdecl crypt1(int a1, int a2, unsigned __int8 *a3, _BYTE *a4)
  3. {
  4.   unsigned int v4; // ebx@1
  5.   unsigned int result; // eax@1
  6.   unsigned int v6; // esi@2
  7.   int v7; // ecx@3
  8.   unsigned int v8; // esi@5
  9.   int v9; // ecx@6
  10.   signed int v10; // [esp+1Ch] [ebp+10h]@2
  11.   signed int v11; // [esp+1Ch] [ebp+10h]@5
  12.  
  13.   v4 = a3[3] | ((a3[2] | ((a3[1] | (*a3 << 8)) << 8)) << 8);
  14.   result = a3[7] | ((a3[6] | ((a3[5] | (a3[4] << 8)) << 8)) << 8);
  15.   if ( a2 == 1 )
  16.   {
  17.     v6 = 0;
  18.     v10 = 32;
  19.     do
  20.     {
  21.       v7 = v6 + *(_DWORD *)(a1 + 4 * (v6 & 3));
  22.       v6 -= 1640531527;
  23.       v4 += v7 ^ (result + (16 * result ^ (result >> 5)));
  24.       result += (v6 + *(_DWORD *)(a1 + 4 * ((v6 >> 11) & 3))) ^ (v4 + (16 * v4 ^ (v4 >> 5)));
  25.       --v10;
  26.     }
  27.     while ( v10 );
  28.   }
  29.   else
  30.   {
  31.     v8 = -957401312;
  32.     v11 = 32;
  33.     do
  34.     {
  35.       v9 = v8 + *(_DWORD *)(a1 + 4 * ((v8 >> 11) & 3));
  36.       v8 += 1640531527;
  37.       result -= v9 ^ (v4 + (16 * v4 ^ (v4 >> 5)));
  38.       v4 -= (v8 + *(_DWORD *)(a1 + 4 * (v8 & 3))) ^ (result + (16 * result ^ (result >> 5)));
  39.       --v11;
  40.     }
  41.     while ( v11 );
  42.   }
  43.   *a4 = BYTE3(v4);
  44.   a4[1] = v4 >> 16;
  45.   a4[2] = BYTE1(v4);
  46.   a4[4] = BYTE3(result);
  47.   a4[5] = result >> 16;
  48.   a4[3] = v4;
  49.   a4[6] = BYTE1(result);
  50.   a4[7] = result;
  51.   return result;
  52. }



Данные для проверки

На входе
01 00 00 29 23 BE 84 E1

На выходе (шифрованное)
7B F4 66 FD E9 5C FA 0B


Ключ
F3 4F 0B 82 A1 17 D7 13 51 47 98 D8 F0 B1 72 A7




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

Создано: 02 декабря 2016 18:11
· Личное сообщение · #2

зачем люди придумали гугл
и да, у вас шифровка/расшифровка в одной процедуре



Ранг: 12.2 (новичок), 11thx
Активность: 0.020
Статус: Участник

Создано: 02 декабря 2016 18:49
· Личное сообщение · #3

Rustem, константы в коде прогуглите.




Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 02 декабря 2016 19:31
· Личное сообщение · #4

Rustem
XTEA. Сэкономил вам две минуты

-----
Research For Food





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

Создано: 02 декабря 2016 19:34 · Поправил: reversecode
· Личное сообщение · #5

нет не XTEA




Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 02 декабря 2016 19:35
· Личное сообщение · #6

алго легко опознаваем, только загвоздка в том, что для данных используется big-endian, а для ключа little-endian.

Code:
  1. import struct
  2.  
  3. def xtea_encrypt(key,block,n=32):
  4.     v0,v1 = struct.unpack(">2L",block)
  5.     k = struct.unpack("<4L",key)
  6.     sum,delta,mask = 0L,0x9e3779b9L,0xffffffffL
  7.     for round in range(n):
  8.         v0 = (v0 + (((v1<<4 ^ v1>>5) + v1) ^ (sum + k[sum & 3]))) & mask
  9.         sum = (sum + delta) & mask
  10.         v1 = (v1 + (((v0<<4 ^ v0>>5) + v0) ^ (sum + k[sum>>11 & 3]))) & mask
  11.     return struct.pack(">2L",v0,v1)
  12.  
  13. def xtea_decrypt(key,block,n=32):
  14.     v0,v1 = struct.unpack(">2L",block)
  15.     k = struct.unpack("<4L",key)
  16.     delta,mask = 0x9e3779b9L,0xffffffffL
  17.     sum = (delta * n) & mask
  18.     for round in range(n):
  19.         v1 = (v1 - (((v0<<4 ^ v0>>5) + v0) ^ (sum + k[sum>>11 & 3]))) & mask
  20.         sum = (sum - delta) & mask
  21.         v0 = (v0 - (((v1<<4 ^ v1>>5) + v1) ^ (sum + k[sum & 3]))) & mask
  22.     return struct.pack(">2L",v0,v1)
  23.  
  24. _in = '\x01\x00\x00\x29\x23\xBE\x84\xE1'
  25. _out = '\x7B\xF4\x66\xFD\xE9\x5C\xFA\x0B'
  26. key = '\xF3\x4F\x0B\x82\xA1\x17\xD7\x13\x51\x47\x98\xD8\xF0\xB1\x72\xA7'
  27.  
  28. if xtea_encrypt(key,_in) == _out:
  29.    print 'OK!'
  30. if xtea_decrypt(key,_out) == _in:
  31.    print 'OK!'


обе проверки проходят

-----
127.0.0.1, sweet 127.0.0.1


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


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

Создано: 02 декабря 2016 19:49
· Личное сообщение · #7

tea а нe xtea




Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 02 декабря 2016 19:52
· Личное сообщение · #8

https://en.wikipedia.org/wiki/Tiny_Encryption_Algorithm
https://en.wikipedia.org/wiki/XTEA
как по мне, то XTEA

-----
127.0.0.1, sweet 127.0.0.1





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

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

старею, две вкладки были открыты рядом


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


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