Что бы это могло значить?

Тема в разделе "WASM.RESEARCH", создана пользователем darkside83, 24 июл 2008.

  1. darkside83

    darkside83 New Member

    Публикаций:
    0
    Регистрация:
    24 июл 2008
    Сообщения:
    4
    Дизассемблирую одну длл-ку, наткнулся на странный код.
    Куча бессмысленных команд, такое ощущение, что хотели специально запутать.

    В эту функцию попадаю сразу из DllEntryPoint, прыжок сразу первой инструкцией
    ..............................................
    sub_1004A479 proc near

    var_14= dword ptr -14h
    var_10= dword ptr -10h

    call $+5
    ...............................................
    из нее сразу сюда и здесь творится самое непонятное
    ...............................................
    loc_1004A47E:
    pop eax
    push ebx
    push ecx
    push esi
    push edi
    push eax
    mov ebx, [esp+14h+var_14] ; зачем это?
    sub ebx, offset loc_1004A47E
    mov eax, 5A05h
    push eax
    push 4
    push 1000h
    push eax
    push 0
    mov eax, offset VirtualAlloc ; и здесь тоже странность
    mov eax, [eax+ebx] ; хотя скорее всего вызывается все-таки VirtualAlloc
    call eax
    pop ecx
    mov edx, offset loc_10043C27
    add edx, ebx
    push edx
    push ebx
    push eax
    mov edi, eax
    mov esi, edx
    cld
    rep movsb
    mov ecx, offset loc_10043BB3
    add ecx, ebx
    call ecx
    pop eax
    mov ebx, [esp+10h+var_10]
    push 8000h
    push 0
    push eax
    mov eax, offset VirtualFree ; тоже самое ????
    mov eax, [eax+ebx]
    call eax
    pop ecx
    pop eax
    pop ebx
    sub ebx, 5
    mov byte ptr [ebx], 0B8h
    inc ebx
    mov [ebx], eax
    add ebx, 4
    mov byte ptr [ebx], 0C3h
    or ecx, ecx
    jz short loc_1004A534

    Кто-нибудь может прокомментировать этот кусок кода?
    Я использую IDA Pro 5.2, более старые версии иды и виндасм даже не смогли дизассемблировать этот файл.
    Ида просто вылетала, а виндасм не дизассемблировал до конца.
     
  2. Com[e]r

    Com[e]r Com[e]r

    Публикаций:
    0
    Регистрация:
    20 апр 2007
    Сообщения:
    2.624
    Адрес:
    ого..
    на морфинг кода похоже. точнее: очень похоже.
    vx ведь реверсишь? тогда это - обычная защита.
     
  3. dermatolog

    dermatolog Member

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    406
    Адрес:
    Екатеринбург
    Код (Text):
    1. mov     eax, offset VirtualAlloc ; и здесь тоже странность
    2. mov     eax, [eax+ebx] ; хотя скорее всего вызывается все-таки VirtualAlloc
    Скорее всего в EAX получается содержимое какой-то ячейки из IAT (упоминание VirtualAlloc и VirtualFree сделано только для того чтобы сбить с толку исследователя). Протрассируй call eax пошагово - и увидишь какие API вызываются на самом деле
     
  4. Magnum

    Magnum New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2007
    Сообщения:
    925
    имхо, если морфинг, то достаточно некачественный.

    Блоки одни и те же используются.

    Скорее всего просто сокрытие вызова реальных апишек, как сказанно выше.
     
  5. dermatolog

    dermatolog Member

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    406
    Адрес:
    Екатеринбург
    Нее - морфинга тут вообще нет.
     
  6. Magnum

    Magnum New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2007
    Сообщения:
    925
    имхо, а зачем тогда скрывать вызов, если апишка все-равно в импорте есть?
     
  7. Com[e]r

    Com[e]r Com[e]r

    Публикаций:
    0
    Регистрация:
    20 апр 2007
    Сообщения:
    2.624
    Адрес:
    ого..
    хзхз, может быть запутать "несильные" сканеры, а туповато получилось - по причине "несильности" автора в вопросе.. =\
     
  8. darkside83

    darkside83 New Member

    Публикаций:
    0
    Регистрация:
    24 июл 2008
    Сообщения:
    4
    Оттрасировать пока не могу, потому-что у меня только эта длл, но
    похоже все таки вызываются именно эти функции

    Вот код
    mov eax, 5A05h
    push eax
    push 4
    push 1000h
    push eax
    push 0
    mov eax, offset VirtualAlloc ; здесь намучено, я думаю для осложнения дебага
    mov eax, [eax+ebx] ; на самом деле достаточно call VirtualAlloc
    call eax

    функция явно прописана в импорте

    это ее определение
    LPVOID __stdcall VirtualAlloc(LPVOID lpAddress, SIZE_T dwSize, DWORD flAllocationType, DWORD flProtect) extrn VirtualAlloc:dword

    получается, что lpAdress = 0, dwSize = 5a05h (размер выделяемой памяти 23045 в десятичной), flAllocationType = 1000h (тип выделения - MEM_COMMIT, если посмотреть по MSDN), а flProtect = 4 (тип доступа - PAGE_READWRITE, опять же по MSDN)

    получается что сначала выделяется память, потом выполяется это код

    pop ecx
    mov edx, offset loc_10043C27
    add edx, ebx
    push edx
    push ebx
    push eax
    mov edi, eax
    mov esi, edx
    cld
    rep movsb
    mov ecx, offset loc_10043BB3
    add ecx, ebx
    call ecx ; здесь явно вызывается какая-то функция
    pop eax

    а потом память освобождается
    кода в дллке вообще кот наплакал, в основном забита какими-то непонятными данными.
    может это зашифрованные куски кода, которые потом как-то распаковываются.

    копаю дальше
     
  9. darkside83

    darkside83 New Member

    Публикаций:
    0
    Регистрация:
    24 июл 2008
    Сообщения:
    4
    да и еще дллка основана на трояне, антивирь на нее ругается
     
  10. deadly83

    deadly83 New Member

    Публикаций:
    0
    Регистрация:
    25 янв 2007
    Сообщения:
    71
    ниче это не значит ида просто неправильно распознала call, у меня например бывало что лишняя строчка кода добавляет вот такую проблему при распознавании имен подпрограмм т.е пишется например вместо call exitProcess точно такая же хрень call $+5
     
  11. darkside83

    darkside83 New Member

    Публикаций:
    0
    Регистрация:
    24 июл 2008
    Сообщения:
    4
    Еще в длл часто упоминается слово FlexLm
     
  12. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    deadly83 А вот и нефига это просто вычисляется значение eip