пишу пакер. подскажите откуда берет лодырь адрес тлс колбек. первый раз из хидера ясное дело а потом? энтри прячется здесь struct LDR_MODULE. а как насчет тлс колбека?
Да где ж ещё кроме как в PEB и ему подобных структурах (там много полей с Tls). Копать доки и юзать отладчик с науным тыком ).
ну спасибо =) в пеб не нашел я чет нифига. а реверсить и дебажить сча нет возможности =( кста а что это - KernelCallbackTable ?
doctor_Ice Проще всего, как мне кажется, заменить тлс калбеки на свой и из него вызывать оригинальные.
я нехочу аточнее даже немогу этого сделать (такой уж способ упаковки) единственное что я смогу кроме подмены колбек адреса в структуре лодыря это записать свой код в то же место где сидел оригинальный колбек. хм интересно другое...похоже форумчане считают эту инфу секретной ибо не может так быть чтоб никто незнал =)
doctor_Ice Я знал, но забыл, ибо не особо пригодилось это знание Попробуй провести опыт - подмени указатель на калбэка после старта проги в заголовке, может он только там и хранится. Ещё можно попробовать в памяти поискать , куда этот адрес записался. Вполне нормально. Имхо даже если ты узнаешь где этот адрес хранится, то далеко не факт, что в разных виндах это будет одно и то же место.
asd спасибо. наверно так и сделаю =) правда алгоритм усложняется потому как я точку входа тоже не меняю.
Вобщем столкнулся с проблемой, по описанию: 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 в процесс?
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.