Сейчас на форуме: jinoweb, bartolomeo, rmn (+5 невидимых)

 eXeL@B —› Программирование —› Кому не лень, помогите обратить алгоритм
. 1 . 2 . >>
Посл.ответ Сообщение


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

Создано: 20 марта 2012 17:20
· Личное сообщение · #1

Code:
  1.  void xtea_decipher(uint32_t *res, uint32_t *v, uint32_t const *k)
  2. {
  3.   uint32_t y,z,delta18 = 0,delta1C = 0;
  4.  
  5. //  asm {int 3};
  6.  
  7. for (int i = 0; i < 0x41*2; i+=2)
  8. {
  9.          y = v[i];
  10.          z = v[i+1];
  11.  
  12.          z -= (((>> 5) ^ (<< 4)) + y) ^ (k[3]-0x61C88647);
  13.          y -= (((>> 5) ^ (<< 4)) + z) ^ (k[0]);
  14.  
  15.          res[i] = y ^ delta18;
  16.          res[i+1] = z ^ delta1C;
  17.  
  18.          delta1C = res[i+1] ^ v[i+1];
  19.          delta18 = res[i] ^ v[i];
  20.  
  21.   }
  22.  
  23. }


Это код модифицированного xtea, не получается его обратить. Вот мои скромные попытки:
Code:
  1. for (int i = 0; i < 0x41*2; i+=2)
  2. {
  3.          y = v[i];
  4.          z = v[i+1];
  5.  
  6.          y += (((>> 5) ^ (<< 4)) + z) ^ (k[0]);
  7.          z += (((>> 5) ^ (<< 4)) + y) ^ (k[3]-0x61C88647);
  8.  
  9.          res[i] = y ^ delta18;
  10.          res[i+1] = z ^ delta1C;
  11.  
  12.          delta1C = res[i+1] ^ v[i+1];
  13.          delta18 = res[i] ^ v[i];
  14.  
  15.   }


Первая итерация проходит правильно, потом начинает писать мусор. Это связано с не правильным заполнением дельт. Направьте в нужном направлении

-----
Research For Food





Ранг: 533.6 (!), 232thx
Активность: 0.450
Статус: Uploader
retired

Создано: 20 марта 2012 17:54
· Личное сообщение · #2

Может дельты нужно в самом начали обрабатывать?!

-----
Лучше быть одиноким, но свободным © $me





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

Создано: 20 марта 2012 17:57
· Личное сообщение · #3

BoRoV
Неа, тогда уже на первой итерации пойдёт мусор

-----
Research For Food




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

Создано: 20 марта 2012 18:12 · Поправил: Veliant
· Личное сообщение · #4

На мой взгляд во-первых цикл должен идти в обратную сторону от 64 к 0
Code:
  1. delta1C = res[64] ^ v[64];
  2. delta18 = res[63] ^ v[63];
  3. for (int i = 64*2; i >= 0; i -= 2)
  4. {
  5.          y =  res[i] ^ delta18;
  6.          z = res[+ 1] ^ delta1C;
  7.          ...
  8.          v[i] = y;
  9.          v[+ 1] = z;
  10.  
  11.          delta1C = res[+ 1] ^ v[+ 1];
  12.          delta18 = res[i] ^ v[i];
  13. }


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


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

Создано: 20 марта 2012 18:23
· Личное сообщение · #5

Veliant
В обратную сторону крутить было не обязательно, а вот твой код действительно правильный)
DenCoder на пару минут раньше дал решение в аське)) Всё равно большое спасибо за помощь!

-----
Research For Food




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

Создано: 24 марта 2012 09:23
· Личное сообщение · #6

Code:
  1.  /*------------------------------------------------------------*/
  2. /* The TDCS algorithm is a property of TDi GmbH and represens */
  3. /* 16 additional variants of the standard XTEA algorithm.     */
  4. /*------------------------------------------------------------*/
  5.  
  6. //****************************************************************************************
  7. short MxApp_EncryptEx(
  8.                                              unsigned long *Data,
  9.                                              unsigned long *Key,
  10.                                              unsigned short Algorithm
  11.                                              )
  12. //****************************************************************************************
  13. {
  14.    register unsigned long  delta, sum;
  15.    register unsigned short n1, n2, n3; // Shift-Values
  16.    short    cnt, i;
  17.    short    ShiftOffset;
  18.  
  19.    /*------------------------------------------------------*/
  20.    /* VF: 22.08.03 - Anpassung zur Firmware                */
  21.    /*                                                      */
  22.    /* The new XTEA (TDCS) supports additional 16 different */
  23.    /* variants of the standard XTEA (Algorithm 0 - 16).    */
  24.    /* When 'Algorithm' is 0 or not between 1 and 16, then  */
  25.    /* the standard XTEA will be used.                      */
  26.    /*------------------------------------------------------*/
  27.     if(Algorithm >= 1 && Algorithm <= 16) // new XTEA (TDCS) with 29 Rounds
  28.     {
  29.        ShiftOffset = Algorithm + 4; // Shift-Values depending on Algorithm
  30.        delta = 0x13C6EF37; // new Delta-Value for (TDCS)
  31.        sum   = 0;
  32.        cnt   = 29;
  33.     }
  34.     else                                  // Original XTEA with 32 Rounds
  35.     {
  36.        ShiftOffset = 4; // Original Shift-Values 4,5,11
  37.        delta = 0x9E3779B9; // Original Delta-Value
  38.        sum   = 0;
  39.        cnt   = 32;
  40.     }
  41.     n1 = ShiftOffset;
  42.     n2 = ShiftOffset+1;
  43.     n3 = ShiftOffset+7;
  44.    /*-------------------------------------------------*/
  45.  
  46.    // Delta can also be computed by following formula:
  47.    // delta = (unsigned long)((sqrt(5.0)-1.0)*pow(2.0, double(cnt-1)));
  48.  
  49.    for(i=1; i<=cnt; i++)
  50.    {
  51.       Data[0] += (Data[1]<<n1 ^ Data[1]>>n2) + Data[1] ^ sum + Key[sum&3];
  52.       sum += delta;
  53.       Data[1] += (Data[0]<<n1 ^ Data[0]>>n2) + Data[0] ^ sum + Key[sum>>n3 & 3];
  54.    }
  55.    return 0;
  56. }
  57.  
  58. //****************************************************************************************
  59. short MxApp_DecryptEx(
  60.                                              unsigned long *Data,
  61.                                              unsigned long *Key,
  62.                                              unsigned short Algorithm
  63.                                              )
  64. //****************************************************************************************
  65. {
  66.    register unsigned long  delta, sum;
  67.    register unsigned short n1, n2, n3; // Shift-Values
  68.    short    cnt, i;
  69.    short    ShiftOffset;
  70.  
  71.    /*------------------------------------------------------*/
  72.    /* VF: 22.08.03 - Anpassung zur Firmware                */
  73.    /*                                                      */
  74.    /* The new XTEA (TDCS) supports additional 16 different */
  75.    /* variants of the standard XTEA (Algorithm 0 - 16).    */
  76.    /* When 'Algorithm' is 0 or not between 1 and 16, then  */
  77.    /* the standard XTEA will be used.                      */
  78.    /*------------------------------------------------------*/
  79.     if(Algorithm >= 1 && Algorithm <= 16) // new XTEA (TDCS) with 29 Rounds
  80.     {
  81.        ShiftOffset = Algorithm + 4; // Shift-Values depending on Algorithm
  82.        delta = 0x13C6EF37; // new Delta-Value for (TDCS)
  83.        sum   = 0x3D89193B; // new Sum-Value for (TDCS)
  84.        cnt   = 29;
  85.     }
  86.     else                                  // Original XTEA with 32 Rounds
  87.     {
  88.        ShiftOffset = 4; // Original Shift-Values 4,5,11
  89.        delta = 0x9E3779B9; // Original Delta-Value
  90.        sum   = 0xC6EF3720; // Original Sum-Value
  91.        cnt   = 32;
  92.     }
  93.     n1 = ShiftOffset;
  94.     n2 = ShiftOffset+1;
  95.     n3 = ShiftOffset+7;
  96.    /*----------------------------------------------*/
  97.  
  98.    // Delta and Sum can also be computed by following formula:
  99.    // delta = (unsigned long)((sqrt(5.0)-1.0)*pow(2.0, double(cnt-1)));
  100.    // sum   = (unsigned long)(delta * cnt);
  101.  
  102.    for(i=1; i<=cnt; i++)
  103.    {
  104.       Data[1] -= (Data[0]<<n1 ^ Data[0]>>n2) + Data[0] ^ sum + Key[sum>>n3 & 3];
  105.       sum -= delta;
  106.       Data[0] -= (Data[1]<<n1 ^ Data[1]>>n2) + Data[1] ^ sum + Key[sum&3];
  107.    }
  108.    return 0;
  109. }


-----
...или ты работаешь хорошо, или ты работаешь много...





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

Создано: 26 марта 2012 01:40
· Личное сообщение · #7

BfoX
Не, не такой. В приведённом тобой алго оригинальный xtea, меняется только число сдвигов. В моём случае, xtea прогоняет не 8 байт с переменным количеством итераций, а весь буфер по одной итерации на каждые 8 байт

-----
Research For Food




Ранг: 315.1 (мудрец), 631thx
Активность: 0.30.33
Статус: Модератор
CrackLab

Создано: 18 апреля 2012 11:38 · Поправил: SReg
· Личное сообщение · #8

Вообщем трабла. Чую неосилю никак. Но знаю что автор как то же ключики генерит)...
упростил вот уже до невозможности...
Code:
  1. //InMas  array[0..7] 8-bytes ($72, $61, $57, $83, $96, $17, $46, $83)
  2.  
  3. OutMas[0] := InMas[0] shl 3 or InMas[1] shr 2 and 7;
  4. OutMas[1] := InMas[3] shr 4 and 1 or (InMas[1] shl 5 or InMas[2] and 31)*2;
  5. OutMas[2] := InMas[3] shl 4 or InMas[5] shr 1 and 15;
  6. OutMas[3] := InMas[6] shr 3 and 3 or (InMas[6] shl 5 or InMas[5] and 31)*4;
  7. OutMas[4] := InMas[6] shl 5 or InMas[7] and 31;
  8. //OutMas array[0..4] 5-bytes ($90, $6E, $3B, $5C, $C3)
необходимо както из 5-ти байтного массивчика получить исходный...
Выручайте
add:пишут, мол, приоритеты операций не наглядные Vodoley,ок. где ты тут что то подобное от бейса64 нашел - лично мне непонятно...
Code:
  1. OutMas[0]:=(InMas[0] shl 3) or ((InMas[1] shr 2) and 7);
  2. OutMas[1]:=(InMas[3] shr 4 and 1) or (((InMas[1] shl 5) or (InMas[2] and 31))shl 1);
  3. OutMas[2]:=(InMas[3] shl 4) or (InMas[5] shr 1 and 15);
  4. OutMas[3]:=(InMas[6] shr 3 and 3) or (((InMas[6] shl 5) or (InMas[5] and 31))shl 2);
  5. OutMas[4]:=(InMas[6] shl 5) or (InMas[7] and 31);




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

Создано: 18 апреля 2012 12:10 · Поправил: VodoleY
· Личное сообщение · #9

SReg судя по тому что выходное сообщение короче, как бы это не был велосипед из Base64 хоть перекодировочной таблицы и нету
З.ы. ты буже либо SHR SHL лепил везде, либо везде умножение/деление на 2^n

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....





Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 18 апреля 2012 12:18 · Поправил: neomant
· Личное сообщение · #10

Есть критерии проверки правильности входной последовательности? Без брута никак, некоторые биты безвозвратно теряются в результате сдвигов, 4-й байт входной последовательности на выход вообще не влияет.
add:
Точное количество недостающих бит не подсчитывал, но даже на глаз видно, что если есть критерий проверки правильности входа, сбрутиться может достаточно быстро.

-----
Следуй за белым кроликом




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

Создано: 18 апреля 2012 12:30 · Поправил: VodoleY
· Личное сообщение · #11

SReg а я не утверждал что ЭТО говно бейз. я сказал что это велосипед, с подобной логикой. neomant думаю без брута можно.
OutMas[0]:= (InMas[0] shl 3) от первого входного байта используюца младшие 5 бит (остальное теряеца)
or ((InMas[1] shr 2) and 7); и складываеца с 2ым байтом, у которого беруца с 3го по 5ый бит
я б не брутил а составил маску используемых бит. т.е. в первой строчке InMas[0] ***! !!! InMas[1] ***! !!**

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....




Ранг: 315.1 (мудрец), 631thx
Активность: 0.30.33
Статус: Модератор
CrackLab

Создано: 18 апреля 2012 12:47 · Поправил: SReg
· Личное сообщение · #12

вообще то входные байты которые используются их диапазон довольно таки ограничен. Вот они все.
Code:
  1. 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 0A 0B 0C 0D 0E 0F 1A 1B 1C 1D 1E 1F

те цифры я от балды написал, мой косяк...



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

Создано: 18 апреля 2012 12:57 · Поправил: VodoleY
· Личное сообщение · #13

SReg это по большому счету не существенно, я смотрю, что алго весьма обратим, причем не слишком сложно.. просто надо посидеть и подумать. каждый выходной байт, формируеца из четко определенных бит из 1-3ех байт входного массива.. причем четко определенны
З.Ы. я вот о чем.

(InMas[3] shr 4 and 1) тут из старших 8 бит, останица только 1 т.е. максимальное число 1F , и только при 1F=Result=1 (F теряеца)
(InMas[3] shl 4) а тут наоборот, все старшие теряюца, остаюца только все младшие биты 1F=Result=F (все старшие биты теряюца)

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....




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

Создано: 18 апреля 2012 13:32
· Личное сообщение · #14

Алгоритм вполне себе простой. Из входных байтов выделяются битовые фрагменты и помещаются в разные места в выходные байты. Каждому выходному биту соответствует конкретный бит со входа.




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

Создано: 18 апреля 2012 13:47 · Поправил: OKOB
· Личное сообщение · #15

InMas[0] = (OutMas[0] >> 3) & 0x1F;
InMas[1] = ((OutMas[0] & 0x07) << 2) | ((OutMas[1] >> 6) & 0x03);
InMas[2] = (OutMas[1] >> 1) & 0x1F;
InMas[3] = ((OutMas[1] & 0x01) << 4) | ((OutMas[2] >> 4) & 0x0F);
InMas[4] = 0;
InMas[5] = (OutMas[3] >> 2) & 0x1F;
InMas[6] = ((OutMas[3(исправлено)] & 0x03) << 3) | ((OutMas[4] >> 5) & 0x07);
InMas[7] = OutMas[4] & 0x1F;

Полный разбор в прицепе

b857_18.04.2012_EXELAB.rU.tgz - 11111

-----
127.0.0.1, sweet 127.0.0.1


| Сообщение посчитали полезным: Hellspawn, neomant, SReg, _ruzmaz_, ressa

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

Создано: 18 апреля 2012 14:30
· Личное сообщение · #16

OKOB респект...

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....




Ранг: 315.1 (мудрец), 631thx
Активность: 0.30.33
Статус: Модератор
CrackLab

Создано: 18 апреля 2012 21:08 · Поправил: SReg
· Личное сообщение · #17

OKOB
Иногда неправильно считает.
Хотя вышеупомянутые ($90, $6E, $3B, $5C, $C3) посчитал верно.
Code:
  1. //***********************
  2. InMas:array[0..15]of byte=(
  3. $EF,$7C,$04,$6A,$64,$06,$61,$59,$0C,$F7,$9A,$C4,$DB,$E3,$D2,$89
  4. );
  5.  
  6. OutMas:array[0..25]of byte;
  7. //************************
  8. var
  9.  i,j:byte;
  10. begin
  11.   i:=0;j:=0;
  12.   while i < 25 do
  13.     begin
  14.       OutMas[i]   := (InMas[j] shr 3) and $1F;
  15.       OutMas[i+1] := ((InMas[j] and 7) shl 2) or ((InMas[j+1] shr 6) and 3);
  16.       OutMas[i+2] := (InMas[j+1] shr 1) and $1F;
  17.       OutMas[i+3] := ((InMas[j+1] and 1) shl 4) or ((InMas[j+2] shr 4) and $F);
  18.       OutMas[i+4] := 0;
  19.       OutMas[i+5] := (InMas[j+3] shr 2) and $1F;
  20.       OutMas[i+6] := ((InMas[j+1] and 3) shl 3) or ((InMas[j+4] shr 5) and 7);
  21.       OutMas[i+7] := InMas[j+4] and $1F;
  22.     inc(i,8);
  23.     inc(j,5);
  24.   end;
  25. // ;на выходе в OutMas (1D 1D 1E 00 00 1A 03 04 00 19 10 15 00 03 0F 17 13 0B 02 0D 00 18 06 12 11 04)
  26. //***********************
  27.  
  28. //; Проверка
  29. i:=0;j:=0;
  30.   while i < 16 do
  31.     begin
  32.       InMas[i] := (OutMas[j]   shl 3) or ((OutMas[j+1] shr 2) and 7);
  33.       InMas[i+1] := (OutMas[j+3] shr 4 and 1) or (((OutMas[j+1] shl 5) or (OutMas[j+2] and 31))shl 1);
  34.       InMas[i+2] := (OutMas[j+3] shl 4) or (OutMas[j+5] shr 1 and 15);
  35.       InMas[i+3] := (OutMas[j+6] shr 3 and 3) or (((OutMas[j+6] shl 5) or (OutMas[j+5] and 31))shl 2);
  36.       InMas[i+4] := (OutMas[j+6] shl 5) or (OutMas[j+7] and 31);
  37.     inc(i,5);
  38.     inc(j,8);
  39.   end;
  40. end;
  41. //Получаем в InMass (EF 7C 0D E8 64 06 61 51 8D F7 9A C4 DC 60 D2 89)
Через каждые 3 байта 2 байта неправильно подсчитаны
EF 7C 04 6A 64 06 61 59 0C F7 9A C4 DB E3 D2 89 <--- Вход
EF 7C 0D E8 64 06 61 51 8D F7 9A C4 DC 60 D2 89 <--- Выход




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

Создано: 18 апреля 2012 21:32
· Личное сообщение · #18

OutMas[i+6] := ((InMas[j+1] and 3) shl 3) or ((InMas[j+4] shr 5) and 7);

на

OutMas[i+6] := ((InMas[j+3] and 3) shl 3) or ((InMas[j+4] shr 5) and 7);

проблемма копипаста

-----
127.0.0.1, sweet 127.0.0.1




Ранг: 315.1 (мудрец), 631thx
Активность: 0.30.33
Статус: Модератор
CrackLab

Создано: 18 апреля 2012 22:23 · Поправил: SReg
· Личное сообщение · #19

OKOB
к сожалению эта правка проблему так и нерешило...(
вот накидал прожку, сорцы там же, посмотрите
Внизу Label - какбэ эталон. В нижнем Edit - то что после проверки.

d9e3_18.04.2012_EXELAB.rU.tgz - temp1.rar



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

Создано: 18 апреля 2012 22:45 · Поправил: Veliant
· Личное сообщение · #20

del. Категорически туплю..




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

Создано: 18 апреля 2012 23:26 · Поправил: OKOB
· Личное сообщение · #21

попробуй скобки добавить

Было:
InMas[i+2]:=(OutMas[j+3] shl 4) or (OutMas[j+5] shr 1 and 15);

Стало:
InMas[i+2]:=(OutMas[j+3] shl 4) or ((OutMas[j+5] shr 1) and 15);

и сравнивать нужно замаскировав старшие 3 бита в ИнМас

-----
127.0.0.1, sweet 127.0.0.1




Ранг: 315.1 (мудрец), 631thx
Активность: 0.30.33
Статус: Модератор
CrackLab

Создано: 19 апреля 2012 01:20 · Поправил: SReg
· Личное сообщение · #22

Veliant респектище! отимел алгос!
OKOB тоже огромное спасибо! Спасибо вам ребята!
кому интересно
Code:
  1. OutMas[ i ]   := (InMas[j] shr 3) and $1F;
  2. OutMas[i+1] := ((InMas[j] and 7) shl 2) or ((InMas[j+1] shr 6) and 3);
  3. OutMas[i+2] := (InMas[j+1] shr 1) and $1F;
  4. OutMas[i+3] := ((InMas[j+1] and 1) shl 4) or ((InMas[j+2] shr 4) and $F);
  5. OutMas[i+4] := ((InMas[j+2] and $0F) shl 1) or (InMas[j+3] shr 7);
  6. OutMas[i+5] := (InMas[j+3] shr 2) and $1F;
  7. OutMas[i+6] := ((InMas[j+3] and 3) shl 3) or ((InMas[j+4] shr 5) and 7);
  8. OutMas[i+7] := InMas[j+4] and $1F;





Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 19 апреля 2012 04:26 · Поправил: Isaev
· Личное сообщение · #23

SReg где юзалось то?


SReg пишет:
http://www.kolor.com/

спс, полезные вещи... пригодятся

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 315.1 (мудрец), 631thx
Активность: 0.30.33
Статус: Модератор
CrackLab

Создано: 19 апреля 2012 10:42
· Личное сообщение · #24

Isaev
http://www.kolor.com/
но это не все алго проверок




Ранг: 253.5 (наставник), 684thx
Активность: 0.260.25
Статус: Участник
radical

Создано: 11 мая 2014 18:12 · Поправил: DimitarSerg
· Личное сообщение · #25

Эх столько времени утекло.
Странно, что никто тогда не задетектил. Это обычный Base-32

Code:
  1. type
  2.   TEncodedQuantum = array[0..7] of Byte;
  3.   TDecodedQuantum = array[0..4] of Byte;
  4.   TDecodedQuantumArray = array of TDecodedQuantum;
  5.   PDecodedQuantumArray = ^TDecodedQuantumArray;
  6.  
  7. function EncodeQuantum(Q: TDecodedQuantum): TEncodedQuantum;
  8. begin
  9.   Result[0] := (Q[0] and $F8) shr 3;
  10.   Result[1] := ((Q[0] and $07) shl 2) or ((Q[1] and $FC) shr 6);
  11.   Result[2] := (Q[1] and $3E) shr 1;
  12.   Result[3] := ((Q[1] and $01) shl 4) or ((Q[2] and $F0) shr 4);
  13.   Result[4] := ((Q[2] and $0F) shl 1) or ((Q[3] and $80) shr 7);
  14.   Result[5] := ((Q[3] and $7C) shr 2);
  15.   Result[6] := ((Q[3] and $03) shl 3) or ((Q[4] and $E0) shr 5);
  16.   Result[7] := Q[4] and $1F
  17. end;
  18.  
  19. function DecodeQuantum (Q: TEncodedQuantum): TDecodedQuantum;
  20. begin
  21.   Result[0] := (Q[0] shl 3) or ((Q[1] and $1C) shr 2);
  22.   Result[1] := ((Q[1] and $03) shl 6) or (Q[2] shl 1) or ((Q[3] and $10) shr 4);
  23.   Result[2] := ((Q[3] and $0F) shl 4) or ((Q[4] and $1E) shr 1);
  24.   Result[3] := ((Q[4] and $01) shl 7) or (Q[5] shl 2) or ((Q[6] and $18) shr 3);
  25.   Result[4] := ((Q[6] and $07) shl 5) or (Q[7] and $1F);
  26. end;


--> Link <--

-----
ds





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

Создано: 11 мая 2014 23:44
· Личное сообщение · #26

DimitarSerg
Я как-то раз по незнанке так-же рипал код base16 или 32

-----
Research For Food




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

Создано: 12 мая 2014 01:39
· Личное сообщение · #27

daFix пишет:
Я как-то раз по незнанке так-же рипал код base16 или 32

слабак я RSA рипал

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

Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 12 мая 2014 07:32 · Поправил: ELF_7719116
· Личное сообщение · #28

подскажите заодно, пожалуйста, это самопалка или ... (там посередине условие, которое делит на две ветки, потом он обратно сходится в одну ветку, но суть не в этом), начало такое, остальное в аттаче:

Code:
  1. mov     ecx, [ebp+arg_0]
  2. mov     eax, [ecx]
  3. mov     ecx, [ecx+4]
  4. mov     edx, ecx
  5. shr     edx, 4
  6. xor     edx, eax
  7. and     edx, 0F0F0F0Fh
  8. xor     eax, edx
  9. shl     edx, 4
  10. xor     ecx, edx
  11. mov     edx, eax
  12. shr     edx, 10h
  13. xor     edx, ecx
  14. and     edx, 0FFFFh
  15. ...





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

Создано: 12 мая 2014 08:33
· Личное сообщение · #29

еще и декомпилером надо было показать, раз уж idb светить не хочешь
по константам в массиве dword_20D9998 и смотри
тем более есть плагины для иды который идентифицирует по константам алго




Ранг: 241.9 (наставник), 107thx
Активность: 0.140.01
Статус: Участник

Создано: 12 мая 2014 09:33
· Личное сообщение · #30

tihiy_grom пишет:
слабак я RSA рипал

А я только BlowFish. Ничего. Подрасту и рипну РСА
А по теме... Неплохо бы иметь коллекцию Асм рипов разных алго с константами.
Сократило бы время поиска. Криптосканеры частенько выдают кучу мусора или я не то юзаю.


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


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