не получается запустить svchost

Тема в разделе "WASM.BEGINNERS", создана пользователем berni, 18 июл 2009.

  1. berni

    berni New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2009
    Сообщения:
    17
    Код (Text):
    1. CreateProcess(NULL, "svchost.exe", NULL, NULL, 0, CREATE_SUSPENDED, NULL, NULL, &si, &pi);
    2.     c.instr_push_loadlibrary_arg = 0x68; //машинный код инструкции push
    3.     c.loadlibrary_arg = (DWORD)((BYTE*)p_code + offsetof(CodeInject, libraryname));
    4.     c.instr_call_loadlibrary = 0x15ff; //машинный код инструкции call
    5.     c.adr_from_call_loadlibrary = (DWORD)(p_code + offsetof(CodeInject, addr_loadlibrary));
    6.     c.instr_push_exitthread_arg = 0x68;
    7.     c.exitthread_arg = 0;
    8.     c.instr_call_exitthread = 0x15ff;
    9.     c.adr_from_call_exitthread =    (DWORD)(p_code + offsetof(CodeInject, addr_exitthread));
    10.     c.addr_loadlibrary = (DWORD)GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA");
    11.     c.addr_exitthread = (DWORD)GetProcAddress(GetModuleHandle("kernel32.dll"),"ExitThread");
    12.     strcpy((char*)c.libraryname, "c:\\windows\\system32\\liba.dll" );
    13.  
    14.         ctx.ContextFlags = CONTEXT_FULL;
    15.         GetThreadContext(pi.hThread, &ctx);
    16.  
    17.         code_address = VirtualAllocEx(pi.hProcess, NULL, sizeof(c), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
    18.  
    19.         WriteProcessMemory(pi.hProcess, code_address, &cmds, sizeof(c), NULL);
    20.  
    21.         ctx.Eip = (unsigned long)code_address;
    22.         SetThreadContext(pi.hThread, &ctx);
    23.  
    24.         ResumeThread(pi.hThread);
    после этого процес тупо завершается.
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Выложите экзе.
     
  3. berni

    berni New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2009
    Сообщения:
    17
    екзе не оптимизированный, с CRT
     
  4. berni

    berni New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2009
    Сообщения:
    17
    не приаттачился :dntknw:
    http://rapidshare.com/files/257277133/test.exe.html
     
  5. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    berni
    Слишком много ошибок. До работоспособного кода ещё очень далеко. Ошибки начиная с того, что для c.loadlibrary_arg высчитывается бред (но падение произойдёт уже буквально на следующем после этого push'а call'е, т.к. для c.adr_from_call_loadlibrary тоже бред высчитывается), как минимум потому, что адрес кода в целевом процессе на момент расчёта ещё не известен, и заканчивая тем, что процесс ещё даже не закончил инициализацию. Так что LoadLibrary всё равно не прокатила бы. Ну и в конце концов, насколько можно судить по коду, предполагалось (именно предполагалось, т.к. реально внедряется ерунда всякая), что будет вызвана ExitThread в единственном потоке процесса. Так чего вообще можно было ожидать?
     
  6. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    [iшаман мод] скорее всего dll создает поток :derisive:[/шаман мод]
     
  7. berni

    berni New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2009
    Сообщения:
    17
    структура инжекта рабочая.
    после того как вызвана библиотека, сработает длл_процесс_аттач, оттуда вызовутся другие треды, поэтому этот тред можно спокойно убить.
     
  8. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    berni
    с другими процессами работает? вообще вы точно копируете имя функции в чужое АП?
     
  9. berni

    berni New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2009
    Сообщения:
    17
    SPA
    с другими да, к примеру сплайся createprocess получаю pid после создания процесса и потом делаю инжект, все хорошо.
    но вот при creeateprocess с CREATE_SUSPENDED нифига не пашет :dntknw: точнее судя про processexplorer руссиновича, длл инжектится в процесс, но он все равно завершается.
     
  10. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    SPA
    Сам об этом подумал, когда отправил пост, но новый пост, только чтобы исправить, создавать не хотелось.
    berni
    Ну и что? Одной из сотни ошибок меньше. Как я уже сказал, параметр для LoadLibrary рассчитан неверно. Аргумент для косвенного вызова (FF 15) рассчитан соответственно также неверно. А был бы верно рассчитан, LoadLibrary всё равно бы не сработала, т.к. svchost ещё не закончил инициализацию. Ему нужно дать отработать самому хотя бы до точки входа.
     
  11. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    berni
    хм, у меня есть мнение что твой тред не успевает создаться, поставь Sleep(10000); перед завершением потока, и проверь. Возможно конечно я ошибаюсь, но по виду именно в этом проблема.
     
  12. berni

    berni New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2009
    Сообщения:
    17
    l_inc
    почему не верно? после иннициализации это выглядит так
    Код (Text):
    1.     push adr_library_name
    2.     call dword ptr [loadlibrary_adr]
    3.     push exit_thread_arg
    4.     call dword ptr [exit_thread_adr]
    а что инициализация? если мы переключаем процесс на наш код, который загрузит длл, а та уже все остальные dllки?

    SPA
    пробовал, не помогло
     
  13. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    berni
    После инициализации это не выглядит так. Потому что на этапе заполнения этих полей ни адрес loadlibrary_adr в целевом процессе не известен, ни адрес adr_library_name, ни exit_thread_adr. Рассчитать эти адреса появляется возможность только после вызова VirtualAllocEx.
    Да... кстати, правильно SPA говорит. Задержка всё равно понадобится.
     
  14. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Хотя нет... гоню... не понадобится. Перепутал с сишным return из основного потока. Там же по return ExitProcess вызывается, а не ExitThread.