Странности c GetThreadContext

Тема в разделе "WASM.WIN32", создана пользователем Voodoo, 24 июл 2005.

Статус темы:
Закрыта.
  1. Voodoo

    Voodoo New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2003
    Сообщения:
    297
    Адрес:
    Новосибирск
    Имеется код:


    Код (Text):
    1. format  PE console
    2. include '%inc%/win32a.inc'
    3.  
    4. entry   start
    5.  
    6. start:
    7.         int3 (1)
    8.         mov     [s.cb], sizeof.STARTUPINFO
    9.         invoke  CreateProcess, 0, cmd, 0, 0, 0, CREATE_SUSPENDED, 0, 0, s, pi
    10.  
    11.         mov     [ctx.ContextFlags], CONTEXT_FULL
    12.         invoke  GetThreadContext, [pi.hThread], ctx
    13.         mov     eax, [ctx.regEip]
    14.         mov     [retaddr], eax
    15.  
    16.         invoke  VirtualAllocEx, [pi.hProcess], 0, CODE_SIZE, MEM_COMMIT, PAGE_EXECUTE_READWRITE
    17.         mov     [v], eax
    18.  
    19.         invoke  WriteProcessMemory, [pi.hProcess], [v], code_start, CODE_SIZE, 0
    20.  
    21.         mov     eax, [v]
    22.         mov     [ctx.regEip], eax
    23.         invoke  SetThreadContext, [pi.hThread], ctx
    24.         invoke  ResumeThread, [pi.hThread]
    25.  
    26.         invoke  WaitForSingleObject, [pi.hProcess], -1
    27.         invoke  ExitProcess, 0
    28.  
    29.         v       dd ?
    30.         cmd     db 'cmd.exe', 0
    31.         pi      PROCESS_INFORMATION <0>
    32.         s       STARTUPINFO <0>
    33.         ctx     CONTEXT <0>
    34.  
    35. code_start:
    36.         call    .delta
    37.       .delta:
    38.         pop     ebx
    39.  
    40.         int3 (2)
    41.  
    42.         jmp     dword [ebx+retaddr-code_start]
    43.         retaddr dd ?
    44.       CODE_SIZE = $-code_start
    45.  
    46. data import
    47.      library kernel32, 'kernel32.dll'
    48.      include '%inc%/APIA/kernel32.inc'
    49. end  data                            




    Должен записывать кусок кода в создаваемый процесс. После перехода управления на этот код, дочерний процесс по идее должен упасть. Win2k SP3. При выполнении без дебаггера или под Olly - этого не происходит. GetThreadContext сообщает ERROR_NO_ACCESS. При запуске под сайсом с i3here on попадаем в сайс на ОБА int3 - т.е. внедренный код выполняется. Меня добило то, что если закомментировать int3 #1, то сайс не всплывает вовсе - хотя должен. Кто может - поясните, в чем ошибка.
     
  2. alpet

    alpet Александр

    Публикаций:
    0
    Регистрация:
    21 сен 2004
    Сообщения:
    1.221
    Адрес:
    Russia
    1. Процесс вообще запускается CreateProcess?

    2. STARTUPINFO инициируется полностью (хотябы нуликами), или только размер задается?
     
  3. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Выровняй (align 4) структуру ctx CONTEXT <0>
     
  4. Voodoo

    Voodoo New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2003
    Сообщения:
    297
    Адрес:
    Новосибирск
    thnx. теперь все работает. Но нельзя ли поподробнее, почему так? и еще объясни plz, если не трудно, фишку с сайсом.
     
  5. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Код выполняется т.к. WriteProcessMemory, SetThreadContext нормально отрабатывают! соотв. ловится и второй int3 :) сайсом не пользуюсь, чтобы сказать почему не всплывает, а структуры похоже надо все выравнивать если в них предполагается запись из ядра
     
  6. Voodoo

    Voodoo New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2003
    Сообщения:
    297
    Адрес:
    Новосибирск
    Спасибо.
     
Статус темы:
Закрыта.