Массив байт. Может кто узнает алгоритм шифрования?

Тема в разделе "WASM.CRYPTO", создана пользователем Aids, 8 июл 2011.

  1. Aids

    Aids New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2007
    Сообщения:
    275
    Массив байт. В неём сообщение из печатных символов.
    http://file.qip.ru/file/S0ydXM7P/crackme_key.html
    заменил на картинку
    [​IMG]
    Пробовал проксорить байтом. Ничего. Полюбому цитата из звёздных войн
     
  2. full_throttle

    full_throttle New Member

    Публикаций:
    0
    Регистрация:
    8 июл 2011
    Сообщения:
    4
    Так и будешь на каждый уровень решение клянчить?
     
  3. Aids

    Aids New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2007
    Сообщения:
    275
    full_throttle
    Вообще это последний. И на половину решённый. Но я вижу ты ничем не можешь помочь. И лишь можешь болтать в пустую :)
     
  4. full_throttle

    full_throttle New Member

    Публикаций:
    0
    Регистрация:
    8 июл 2011
    Сообщения:
    4
    Я могу помочь, раз ксор не подходит подробуйте прибавить байтики, ну или отнять. Короче предпринимай любые бесполезные действия, пока сюда кто-нибудь не напишет что за алгоритм там используется и тогда ты сможешь быстро решить.
     
  5. takerZ

    takerZ New Member

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

    Aids New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2007
    Сообщения:
    275
    full_throttle

    Ты думаешь я просто так ксорил? В тесте есть код который проксоривает ключь перед тем как дропнуть.
    Но вот только это как я понял искажение ключа
     
  7. Aids

    Aids New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2007
    Сообщения:
    275
    takerZ
    Вы думаете я не пытаюсь его решить самостоятельно? Вся проблема что я пока незнаю куда копать. Нет алгоритма для расшифровки или шифровки. Я уже весь файл драйвера и теста отреверсил. А что там зашифровано мне покоя не даёт. Вот и обратился сюда за помощью. А в место помощи мне мараль читают.
     
  8. Aids

    Aids New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2007
    Сообщения:
    275
    takerZ
    Вы наверное думаете что решив эти задания сразу же берут на работу:) Хочу разочеровать честных людей, подобные задания придётся решать при собеседовании
     
  9. PSR1257II

    PSR1257II New Member

    Публикаций:
    0
    Регистрация:
    25 июн 2011
    Сообщения:
    228
    Прослеживаеццо что-то вроде периода 0x20 (по битам 0x80). Может быть что-то типа DWORD rol index....
     
  10. Aids

    Aids New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2007
    Сообщения:
    275
    PSR1257II
    Нет что то тут другое. попробовал проделать что вы сказали. Кстати я что то запарился с операцией rol у неё второй параметр константа. Так что кода наворотил что бы это иправить(константу)
    Код (Text):
    1. int main(int n1,char**arg){
    2.     int n=0x50;
    3.     DeleteFileA("D:\\Temp\\Crackme\\test4\\input");
    4.     DWORD a;
    5. l1:
    6.     _asm{
    7.         lea eax,a
    8.         push eax
    9.         push PAGE_EXECUTE_READWRITE
    10.         mov eax,l2
    11.         sub eax,l1
    12.         push eax
    13.         push l1
    14.         call DWORD PTR[VirtualProtect]
    15.     }
    16.         BYTE *out=loadfile("D:\\Temp\\Crackme\\test4\\crackme_key.eset",n);// crackme_key.eset",n);
    17.         bool Status=true;
    18.         for (int i=0;i<32;i++){
    19.             for (int j=0;j<n;j=j+4){
    20.                 _asm{
    21.                     pushad
    22.                     mov edx,out
    23.                     add edx,j
    24.                     mov ebx,[edx]
    25.                     mov eax,i
    26.                     mov ecx,l3+2
    27.                     mov [ecx],al
    28. l3:
    29.                    
    30.                     ror ebx,0
    31.                     mov [edx],ebx
    32.                     popad
    33.                 }
    34.             }
    35.             addvector("D:\\Temp\\Crackme\\test4\\input",n,out);
    36.         }
    37.     l2:
    38.     return 0;
    39. }
     
  11. Aids

    Aids New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2007
    Сообщения:
    275
  12. PSR1257II

    PSR1257II New Member

    Публикаций:
    0
    Регистрация:
    25 июн 2011
    Сообщения:
    228
    Aids

    Я имел в виду что если взять ваш массивчег (Enc[]) то можно заметить что Enc&0x80 == Enc[i+0x20]&0x80. Это период по старшему биту.

    Я покопал еще немного предположив вначале что шифрование идет ксором на дворд и дворд поворачивают на каждом приращении индекса на 4 на 4 бита (тогда получаем такой период).

    Это была рабочая гипотеза, далее я использовал что в "печатном" тексте (те English) все буквы имеют битег 0x40 (A-Z,a-z это 41-5a,61-7a). Поскольку:

    Enc[0]=0x68, Enc[0x40]=0x1C и из периода следует (неважно как сделана функция) что Enc[0] и Enc[0x40] были проксорены на одно и то же число. Поскольку в Enc[0]=0x68 битег 0x40 есть -> он НЕ сброшен -> значит и в Enc[0x40]=0x1C он НЕ БЫЛ инвертирован -> 0x1C это НЕ {A-Z,a-z}.

    Предположив что это пробел (0x20) я предположительно получил первый байт гаммы - 0x3C. Тогда Dec[0]=Enc[0]^0x3C=0x54 ("T"). Это начало текста - наверное это "The "? (0x54,0x68,0x65,0x20). Отсюда следуют уже первые четыре байта гаммы:

    0x3C,0x78,0xF0,0xE0...

    Сразу замечаем что каждый следующий равен предидущему умноженному на 2:

    0x78=0x3C*2;
    0xF0=0x78*2;
    0x1E0=0xF0*2.

    Т.е. больше похоже что функция гаммы байтовая - что-то типа G0=0x3C,Gn=Gn-1*2;... но пока весь текст расшифровать не удаецца...
     
  13. OLS

    OLS New Member

    Публикаций:
    0
    Регистрация:
    8 янв 2005
    Сообщения:
    322
    Адрес:
    Russia
    Пойдем несколько иначе.
    Предположив, что перед нами многоалфавитный шифр по XOR-у, сразу видим период повтора алфавита - 32.
    По типовой схеме анализа многоалфавитных шифров находим значительно отличающиеся (в своих столбцах по модулю 32) символы - это либо пробелы либо запятые либо точки.
    Привлекают внимание символы в позициях 10 mod 32, 11 mod 32 и 12 mod 32, т.к. в каждой из них есть значительно отличающийся символ. Очевидно, что два подряд "отличающихся" знака могут быть только либо "точка-пробел", либо "запятая-пробел".
    Это дает нам символы гаммы в этой позиции 1A 34 69. Они очень похожи на удваивающиеся в каждом шаге, если бы не исключение "69".
    Берем гипотезу, что G[i+1]=2*G либо G[i+1]=2*G+1
    (с огромной вероятностью перед нами 8-битный линейный регистр сдвига, "классика жанра").
    Но я на самом деле не мудрствовал с определением правила выбора нового бита в каждом конкретном случае, и проверкой ЛРС ли это (если это действительно ЛРС, то для восстановления его структуры по 2*N битам гаммы есть алгоритм Берлекампа-Месси), т.к. требование читабельности легко позволяет сделать выбор и без тяжелой артиллерии.
    Мне лично больше понравилось восстанавливать гамму в обратном направлении (делением на 2, в некоторых случаях с заимствованием из старшего разряда).
    Например, получаем для первых 14 символов ((mod 32) - то есть на самом деле 3 читабельных блока по 14 символов в каждом) :
    3С 78 F0 E0 C0 80 01 03 06 0D 1A 34 69 D2
    Ну а по 14*3 символам, героя, произнесшего их, без труда выясните Вы ... :derisive:
     
  14. OLS

    OLS New Member

    Публикаций:
    0
    Регистрация:
    8 янв 2005
    Сообщения:
    322
    Адрес:
    Russia
    P.S. А кто помнит, AMIBIOS не этим же самым кодом хранившиеся в NVRAM пароли от БИОС-а шифровал в 90-х ?

    P.P.S. Нашел (шаг генерации очередного байта гаммы) :
    Код (Text):
    1.      test bl,0c3h
    2.      jp   @m1
    3.      stc
    4. @m1: rcr  bl,1
    В задаче Aids-а должно быть что-то очень похожее, только сдвиг влево, а не вправо как у AMIBIOS-а.
    Ну и константа какая-нибудь другая.
     
  15. Aids

    Aids New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2007
    Сообщения:
    275
    OLS
    PSR1257II
    У меня нет слов! как вы увидели блоки, потом сильноотличающиеся символы, и вывели закономерность. Здорово))
     
  16. Aids

    Aids New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2007
    Сообщения:
    275
    Гамма полностью восстановленная
    Код (Text):
    1. \x3c\x78\xf0\xe0\xc0\x80\x1\x3\x6\xd\x1a\x34\x69\xd2\xa5\x4b\x97\x2e\x5d\xba\x75\xeb\xd6\xad\x5b\xb6\x6c\xd9\xb3\x67\xcf\x9e
     
  17. full_throttle

    full_throttle New Member

    Публикаций:
    0
    Регистрация:
    8 июл 2011
    Сообщения:
    4
    Объясни одно зачем ты выкладываешь решение? Хочется похвастаться перед одноклассниками?
     
  18. Aids

    Aids New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2007
    Сообщения:
    275
    OLS
    PSR1257II
    Никак не могу увидеть общей закономерности, когда нужно сбрасывать бит а когда поднимать?

    Код (Text):
    1. 111100
    2. 1111000
    3. 11110000
    4. 11100001  11100000-
    5. 11000001  11000000-
    6. 10000001  10000000-
    7. 1        
    8. 10        11+
    9. 110
    10. 1100      1101+
    11. 11010
    12. 110100
    13. 1101000   1101001+
    14. 11010010
    15. 10100101
    16. 1001011
    17. 10010110  10010111+
    18. 101111    101110-
    19. 1011100   1011101+
    20. 10111010
    21. 1110101  
    22. 11101010 11101011+
    23. 11010111 11010110-
    24. 10101101
    25. 1011011
    26. 10110110
    27. 1101101  1101100-
    28. 11011000 11011001+
    29. 10110011
    30. 1100111  
    31. 11001110 11001111+
    32. 10011111 10011110-
    33.  
    34.  
    35.  
    36. common
    37. clear
    38. 11100001  11100000
    39. 11000001  11000000
    40. 10000001  10000000
    41. 00101111  00101110
    42. 11010111  11010110
    43. 01101101  01101100
    44. 10011111  10011110
    45.  
    46. set
    47. 00000010  00000011+
    48. 00001100  00001101+
    49. 01101000  01101001+
    50. 10010110  10010111+
    51. 01011100  01011101+
    52. 11101010  11101011+
    53. 11011000  11011001+
    54. 11001110  11001111+
    55.  
    56. nul
    57. 00111100
    58. 01111000
    59. 11110000
    60. 00000001        
    61. 00000110
    62. 00011010
    63. 00110100
    64. 11010010
    65. 10100101
    66. 01001011
    67. 10111010
    68. 01110101  
    69. 10101101
    70. 01011011
    71. 10110110
    72. 10110011
    73. 01100111
     
  19. gorodon

    gorodon New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2009
    Сообщения:
    301
    Aids читайте по теме "Регистры сдвига с обратной связью"
     
  20. PSR1257II

    PSR1257II New Member

    Публикаций:
    0
    Регистрация:
    25 июн 2011
    Сообщения:
    228
    ... да, перед тем как завалиццо спать я все еще пытался придумать функу которая может давать такой период. Но так как я изначально забился на то что тут ничего сложнее чем типа (a xor b) rol i быть не могет то единственное что приходило в голову - это 32-х битные регистры Intel. Про LFSR я даже не предполагал :)

    AMIBIOS - возможно аффтар данного пазла как раз взял этот метод и даже не полагая что это подмножество регистров с обратной.

    Aids

    Да, LFSR - это очень просто - коротенький код на C сразу покажет что и как.