TLS колбек

Тема в разделе "WASM.WIN32", создана пользователем doctor_Ice, 13 авг 2007.

  1. doctor_Ice

    doctor_Ice New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    845
    Адрес:
    Russia
    пишу пакер. подскажите откуда берет лодырь адрес тлс колбек. первый раз из хидера ясное дело а потом?

    энтри прячется здесь struct LDR_MODULE. а как насчет тлс колбека?
     
  2. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    Да где ж ещё кроме как в PEB и ему подобных структурах (там много полей с Tls). Копать доки и юзать отладчик с науным тыком ).
     
  3. doctor_Ice

    doctor_Ice New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    845
    Адрес:
    Russia
    ну спасибо =) в пеб не нашел я чет нифига. а реверсить и дебажить сча нет возможности =(
    кста а что это - KernelCallbackTable ?
     
  4. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    doctor_Ice
    Проще всего, как мне кажется, заменить тлс калбеки на свой и из него вызывать оригинальные.
     
  5. doctor_Ice

    doctor_Ice New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    845
    Адрес:
    Russia
    я нехочу аточнее даже немогу этого сделать (такой уж способ упаковки) единственное что я смогу кроме подмены колбек адреса в структуре лодыря это записать свой код в то же место где сидел оригинальный колбек.

    хм интересно другое...похоже форумчане считают эту инфу секретной ибо не может так быть чтоб никто незнал =)
     
  6. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    doctor_Ice
    Я знал, но забыл, ибо не особо пригодилось это знание:) Попробуй провести опыт - подмени указатель на калбэка после старта проги в заголовке, может он только там и хранится. Ещё можно попробовать в памяти поискать , куда этот адрес записался.

    Вполне нормально. Имхо даже если ты узнаешь где этот адрес хранится, то далеко не факт, что в разных виндах это будет одно и то же место.
     
  7. doctor_Ice

    doctor_Ice New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    845
    Адрес:
    Russia
    asd
    спасибо.
    наверно так и сделаю =) правда алгоритм усложняется потому как я точку входа тоже не меняю.
     
  8. PaCHER

    PaCHER New Member

    Публикаций:
    0
    Регистрация:
    25 мар 2006
    Сообщения:
    852
    Вобщем столкнулся с проблемой, по описанию:

    The prototype for a callback function (pointed to by a pointer of type PIMAGE_TLS_CALLBACK) has the same parameters as a DLL entry-point function:
    typedef VOID
    (NTAPI *PIMAGE_TLS_CALLBACK) (
    PVOID DllHandle,
    DWORD Reason,
    PVOID Reserved);

    The Reserved parameter should be left set to 0. The Reason parameter can take the following values:
    Setting Value Description
    DLL_PROCESS_ATTACH 1 New process has started, including the first thread.
    DLL_THREAD_ATTACH 2 New thread has been created (this notification sent for all but the first thread).- для всех кроме первого треда
    DLL_THREAD_DETACH 3 Thread is about to be terminated (this notificationsent for all but the first thread).- для всех кроме первого треда
    DLL_PROCESS_DETACH 0 Process is about to terminate, including the original
    thread.

    И того есть ехе у которого в импорте 2 длл, и 2 длл подгружаются динамически. По описанию при подгузке каждой DLL должен должен вызватся TLS_CALLBACK с Reason=DLL_PROCESS_ATTACH но в итоге TLS_CALLBACK вызывается всего 2 раза при старте процесса и при терминейте (соотвецтвенно Reason=1 и Reason=0 и DllHandle=00400000).

    Так всетаки каким образом происходит обращение к TLS_CALLBACK при подгрузке выгрузке Dll в процесс?
     
  9. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    Где такое написано? Всё правильно у тебя вызывается.
     
  10. doctor_Ice

    doctor_Ice New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    845
    Адрес:
    Russia
    Microsoft Portable Executable and
    Common Object File Format Specification
    Microsoft Corporation
    Revision 6.0 - February 1999

    The prototype for a callback function (pointed to by a pointer of type PIMAGE_TLS_CALLBACK)
    has the same parameters as a DLL entry-point function:
    typedef VOID
    (NTAPI *PIMAGE_TLS_CALLBACK) (
    PVOID DllHandle,
    DWORD Reason,
    PVOID Reserved
    );

    The Reserved parameter should be left set to 0. The Reason parameter can take the following
    values:
    Setting Value Description
    DLL_PROCESS_ATTACH 1 New process has started, including the first thread.
    DLL_THREAD_ATTACH 2 New thread has been created (this notification sent
    for all but the first thread).
    DLL_THREAD_DETACH 3 Thread is about to be terminated (this notification
    sent for all but the first thread).
    DLL_PROCESS_DETACH 0 Process is about to terminate, including the original
    thread.