Пару вопросов о слайсинге api .

Тема в разделе "WASM.BEGINNERS", создана пользователем Hmm, 14 апр 2007.

  1. Hmm

    Hmm New Member

    Публикаций:
    0
    Регистрация:
    22 ноя 2006
    Сообщения:
    162
    Азм дошел таки до слайсинга . Не прошло и полугода.
    Проработал несколько статей . Сегодня , главным образом интересует вот это место из Ms-Rem'кой (долгая ему память).
    "Перехват API функций в Windows NT"
    http://www.wasm.ru/article.php?article=apihook_1

    Function InjectDll(Process: dword; ModulePath: PChar): boolean;
    ..............
    //инициализация внедряемого кода:
    Inject.PushCommand := $68;
    inject.PushArgument := code + $1E;
    inject.CallCommand := $15FF;
    inject.CallAddr := code + $16;
    inject.PushExitThread := $68;
    inject.ExitThreadArg := 0;
    inject.CallExitThread := $15FF;
    inject.CallExitThreadAddr := code + $1A;
    hKernel32 := GetModuleHandle('kernel32.dll');
    inject.AddrLoadLibrary := GetProcAddress(hKernel32, 'LoadLibraryA');
    inject.AddrExitThread := GetProcAddress(hKernel32, 'ExitThread');
    lstrcpy(@inject.LibraryName, ModulePath);
    ...................

    Т е в статье описывается внедрение dll . Однако , вместо самой
    dll , создается , инициализируется , внедряется в процесс и запускается через CreateRemoteThread сия странная структура
    inject . Похожая техника есм и в иной рукописи , хотя выглядит
    зело иначе. Что сие за чудо есть ?
    Сам предполагаю только , что наблюдаю технику "отображения" dll в процесс . Или я ошибаюсь? А если это так , то посредством
    чего можно приобщиться к этой тайне ?

    Иначе сделано у тов. Great.
    http://forum.antichat.ru/threadedpost275447.html#post275447
    Модуль действительно копируется постранично в процесс .
    Хотя и по непонятным адресам .
    "...мы просто аккуратно страничку за страничкой перенем ВЕСЬ наш EXE-модуль в чужой процесс, вместе с MZ и PE-заголовками, кодом, данными, импортом и прочим. Чтобы быть уверенным, что по нашим адресам в чужом адресном пространстве ничего нет, мы поставим себе базу повыше - где-нибудь около 29A00000."

    Может , сам Great , либо , кто понимающий , объяснит .
    Зачем сначала очищать память выше 29A00000 , а потом резервировать ее там под процесс .
    Если можно вызвать VirtualAllocEx со вторым параметром(lpAddress) равным NULL и тогда : "If lpAddress is NULL, the function determines where to allocate the region. ". Т е не придется заботится об адресе загрузки .
    Грядущие вопросы опишу в последствии .
    Засим остаюсь с вами .
     
  2. HoBleen

    HoBleen New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    77
    Смысл в том, что, если мы перенесёмся в адресное пространство другого процесса, то все глобальные переменные окажутся том же месте, где и были в оригинальном процессе. А если аллокировать произвольный участок памяти, то после переноса по нужным адресам уже не будут находиться наши переменные! Так что либо код должен быть либо полностью базонезависимым, либо иметь возможность перенастраиваться на другие адреса.
     
  3. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    а это странная структура делает в другом процессе не что иное как loadlibrary(ModulePath);, что подгружает длл.

    насчет 29A00000. есть такая вирмейкерская тима 29А... а есле серъезно то по этому адресу может быть что угодно, мэппинг, резервированная память... поэтому лучче все освободить и занять заново. но будь осторожен. может получится что в том куске памяти чтото выполняется, тогда уронишь приложение своими попытками освободить память
     
  4. Hmm

    Hmm New Member

    Публикаций:
    0
    Регистрация:
    22 ноя 2006
    Сообщения:
    162
    Пасибствую HooBleen . Картина c адресом загрузки немного проясняется .
    2 FreeManCPM . Можно подумать , если мы затрем "что угодно, мэппинг, резервированная память" .Хотя бы и не трогая кода . Тогда процесс будет дальше спокойно работать?

    Те как я и предполагал , посредством ст-ры inject отображается библиотека в процесс .
    Но главного я пока не осмыслю . Что же всетаки обозначают эти загадочные :
    $68,$1E,$15FF,$16,$68,15FF; ?
    И почему они в сумме производят
    Loadlibrary(ModulePath)
    И где про это почитать ...
    Абыдно ,что у самого ms-rem про это нет ни звука. Типа так и надо .

    P.S.: Не по теме вопрос.
    Что такое оверлеи ?Хитрое слово будоражит
    мой рассудок. Везде пишут , что это нечто живущее на задворках секций , а для чего они и почему ни слова.
     
  5. HoBleen

    HoBleen New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    77
    Не исключено, что будет =Р

    Ну так переведи хекс в команды и посмотри - получится код типа
    Код (Text):
    1. push offset LibName
    2. call [LoadLibraryA]
    3. push ExitThreadArg
    4. call [ExitThread]
    5.  
    6. LoadLibraryA dd ?
    7. ExitThread dd ?
    8. LibName db ?
     
  6. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    Hmm это опкоды команд. введи их в hiew и увидишь что это за команды.

    Оверлей - Часть файла, которая не грузится в память. Происходит это когда размер секции на диске больше размера секции в памяти.
     
  7. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Очищается для того,чтобы гарантированно там ничего не было. Вдруг там случайно чтото окажется)
    Резервировать для тех же целей. Потом постранично копируем свое тело по тем же виртуальным адресам, но в другом адресном пространстве.

    По-хорошему, надо собирать с фиксапами и если по тому адресу что-то лежит, выделить память по другому адресу и релоцировать свое тело.
     
  8. Hmm

    Hmm New Member

    Публикаций:
    0
    Регистрация:
    22 ноя 2006
    Сообщения:
    162
    Аа .. стало быть это нечто вроде шеллкодеса .
    А почему там значки $ стоят спереди ? Это в delphi так hex обозначается ?
    Категорический вам респект .
     
  9. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    да