Обратная функция

Тема в разделе "WASM.RESEARCH", создана пользователем b10t, 26 авг 2004.

  1. b10t

    b10t New Member

    Публикаций:
    0
    Регистрация:
    2 ноя 2003
    Сообщения:
    31
    Прива народ !



    Сижу тут ковыряю одну программку и натолкнулся на один интересный кусок кода :)) вот он :



    *********************************************************

    lea edi, ds:47E438h // Указатель на массив элементов так 1024 %))



    loc_4431FB:

    shr esi, 1

    jnb short loc_44320C

    xor eax, [edi]

    xor ebx, [edi+4]

    xor ecx, [edi+8]

    xor edx, [edi+0Ch]

    test esi, esi



    loc_44320C:

    lea edi, [edi+10h]

    jnz short loc_4431FB

    mov esi, [ebp+var_4]

    lea edi, ds:47E638h



    loc_44321A:

    shr esi, 1

    jnb short loc_44322B

    xor eax, [edi]

    xor ebx, [edi+4]

    xor ecx, [edi+8]

    xor edx, [edi+0Ch]

    test esi, esi



    loc_44322B:

    lea edi, [edi+10h]

    jnz short loc_44321A

    xor esi, esi

    xor edi, edi



    loc_443234:



    bt edx, 4

    rcl ecx, 4

    jnb short loc_44325D

    xor esi, eax

    xor edi, ebx



    loc_443241:



    rcr edx, 5

    bt ebx, 1Bh

    rcr eax, 4

    rcl ebx, 5

    jnb short loc_443234

    xor eax, 800008h

    xor ebx, 80000300h

    jmp short loc_443234



    *********************************************************



    Так вот сам вопрос, возможно ли зная выходные данные (нужны только edi, esi) данного куска кода написать функцию которая получает исходные данные (нужны только edi, esi).



    Если нет, то почему %)



    Сенкс.
     
  2. Chingachguk

    Chingachguk New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2002
    Сообщения:
    340
    Не edi, а 4 dd по нему ?
     
  3. b10t

    b10t New Member

    Публикаций:
    0
    Регистрация:
    2 ноя 2003
    Сообщения:
    31
    Да, 4 dd по нему.

    Я просто не весь кусок кода привел, edi и esi ссылаются на одну переменную длинной 64 бита. (edi на первую часть, esi на вторую).
     
  4. Chingachguk

    Chingachguk New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2002
    Сообщения:
    340
    А как насчет lea edi,[edi+10h] ? Следующие 4 dd ?
     
  5. b10t

    b10t New Member

    Публикаций:
    0
    Регистрация:
    2 ноя 2003
    Сообщения:
    31
    да, там 64 битное число, я писал выше.
     
  6. b10t

    b10t New Member

    Публикаций:
    0
    Регистрация:
    2 ноя 2003
    Сообщения:
    31
    Все наверное посмотрели данный пост, думаю что код интересный, но вопрос остался открытым. Возможно или нет ? Как я посмотрел, думаю что НЕТ. Хотя разработчики конечно написали генератор данного куска кода, складывается впечетление что данная функция необратима, из этого выход только один. Или байты править, или брутофорс (что есть очень долго).



    Сенкс.
     
  7. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    b10t

    Ты показал достаточно кода?

    Откуда переход на loc_443241?

    Куда уводит loc_44325D?
     
  8. b10t

    b10t New Member

    Публикаций:
    0
    Регистрация:
    2 ноя 2003
    Сообщения:
    31
    q_q



    Я думаю что кода достаточно, на всякий момент показываю более:



    .text:004431E7 add esp, 0Ch

    .text:004431EA xor eax, eax

    .text:004431EC xor ebx, ebx

    .text:004431EE xor ecx, ecx

    .text:004431F0 xor edx, edx



    перед данным куском кода я всё сделал, то есть код полностью обратим :)



    Сенкс.
     
  9. b10t

    b10t New Member

    Публикаций:
    0
    Регистрация:
    2 ноя 2003
    Сообщения:
    31
    q_q



    Да, кусок ниже показывать нет смысла, там все обратимо.



    Сенкс.
     
  10. b10t

    b10t New Member

    Публикаций:
    0
    Регистрация:
    2 ноя 2003
    Сообщения:
    31
    Конечно могу привезти весь кусок кода.
     
  11. b10t

    b10t New Member

    Публикаций:
    0
    Регистрация:
    2 ноя 2003
    Сообщения:
    31
    а переход на loc_443241 идет (полный почти текст):



    .text:004431EA xor eax, eax

    .text:004431EC xor ebx, ebx

    .text:004431EE xor ecx, ecx

    .text:004431F0 xor edx, edx

    .text:004431F2 mov esi, [ebp+var_8]

    .text:004431F5 lea edi, ds:47E438h

    .text:004431FB

    .text:004431FB loc_4431FB: ; CODE XREF: sub_4431D0+3Fj

    .text:004431FB shr esi, 1

    .text:004431FD jnb short loc_44320C

    .text:004431FF xor eax, [edi]

    .text:00443201 xor ebx, [edi+4]

    .text:00443204 xor ecx, [edi+8]

    .text:00443207 xor edx, [edi+0Ch]

    .text:0044320A test esi, esi

    .text:0044320C

    .text:0044320C loc_44320C: ; CODE XREF: sub_4431D0+2Dj

    .text:0044320C lea edi, [edi+10h]

    .text:0044320F jnz short loc_4431FB

    .text:00443211 mov esi, [ebp+var_4]

    .text:00443214 lea edi, ds:47E638h

    .text:0044321A

    .text:0044321A loc_44321A: ; CODE XREF: sub_4431D0+5Ej

    .text:0044321A shr esi, 1

    .text:0044321C jnb short loc_44322B

    .text:0044321E xor eax, [edi]

    .text:00443220 xor ebx, [edi+4]

    .text:00443223 xor ecx, [edi+8]

    .text:00443226 xor edx, [edi+0Ch]

    .text:00443229 test esi, esi

    .text:0044322B

    .text:0044322B loc_44322B: ; CODE XREF: sub_4431D0+4Cj

    .text:0044322B lea edi, [edi+10h]

    .text:0044322E jnz short loc_44321A

    .text:00443230 xor esi, esi

    .text:00443232 xor edi, edi

    .text:00443234

    .text:00443234 loc_443234: ; CODE XREF: sub_4431D0+7Ej

    .text:00443234 ; sub_4431D0+8Bj

    .text:00443234 bt edx, 4

    .text:00443238 rcl ecx, 4

    .text:0044323B jnb short loc_44325D

    .text:0044323D xor esi, eax

    .text:0044323F xor edi, ebx

    .text:00443241

    .text:00443241 loc_443241: ; CODE XREF: sub_4431D0+8Fj

    .text:00443241 ; sub_4431D0+93j

    .text:00443241 rcr edx, 5

    .text:00443244 bt ebx, 1Bh

    .text:00443248 rcr eax, 4

    .text:0044324B rcl ebx, 5

    .text:0044324E jnb short loc_443234

    .text:00443250 xor eax, 800008h

    .text:00443255 xor ebx, 80000300h

    .text:0044325B jmp short loc_443234

    .text:0044325D ; ---------------------------------------------------------------------- -----

    .text:0044325D

    .text:0044325D loc_44325D: ; CODE XREF: sub_4431D0+6Bj

    .text:0044325D test edx, edx

    .text:0044325F jnz short loc_443241

    .text:00443261 test ecx, ecx

    .text:00443263 jnz short loc_443241
     
  12. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Накати на нее криптосечер. Если алгоритм известный, то по таблице должен найти. Вроде где-то в инструментах был, если мой побоишься пускать :)

    [​IMG] _925312770__cryptosearcher.exe
     
  13. b10t

    b10t New Member

    Публикаций:
    0
    Регистрация:
    2 ноя 2003
    Сообщения:
    31
    valterg

    Непобоялся :)) накатил твой, не помогло :dntknw:(



    Всем:

    Так обратима или НЕТ !?



    Сенкс.
     
  14. Funbit

    Funbit Member

    Публикаций:
    0
    Регистрация:
    13 апр 2003
    Сообщения:
    92
    Адрес:
    Russia
    из конечных esi и edi, т.е. те значения, которые будут в этих регистрах, когда eip будет равен 443265, можно получить входные eax, ebx, ecx, edx., т.е. когда eip равен 443230.



    а дальше, если у тебя есть возможность менять 2 локальных параметра var_4 и var_8, а также значения элементов массивов 47E438h и 47E638h, все легко обращается



    вообще, я бы хотел еще более точнее услышать, что нужно, а то все если да если. объясни, что ты можешь менять