Помогите распознать алгоритм

Тема в разделе "WASM.RESEARCH", создана пользователем Broken Sword, 13 июл 2006.

  1. Broken Sword

    Broken Sword Robert

    Публикаций:
    0
    Регистрация:
    30 авг 2002
    Сообщения:
    433
    Код (Text):
    1. .text:00005360 arg_0           = dword ptr  4
    2. .text:00005360 arg_4           = dword ptr  8
    3. .text:00005360 arg_8           = dword ptr  0Ch
    4. .text:00005360
    5. .text:00005360                 mov     eax, [esp+arg_4]
    6. .text:00005364                 mov     edx, [esp+arg_8]
    7. .text:00005368                 mov     ecx, eax
    8. .text:0000536A                 push    ebx
    9. .text:0000536B                 shr     eax, 10h
    10. .text:0000536E                 mov     ebx, eax
    11. .text:00005370                 mov     eax, edx
    12. .text:00005372                 push    ebp
    13. .text:00005373                 push    esi
    14. .text:00005374                 shr     edx, 10h
    15. .text:00005377                 and     eax, 0FFFFh
    16. .text:0000537C                 mov     esi, edx
    17. .text:0000537E                 mov     edx, eax
    18. .text:00005380                 imul    eax, ebx
    19. .text:00005383                 push    edi
    20. .text:00005384                 mov     edi, eax
    21. .text:00005386                 and     ecx, 0FFFFh
    22. .text:0000538C                 mov     eax, esi
    23. .text:0000538E                 imul    eax, ecx
    24. .text:00005391                 imul    edx, ecx
    25. .text:00005394                 mov     ebp, [esp+10h+arg_0]
    26. .text:00005398                 add     eax, edi
    27. .text:0000539A                 cmp     eax, edi
    28. .text:0000539C                 mov     edi, eax
    29. .text:0000539E                 sbb     ecx, ecx
    30. .text:000053A0                 mov     [ebp+0], edx
    31. .text:000053A3                 neg     ecx
    32. .text:000053A5                 shl     eax, 10h
    33. .text:000053A8                 shl     ecx, 10h
    34. .text:000053AB                 shr     edi, 10h
    35. .text:000053AE                 add     edx, eax
    36. .text:000053B0                 add     ecx, edi
    37. .text:000053B2                 cmp     edx, eax
    38. .text:000053B4                 mov     [ebp+0], edx
    39. .text:000053B7                 jnb     short loc_53BA
    40. .text:000053B9                 inc     ecx
    41. .text:000053BA
    42. .text:000053BA loc_53BA:                               ; CODE XREF: sub_5360+57j
    43. .text:000053BA                 imul    esi, ebx
    44. .text:000053BD                 add     esi, ecx
    45. .text:000053BF                 pop     edi
    46. .text:000053C0                 mov     [ebp+4], esi
    47. .text:000053C3                 pop     esi
    48. .text:000053C4                 pop     ebp
    49. .text:000053C5                 xor     eax, eax
    50. .text:000053C7                 pop     ebx
    51. .text:000053C8                 retn
    52. .text:000053C8 sub_5360        endp
     
  2. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    умножение arg_4*arg_8 ?
     
  3. Broken Sword

    Broken Sword Robert

    Публикаций:
    0
    Регистрация:
    30 авг 2002
    Сообщения:
    433
    хе... действительно.
     
  4. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Broken_Sword
    Я уж подумал, что ты новый цикл "мелких задач для крупных мозгов" начал в помощь начинающим обфускаторам и их оппонентам ;))
     
  5. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    если принять что 0 <= (arg_4 и arg_8) < 10000h, то умножение.
     
  6. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    green
    Нормальное умножение беззнаковых dword*dword -> qword без ограничений на диапазон
     
  7. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Broken Sword
    Насколько я понимаю, некоторые инструкции при обфускации заменяются на совокупности других инструкций, равнозначных но не очевидных сразу и тем самым достигается сложность анализа и выполняемость машиной ничем не отличаемого от оригинала.

    Вот к примеру команда1 обфускатором переваривается в:

    mov reg1,reg2
    команды n штук
    mov reg1,reg2
    команды n штук

    Если и этот код подать через обфускатор но mov reg1, reg2 заменить на простейшие:
    push reg1
    pop reg2

    то получим:

    push reg1
    pop reg2
    команды n штук
    push reg1
    pop reg2
    команды n штук

    Но ведь все равно какаять закономерность в таком коде есть, к примеру анализируя обфусцированный код, можем увидеть, что:

    <опкод push> reg1
    <опкод pop> reg2

    Я думаю раз есть закономерность, то можно и деобфусцировать, то бишь опираясь на <опкод push >,<опкод pop>.

    Наверное можно написать сканер поиска закономерностей по опкодам, а по закономерностями думаю будет легче деобфусцировать.

    (Прав ли я) ? (нет, то почему) : (иначе насколько?)
     
  8. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    да, в самом деле, обычное умножение
     
  9. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    EvilsInterrupt
    Задача обфускации усложнить анализ кода. Наличие закономерностей разумеется облегчает анализ, но от этого он не становится тривиальным (если конечно речь не идет о повторяющихся 1:1 кусках кода). Broken Sword привел наглядный пример - если ты с таким алгоритмом еще не встречался, то по первым признакам (shr и shl на 10h, 4-е imul'а, sbb и jnb для учета переносов) сразу возникает подозрение на обычное умножение, но для 100% ответа все-таки нужно все аккуратно проанализировать, чтобы убедиться в отсутствии невидимых на первый взгляд фишек