Сейчас на форуме: cppasm, asfa, vsv1 (+5 невидимых)

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

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

Создано: 15 декабря 2015 15:59 · Поправил: artkar
· Личное сообщение · #1

Есть блок данных, они зашифрованы, расшифровка происходит так:
Сперва при помощи процедуры MakeShifreBlock создаётся блок для декриптажа
arg_0 - Вывод
arg_4 - указатель на строку вида "NTdkNGQ1ZGQxNWY0ZjZhMjc5OGVmNjhiOGMzMjQ" строка не известна
arg_8 - размер
Потом при помощи процедуры Decode_Block блок данных раскодируется
arg_0 - Вход шифро-блока (вывод из процедуры MakeShifreBlock )
arg_4 - Вход/вывод вход - зашифрованные данные
arg_8 - размер всегда 70 хекс

Данные на выходе можно предсказать - это скрипт ПХП (Этот код из защиты PHPShield от компаниии SourceGuardian) следовательно можно подобрать, теоретически ключ. Однако не силен в шифровании и решил спросить здесь, кто может восстановить ключ входящий на процедуру MakeShifreBlock или расшифровать блок данных и сколько возьмете за работу?
Либо дайте какие либо рекомендации, пусть глупые, но теоретически могущие быть полезными, либо перешлите меня на ресурс где этим уже занимались и могли поделиться предыдущими наработками.
Спасибо.



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

Создано: 15 декабря 2015 16:07 · Поправил: artkar
· Личное сообщение · #2

MakeShifreBlock (disasm)

0b5d_15.12.2015_EXELAB.rU.tgz - MakeShifreBlock (disasm).txt

Добавлено спустя 3 минуты
Decode_Block (disasm)

11c0_15.12.2015_EXELAB.rU.tgz - Decode_Block (disasm).txt



Ранг: 51.8 (постоянный), 58thx
Активность: 0.03=0.03
Статус: Участник

Создано: 15 декабря 2015 18:27
· Личное сообщение · #3

По некоторым константам (ключ длиной 48h, счетчики циклов) можно предположить Blowfish. Для точного диагноза нужна программа, а не листинг.

artkar пишет:
следовательно можно подобрать, теоретически ключ

Если действительно Blowfish, то не получится.

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


Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 15 декабря 2015 18:46 · Поправил: -=AkaBOSS=-
· Личное сообщение · #4

грубый перевод Decode_Block

Code:
  1.   int var_Length = arg_Length / 4; // длина в двордах
  2.   uint* var_InOut = arg_InOut;
  3.   uint* var_ShifrBlock = arg_ShifrBlock;
  4.   uint* var_ShifrBlock_48 = arg_ShifrBlock + 48; // просто смещается указатель, на таблицы замены - массив двордов [4][100]
  5.  
  6.   var_8 = 0;
  7.   Zero = var_8;
  8.   var_14 = 0;
  9.   Zero2 = var_14;
  10.  
  11.   for (var_Counter = 0; var_Counter <= var_Length; var_Counter += 2) {
  12.     _ACCUM_ = var_InOut [var_Counter];
  13.     var_8 = _ACCUM_;
  14.     NoXorByte = var_InOut [var_Counter+1];
  15.     var_14 = NoXorByte;
  16.  
  17.     bswap (_ACCUM_);
  18.     bswap (NoXorByte);
  19.  
  20.     for (var_Always_11 = 17; var_Always_11 > 1; var_Always_11--) {
  21.   
  22.       _ACCUM_ ^= var_ShifrBlock[var_Always_11];
  23.   
  24.       var_1 = _ACCUM_ & 0xFF;
  25.       var_2 = (_ACCUM_ >> 8) & 0xFF;
  26.       var_3 = (_ACCUM_ >> 16) & 0xFF;
  27.       var_4 = (_ACCUM_ >> 24) & 0xFF;
  28.       temp = _ACCUM_;
  29.   
  30.       _ACCUM_ =  var_ShifrBlock_48 [0][var_4];
  31.       _ACCUM_ += var_ShifrBlock_48 [1][var_3];
  32.       _ACCUM_ ^= var_ShifrBlock_48 [2][var_2];
  33.       _ACCUM_ += var_ShifrBlock_48 [3][var_1];
  34.       _ACCUM_ ^= NoXorByte;
  35.  
  36.       NoXorByte = temp;
  37.     }
  38.  
  39.     temp = NoXorByte;
  40.     NoXorByte = _ACCUM_ ^ var_ShifrBlock[1];
  41.     _ACCUM_ = temp ^ var_ShifrBlock[0];
  42.     
  43.     bswap (_ACCUM_);
  44.     bswap (NoXorByte);
  45.  
  46.     var_InOut[var_Counter]   = _ACCUM_ ^ Zero;
  47.     var_InOut[var_Counter+1] = NoXorByte ^ Zero2;
  48.     Zero = var_8;
  49.     Zero2 = var_14;
  50.   }


собственно, часть цикла где используется var_ShifrBlock_48 очень напоминает Blowfish

Code:
  1. uint32_t f (uint32_t x) {
  2.    uint32_t h = S[0][>> 24] + S[1][>> 16 & 0xff];
  3.    return ( h ^ S[2][>> 8 & 0xff] ) + S[3][& 0xff];
  4. }


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


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