Помогите с шеллкодом

Тема в разделе "WASM.BEGINNERS", создана пользователем GeNeZiS, 23 янв 2008.

  1. GeNeZiS

    GeNeZiS New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    135
    Доброго времени суток, уважаемые.

    Столкнулся со следующей проблемой:
    пытаюсь проинжектиться в уже запущенный процесс (с помощью NtMapViewOfSection), получаю контекст потока и т.д. Мне необходимо вызвать в чужом процессе CreateThread с моим кодом и вернуть управление процессу, т.е. восстановить контекст. Каким образом должен выглядеть данный шеллкод для корректного создания потока и восстановления контекста? (синтаксис masm)

    Благодарю за внимание.
     
  2. xh4ck

    xh4ck New Member

    Публикаций:
    0
    Регистрация:
    6 мар 2005
    Сообщения:
    60
    Адрес:
    Russia
    опять шелкодесы кампелируем...)
     
  3. Magnum

    Magnum New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2007
    Сообщения:
    925
    Вопрос неточный. Тебе нужно, чтобы мы для тебя шелкоднаписали?

    Ты пиши свой кодес, если что-то не получается - задавай конкретные вопросы.
     
  4. GeNeZiS

    GeNeZiS New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    135
    итак, имеется код (синтаксис masm):
    Код (Text):
    1. ...
    2. delta       equ ebx - main_thread
    3. ...
    4.  
    5. main_thread proc
    6.                  call   $ + 5
    7.         pop ebx
    8.         sub     ebx, $ - main_thread - 1
    9.  
    10.         lea eax, [delta + offset szUser32]
    11.         push    eax
    12.         call    dword ptr [delta + _LoadLibraryA]
    13.        
    14.         push    0
    15.         lea eax, [delta + offset szTitle]
    16.         push    eax
    17.         lea eax, [delta + offset szMessage]
    18.         push    eax    
    19.         push    0
    20.         call    dword ptr [delta + _MessageBoxA]
    21.        
    22.         ret
    23. main_thread endp
    24.  
    25.  
    26. InjectShell:
    27.    pushfd
    28.    pushad
    29.    call $+5
    30.    pop ebx
    31.    sub ebx,$-main_thread-1
    32.    lea edi,.address_return+delta
    33.    lea eax,code_shell_replaced+delta
    34.    lea edx,main_thread+delta
    35.  
    36.    push  0
    37.    push  0
    38.    push  esp
    39.    push  edx
    40.    push  0
    41.    push  0
    42.    call    dword  ptr [delta + _CreateThread]
    43.  
    44.    push  eax
    45.    call   dword  ptr  [delta + _CloseHandle]
    46.  
    47.    popad
    48.    popfd
    49.    db 68h          
    50. .address_return:
    51.   dd 4
    52.    ret
    53. InjectShell_size =  $ - InjectShell
    54.  
    55. code_to_call_shell:
    56.    db 0xE9
    57. .correct_call:
    58.    dd 4          
    59. code_to_call_shell_size = $ - code_to_call_shell
    60.  
    61. code_shell_replaced dd code_to_call_shell_size
    62. old_protect     dd 1
    63.  
    64.  
    65. inject     proc dwPID : DWORD
    66. ...
    67.  
    68.                 invoke   VirtualAlloc,0,InjectSize,MEM_COMMIT+MEM_RESERVE,PAGE_READWRITE
    69.                 mov hMem,eax
    70.  
    71.         invoke OpenProcess,...
    72. ...
    73.                  invoke    find_thread_in_process, dwPID
    74. ...
    75.                  invoke    suspend_all_threads, dwPID
    76. ...
    77.         invoke   GetThreadContext,...
    78.                  mov edx,code_shell_replaced-main_thread
    79.                  add edx,hMem
    80.                  invoke  ReadProcessMemory,hProcess,context.regEip,edx,code_to_call_shell_size,0
    81.                  mov eax,old_protect-main_thread
    82.                  add eax,hMem
    83.                  invoke   VirtualProtectEx,hProcess,context.regEip,code_to_call_shell_size,PAGE_WRITECOPY,eax
    84.                  mov eax,InjectShell.address_return-main_thread
    85.                  add eax,hMem
    86.         mov ecx,context.regEip
    87.         mov eax,ecx
    88.           ; пишем в шеллкод-файл
    89.                 invoke  WriteFile,...
    90. ...
    91.                  invoke  CreateFileMapping,...
    92. ...
    93.                  invoke   ZwMapViewOfSection,....
    94. ...
    95.                  mov edx,code_to_call_shell.correct_call-main_thread
    96.         add edx,hMem     
    97.         mov eax,ViewBase
    98.         add eax,InjectShell-main_thread
    99.         mov ecx,context.regEip     
    100.         add ecx,5
    101.         sub eax,ecx
    102.         mov edx,eax
    103.         mov edx,code_to_call_shell-main_thread
    104.         add edx,hMem
    105.  
    106.                  invoke   ZwWriteVirtualMemory,hProcess,context.regEip,edx,code_to_call_shell_size,0
    107.                  invoke   VirtualProtectEx,hProcess,context.regEip,code_to_call_shell_size,\
    108.                             PAGE_EXECUTE_READWRITE,addr temp
    109.                  mov edx,code_shell_replaced-main_thread
    110.                  add edx,hMem
    111.                  invoke   WriteProcessMemory,hProcess,context.regEip,edx,code_to_call_shell_size,0
    112.         mov eax,old_protect-main_thread
    113.         add eax,hMem
    114.         VirtualProtectEx,hProcess,context.regEip,code_to_call_shell_size,\
    115.                             eax,addr temp
    116. ...
    117.                  invoke   ZwUnmapViewOfSection,...
    118. ...
    не работает... (( может быть я не правильно восстанавливаю контекст? будьте любезны, направте на путь истинный
     
  5. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    GeNeZiS
    По частям его собирай
     
  6. GeNeZiS

    GeNeZiS New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    135
    Mikl__
    а можно поподробнее?
     
  7. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    GeNeZiS
    Собираешь обычный PE-файл пытаешься вывести через call dword ptr [delta+LoadLibraryA]/call dword ptr [delta+MessageBoxA] MessageBox, получилось? переходишь к следующему пункту - CreateThread/СloseHandle, после которых выводишь MessageBox и так далее пока не соберешь весь шелл