Где сохранить строку полученную в рез. выполнения инжектированного код

Тема в разделе "WASM.BEGINNERS", создана пользователем _sheva740, 12 июл 2007.

  1. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    Пишу функцию:
    Запускаю svchost.exe.
    Вношу код в svchost.exe.
    Выполняю действия и получаю IP DNS - сервера.
    Выполняю ExitThread().

    Вопрос: как передать строку с IP в основную программу?
    (чтобы не через файл, не через реестр).
     
  2. Stub

    Stub New Member

    Публикаций:
    0
    Регистрация:
    11 май 2004
    Сообщения:
    311
    Адрес:
    Siberia
    через маппинг?
     
  3. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    а где адрес map-области из инжектированной процедуры сохранить, чтоб потом его прочитать?
     
  4. Stub

    Stub New Member

    Публикаций:
    0
    Регистрация:
    11 май 2004
    Сообщения:
    311
    Адрес:
    Siberia
    HANDLE CreateFileMapping(
    HANDLE hFile,
    LPSECURITY_ATTRIBUTES lpAttributes,
    DWORD flProtect,
    DWORD dwMaximumSizeHigh,
    DWORD dwMaximumSizeLow,
    LPCTSTR lpName <---- используй имя
    );
     
  5. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    значит
    1. зарезервировать область памяти
    2. заполнить ее строкой
    3. мэпировать эту область с заранее известным именем
    4. ExitThread().
    5. из основной программы обратиться по имени к этой области памяти
    6. унмапить тоже по имени?

    я правильно понял?
     
  6. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    а как в основной программе обратиться по имени ( lpName ) к этой области памяти?
     
  7. n0name

    n0name New Member

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

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    спасибо за подсказку!
     
  9. Stub

    Stub New Member

    Публикаций:
    0
    Регистрация:
    11 май 2004
    Сообщения:
    311
    Адрес:
    Siberia
    Смотри MSDN и все вопросы отпадут сами собой
     
  10. W4FhLF

    W4FhLF New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2006
    Сообщения:
    1.050
    Помимо маппинга Атомы or WM_COPYDATA(на низком уровне работает на основе маппинга, но если отправляешь данные оконному приложению, то очень удобно)
     
  11. dimonn

    dimonn New Member

    Публикаций:
    0
    Регистрация:
    5 мар 2006
    Сообщения:
    38
    Адрес:
    Sim-City
    Код (Text):
    1. ATOM GlobalAddAtom(
    2.     LPCTSTR lpString
    3. );
    Код (Text):
    1. UINT GlobalGetAtomName(
    2.     ATOM nAtom,
    3.     LPTSTR lpBuffer,
    4.     int nSize
    5. );
     
  12. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    _sheva740
    Наверное лучше наоборот - в основной программе CreateFileMapping, а в инжекте OpenFileMapping

    W4FhLF, dimonn
    Для извлечения строки из атома нужно еще само значение nAtom как-то передать
     
  13. roman_pro

    roman_pro New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    291
    Решение через одно место: конвертнуть IP адрес в DWORD и вернуть в качестве кода возврата из потока (ExitThread). В основной проге вызвать GetExitCodeThread и из DWORD'а сделать обратно строку. Минусы очевидны - использование кода возврата не по назначению. Ну и самый главный - грядёт IPv6 где этот трюк уже не получится.
     
  14. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    roman_pro
    дак получилось таки! спасибо!
    Вот примерно так ...
    Код (Text):
    1. ;---------------------------------------------
    2. ; Основная программа
    3. .
    4. .
    5. .
    6. invoke  VirtualProtectEx, hProcess, ...
    7. invoke  WriteProcessMemory, hProcess, ...
    8. invoke  ResumeThread, hThread
    9. invoke    WaitForSingleObject,hThread,...
    10.  
    11. invoke    GetExitCodeThread,hThread, dwModuleBase
    12. lea eax, [dwModuleBase]
    13. int 3
    14. ; тут в EAX - адрес полученного DWORD - а из
    15. ; контекста инжектированного кода.
    16. ; По [EAX] таки лежит - ..aa aa !!!
    17. invoke    CloseHandle,hThread
    18.  
    19. ;---------------------------------------------
    20. ; Кода, который вносится в память svchost.exe
    21. .
    22. .
    23. .
    24. exit:   push    0aaaah
    25.     callx   _ExitThread
    разрешите вопрос еще!?

    как, или чем - "конвертнуть IP адрес в DWORD" ??
     
  15. n0name

    n0name New Member

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

    если вручную, то это тоже не так сложно.
     
  16. Mental_Mirror

    Mental_Mirror New Member

    Публикаций:
    0
    Регистрация:
    7 май 2007
    Сообщения:
    431
    inet_addr
     
  17. Mental_Mirror

    Mental_Mirror New Member

    Публикаций:
    0
    Регистрация:
    7 май 2007
    Сообщения:
    431
    n0name
    =) опоздал
     
  18. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    n0name
    Mental_Mirror
    та да! спасибо!