Передача параметров в поток(CreateRemoteThread)

Тема в разделе "WASM.BEGINNERS", создана пользователем _nic, 16 окт 2010.

  1. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    > Если честно по моему, ваш код не полон.Что такое GetModuleBase и xGetProcAddress ?
    зачем мне постить полностью готовый код? копи-паст я не особо одобряю.
    > инлайновое что-то как я понимаю)
    зачем инлайн? просто функции в модуле, первая разбирает PEB, вторая - таблицу экспорта.
    обе функции легко находятся в примерах.
     
  2. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    Я не вижу где вы получаете их адреса. И копируете в ап процесса цели. Предположил что инлайн, а как у вас сделано?
     
  3. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    > Предположил что инлайн, а как у вас сделано?
    Код (Text):
    1. ULONG shellcodeStub(ShellCodeParams *params)
    2. {
    3. ...
    4. }
    5.  
    6. void *GetModuleBase(WCHAR *name)
    7. {
    8. ...
    9. }
    10.  
    11. void *xGetProcAddress(UCHAR *modBase, PSTR procName)
    12. {
    13. ...
    14. }
    15.  
    16. void __declspec(naked) shellcodeStubEnd(){ }
    order.txt:
    Код (Text):
    1. shellcodeStub@4
    2. GetModuleBase@4
    3. xGetProcAddress@8
    4. shellcodeStubEnd@0
     
  4. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    n0name
    не понятно как они попадают в ап процесса цели. Видимо компилятор все-таки делает их инлайн, ведь они не большие по размеру.
     
  5. Flint_ta

    Flint_ta New Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    312
    Как правило данные записывают после кода.
    К примеру: код записали начиная с адреса 00900000h, размер кода был равен 1000h, значит данные следует писать по адресу 00901000h. Для того чтобы к ним мог обратится удаленный поток, определяем через дельта смещение адрес начала кода (= 00900000h) Т.к. заранее известно, что данные на 1000h дальше, вычисляем их виртуальный адрес относительно полученного: 00900000h + 1000h = 00901000h.

    Можно ставьте ebfeh (зацикливание) вначале своего потока и аттачтесь к процессу.
    Либо cch (int3), если в системе установлен отладчик по умолчанию.

    Также можно для начала отладить код в своем адресном пространстве.
     
  6. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    > не понятно как они попадают в ап процесса цели. Видимо компилятор все-таки делает их инлайн, ведь они не большие по размеру.
    они располагаются между shellcodeStub и shellcodeStubEnd.
    размер пересылаемых данных shellcodeStubEnd - shellcodeStub.
    очевидно что при этом захватываются нужные мне функции.
    > Как правило данные записывает после кода.
    как бы можно использовать параметр потока, и без всяких дельта-смещений.
     
  7. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.315
    тема адская какая-то... даже ничего не напишешь, кроме:
    господа, откройте для себя yasm... у него легкая интеграция со студией, удобный и приятный синтаксис, он отлично подходит для программирования встраиваемых в чужие процессы кодов)))
     
  8. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    n0name
    а, точно, не внимательно посмотрел на код. А order.txt обязательно надо, чтобы последовательность сохранилась?

    Rel
    А чем плох си? :derisive:
     
  9. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.315
    да ничем не плох, просто может по специфике внедряемых кодов некоторые вещи на си не так очевидны... например, если необходимо внедрить код из 32-битного процесса в 64-битный на 64-битной системе (или наоборот), то надо как-то держать в 32-битном PE-файле 64-битный код (и наоборот), а программировать опкодами довольно муторно на мой взгляд...
     
  10. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    > А order.txt обязательно надо, чтобы последовательность сохранилась?
    для студийного линкера - угу, для остальных - хз.
     
  11. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    Гм даже если в потоке весь код закоментирован то если поставить в него точку останова(даже если данные не писать),то цель крашится,без точки останова не крашится.Вставляю бесконечный цикл,и судя по нагрузке на процессор все ОК.Но стит внутрь этого цикла вставить точку останова так сразу креш.Почему так?