Сталкивался ли кто-нибудь с таким алго?

Тема в разделе "WASM.CRYPTO", создана пользователем takerZ, 15 июл 2010.

  1. takerZ

    takerZ New Member

    Публикаций:
    0
    Регистрация:
    6 апр 2008
    Сообщения:
    18
    Код (Text):
    1. @L00000001:
    2.     PUSH    EBX
    3.     PUSH    ESI
    4.     PUSH    EDI
    5.     PUSH    EBP
    6.     ADD     ESP, -18
    7.     XOR     EBX, EBX
    8.     MOV     DWORD PTR [ESP], EBX
    9.     MOV     DWORD PTR [ESP+4], EAX
    10.     MOV     DWORD PTR [ESP+8], EDX
    11.     XOR     ESI, ESI
    12.     XOR     EDI, EDI
    13.     TEST    ECX, ECX
    14.     JNS     SHORT @L00000002
    15.     ADD     ECX, 7
    16.  
    17. @L00000002:
    18.     SAR     ECX, 3
    19.     TEST    ECX, ECX
    20.     JLE     @L00000008
    21.     MOV     DWORD PTR [ESP+14], ECX
    22.  
    23. @L00000003:
    24.     MOV     EBP, 8
    25.     LEA     EAX, DWORD PTR [ESP+C]
    26.  
    27. @L00000004:
    28.     MOV     EDX, DWORD PTR [ESP+4]
    29.     MOV     DL, BYTE PTR [EDX+ESI]
    30.     MOV     ECX, EDX
    31.     ADD     CL, 0D7
    32.     SUB     CL, 32
    33.     JNB     SHORT @L00000005
    34.     AND     EDX, 0FF
    35.     MOV     DL, BYTE PTR [EDX+5D56F3]
    36.     MOV     BYTE PTR [EAX], DL
    37.     JMP     SHORT @L00000006
    38.  
    39. @L00000005:
    40.     MOV     BYTE PTR [EAX], 0
    41.  
    42. @L00000006:
    43.     INC     ESI
    44.     INC     EAX
    45.     DEC     EBP
    46.     JNZ     SHORT @L00000004
    47.     MOV     AL, BYTE PTR [ESP+C]
    48.     SHL     EAX, 3
    49.     XOR     EDX, EDX
    50.     MOV     DL, BYTE PTR [ESP+D]
    51.     SHR     EDX, 2
    52.     OR      AL, DL
    53.     MOV     EDX, DWORD PTR [ESP+8]
    54.     MOV     BYTE PTR [EDX+EDI], AL
    55.     INC     DWORD PTR [ESP]
    56.     INC     EDI
    57.     MOV     AL, BYTE PTR [ESP+E]
    58.     CMP     AL, 0FF
    59.     JE      @L00000007
    60.     MOV     DL, BYTE PTR [ESP+D]
    61.     SHL     EDX, 6
    62.     ADD     EAX, EAX
    63.     OR      DL, AL
    64.     XOR     EAX, EAX
    65.     MOV     AL, BYTE PTR [ESP+F]
    66.     SHR     EAX, 4
    67.     OR      DL, AL
    68.     MOV     EAX, DWORD PTR [ESP+8]
    69.     MOV     BYTE PTR [EAX+EDI], DL
    70.     INC     DWORD PTR [ESP]
    71.     INC     EDI
    72.     MOV     AL, BYTE PTR [ESP+10]
    73.     CMP     AL, 0FF
    74.     JE      SHORT @L00000007
    75.     MOV     DL, BYTE PTR [ESP+F]
    76.     SHL     EDX, 4
    77.     AND     EAX, 0FF
    78.     SHR     EAX, 1
    79.     OR      DL, AL
    80.     MOV     EAX, DWORD PTR [ESP+8]
    81.     MOV     BYTE PTR [EAX+EDI], DL
    82.     INC     DWORD PTR [ESP]
    83.     INC     EDI
    84.     MOV     AL, BYTE PTR [ESP+11]
    85.     CMP     AL, 0FF
    86.     JE      SHORT @L00000007
    87.     MOV     DL, BYTE PTR [ESP+10]
    88.     SHL     EDX, 7
    89.     SHL     EAX, 2
    90.     OR      DL, AL
    91.     XOR     EAX, EAX
    92.     MOV     AL, BYTE PTR [ESP+12]
    93.     SHR     EAX, 3
    94.     OR      DL, AL
    95.     MOV     EAX, DWORD PTR [ESP+8]
    96.     MOV     BYTE PTR [EAX+EDI], DL
    97.     INC     DWORD PTR [ESP]
    98.     INC     EDI
    99.     MOV     AL, BYTE PTR [ESP+13]
    100.     CMP     AL, 0FF
    101.     JE      SHORT @L00000007
    102.     MOV     EDX, DWORD PTR [ESP+8]
    103.     MOV     CL, BYTE PTR [ESP+12]
    104.     SHL     ECX, 5
    105.     OR      CL, AL
    106.     MOV     BYTE PTR [EDX+EDI], CL
    107.     INC     DWORD PTR [ESP]
    108.     INC     EDI
    109.  
    110. @L00000007:
    111.     DEC     DWORD PTR [ESP+14]
    112.     JNZ     @L00000003
    113.  
    114. @L00000008:
    115.     MOV     EAX, DWORD PTR [ESP]
    116.     ADD     ESP, 18
    117.     POP     EBP
    118.     POP     EDI
    119.     POP     ESI
    120.     POP     EBX
    121.     RET
    и дамп
    Код (Text):
    1. 005D56F3  00 38 88 57 00 A4 88 57 00 38 94 57 00 A4 94 57  .8?W.¤?W.8”W.¤”W
    2. 005D5703  00 3C A2 57 00 A8 A2 57 00 10 B9 57 00 7C B9 57  .<ўW.ЁўW.№W.|№W
    3. 005D5713  00 E8 B9 57 00 6C D0 57 00 00 00 00 00 00 00 00  .и№W.lРW........
    4. 005D5723  19 1A 00 1B 00 1C 00 1D 1E 1F 00 00 00 00 00 00  .........
    5. 005D5733  00 FF 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D  .я.....
    6. 005D5743  0E 0F 10 11 12 13 14 15 16 17 18 8B C0 00 8D 40  ‹А.Ќ@
    7. 005D5753  00 E4 08 58 00 10 09 58 00 3C 09 58 00 68 09 58  .дX..X.<.X.h.X
    8. 005D5763  00 94 09 58 00 C0 09 58 00 EC 09 58 00 18 0A 58  .”.X.А.X.м.X..X
    9. 005D5773  00 44 0A 58 00 70 0A 58 00 9C 0A 58 00 C8 0A 58  .D.X.p.X.њ.X.И.X
    10. 005D5783  00 F4 0A 58 00 20 0B 58 00 4C 0B 58 00 78 0B 58  .ф.X. X.LX.xX
    11. 005D5793  00 A4 0B 58 00 D0 0B 58 00 FC 0B 58 00 28 0C 58  .¤X.РX.ьX.(.X
    12. 005D57A3  00 54 0C 58 00 80 0C 58 00 AC 0C 58 00 D8 0C 58  .T.X.Ђ.X.¬.X.Ш.X
    13. 005D57B3  00 04 0D 58 00 30 0D 58 00 5C 0D 58 00 88 0D 58  ..X.0.X.\.X.?.X
    14. 005D57C3  00 B4 0D 58 00 E0 0D 58 00 0C 0E 58 00 38 0E 58  .ґ.X.а.X..X.8X
    15. 005D57D3  00 64 0E 58 00 90 0E 58 00 BC 0E 58 00 E8 0E 58  .dX.ђX.јX.иX
    16. 005D57E3  00 14 0F 58 00 40 0F 58 00 6C 0F 58 00 98 0F 58  .X.@X.lX.˜X
    17. 005D57F3  00 C4 0F 58 00 F0 0F 58 00 1C 10 58 00 48 10 58  .ДX.рX.X.HX
    18. 005D5803  00 74 10 58 00 A0 10 58 00 CC 10 58 00 F8 10 58  .tX. X.МX.шX
    19. 005D5813  00 24 11 58 00 50 11 58 00 7C 11 58 00 A8 11 58  .$X.PX.|X.ЁX
    20. 005D5823  00 D4 11 58 00 00 12 58 00 2C 12 58 00 58 12 58  .ФX..X.,X.XX
    21. 005D5833  00 84 12 58 00 B0 12 58 00 DC 12 58 00 08 13 58  .„X.°X.ЬX.X
    22. 005D5843  00 34 13 58 00 60 13 58 00 00 8D 40 00 00 8D 40  .4X.`X..Ќ@..Ќ@
    23. 005D5853  00 00 8D 40 00 00 8D 40 00 02 00 00 00 03 00 00  ..Ќ@..Ќ@......
    24. 005D5863  00 01 00 00 00 04 00 00 00 E0 B3 58 00 EC B3 58  .......аіX.міX
    25. 005D5873  00 FC B3 58 00 0C B4 58 00 1C B4 58 00 28 B4 58  .ьіX..ґX.ґX.(ґX
    26. 005D5883  00 38 B4 58 00 48 B4 58 00 58 B4 58 00 68 B4 58  .8ґX.HґX.XґX.hґX
    27. 005D5893  00 78 B4 58 00 88 B4 58 00 98 B4 58 00 A8 B4 58  .xґX.?ґX.˜ґX.ЁґX
    28. 005D58A3  00 B8 B4 58 00 C8 B4 58 00 01 00 00 00 02 00 00  .ёґX.ИґX......
    29. 005D58B3  00 04 00 00 00 20 00 00 00 80 00 00 00 00 00 00  .... ...Ђ......
    30. 005D58C3  00 01 8D 40 00 00 00 00 00 02 00 00 00 01 00 00  .Ќ@..........
    31. 005D58D3  00 00 00 00 00 04 00 00 00 08 00 00 00 20 00 00  ........... ..
    32. 005D58E3  00 10 00 00 00 00 00 00 00 00 00 80 00 40 5E 59  ..........Ђ.@^Y
    33. 005D58F3  00 80 5E 59 00 D0 5E 59 00 24 5F 59 00 8C 5F 59  .Ђ^Y.Р^Y.$_Y.Њ_Y
    34. 005D5903  00 A8 5F 59 00 CC 5F 59 00 E8 5F 59 00 10 60 59  .Ё_Y.М_Y.и_Y.`Y
    35. 005D5913  00 10 60 59 00 48 60 59 00 98 60 59 00 A8 60 59  .`Y.H`Y.˜`Y.Ё`Y
    36. 005D5923  00 BC 60 59 00 CC 60 59 00 DC 60 59 00 EC 60 59  .ј`Y.М`Y.Ь`Y.м`Y
    37. 005D5933  00 00 61 59 00 10 61 59 00 20 61 59 00 30 61 59  ..aY.aY. aY.0aY
    38. 005D5943  00 40 61 59 00 50 61 59 00 50 61 59 00 60 61 59  .@aY.PaY.PaY.`aY
    39. 005D5953  00 70 61 59 00 80 61 59 00 90 61 59 00 00 01 02  .paY.ЂaY.ђaY..
    40. 005D5963  03 04 8D 40 00 00 8D 40 00 00 8D 40 00 00 01 FF  Ќ@..Ќ@..Ќ@..я
    fastcall, три параметра: строка длиной 0x68, длина этой строки, строка длиной 10. судя по контексту предполагаю, что это симметричный шифр, однако понятия не имею какой. подстановка выходного буфера в качестве входного, разумеется, ничего не дала. в окрестностях рефа функций, похожих на setkey, нет. если предположить, что третий параметр - ключ, то для des или 3des длина нестандартная. сабж?
     
  2. google

    google New Member

    Публикаций:
    0
    Регистрация:
    10 авг 2007
    Сообщения:
    140
    Эквивалент на C++:
    Код (Text):
    1. int __fastcall sub01(char *in_buf, unsigned char *out_but, int in_buf_size)
    2. {
    3.         static unsigned char _data[] = {
    4.         0x19, 0x1A, 0x00, 0x1B, 0x00, 0x1C, 0x00, 0x1D, 0x1E, 0x1F,                     // 0123456789
    5.         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,                                       // :;<=>?@
    6.         0xFF, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B,   // ABCDEFGHIJKLM
    7.         0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18    // NOPQRSTUVWXYZ
    8.         };
    9.         int count = 0;
    10.         unsigned char buf[8];
    11.         for (int var_14 = in_buf_size/8; var_14; --var_14)
    12.         {
    13.                 for (int i = 0; i < 8; ++i)
    14.                 {
    15.                         unsigned char ch = *in_buf++;
    16.                         if (ch >= '0' && ch <= 'Z')
    17.                                 buf[i] = _data[ch-'0'];
    18.                         else
    19.                                 buf[i] = 0x00;
    20.                 }
    21.                 *out_but++ = (buf[0] << 3) | (buf[1] >> 2);
    22.                 count++;
    23.                 if (buf[2] == 0xFF) continue;
    24.                 *out_but++ = (buf[1] << 6) | (buf[2] << 1) | buf[3] >> 4;
    25.                 count++;
    26.                 if (buf[4] == 0xFF) continue;
    27.                 *out_but++ = (buf[3] << 4) | (buf[4] >> 1);
    28.                 count++;
    29.                 if (buf[5] == 0xFF) continue;
    30.                 *out_but++ = (buf[4] << 7) | (buf[5] << 2) | (buf[6] >> 3);
    31.                 count++;
    32.                 if (buf[7] == 0xFF) continue;
    33.                 *out_but++ = (buf[6] << 5) | (buf[7] >> 0);
    34.                 count++;
    35.         }
    36.         return count;
    37. }
     
  3. google

    google New Member

    Публикаций:
    0
    Регистрация:
    10 авг 2007
    Сообщения:
    140
    Алгоритм таков:
    Входная строка обрабатывается по 8 байт за проход. Каждый символ строки заменяется в соответствии с таблицей на 5-битный код, далее эти коды помещаются в битовый выходной буфер, причем, если во входной строке встречается символ 'A' (код 0xFF) на позициях 3, 5, 6 или 8, то оставшиеся символы в 8-байтном блоке не рассматриваются, и производится переход к следующему блоку. Функция возвращает число пентад, записанных в выходной буфер.
     
  4. takerZ

    takerZ New Member

    Публикаций:
    0
    Регистрация:
    6 апр 2008
    Сообщения:
    18
    верно. это был выходной буфер, а не строка. спасибо, вы очень помогли.