<app> has encountered a problem and needs to close
От:
Аноним
Дата:
08.12.06 08:54
Оценка:
Здрайвствуйте!
Есть у меня dll, которая инжектится во все процессы и в том числе в rundll32.exe. Инъекция идёт с помощью SetWindowsHookEx(). Уже находясь внутри процесса, перехватываю в ней две API функции путём замены первых байт на push <addr> ret. Инъекция проходит успешно, хук тоже. Но когда я например открываю свойства экрана или свойства системы, или любой другой компонент панели управления, то вызывается rundll32.exe, далее окно отображается нормально, но когда его закрываешь, например нажав Отмена, — вылезает subj. А именно окно с сообщением типа <rundll32> has encountered a problem and needs to close и кнопками Send error report и Don't send.
Во всех остальных программах такого не наблюдается.
Перед установкой хука я даже останавливаю все потоки процесса, а после — возобновляю их.
Вопросы:
1. как мне может помочь инфа из этого окна с сообщением об ошибке, в частности инфа из файла d6cd_appcompat.txt, т.е. technical information, как ей воспользоваться, чтобы понять где ошибка?
2. вообще кто сталкивался, скажите в чём может быть дело?
Re: <app> has encountered a problem and needs to close
Re[2]: <app> has encountered a problem and needs to close
От:
Аноним
Дата:
08.12.06 16:42
Оценка:
Здравствуйте, Аноним, Вы писали:
Ещё дополнение:
Некоторые другие программы тоже падают с аналогичной ошибкой, но самое интересное — они падают именно во время закрытия. Исключение — Outlook Express, он падает при нажатии Send/Recieve, причём падает молча, без каких либо сообщений об ошибках.
Забыл сказать, я перехватываю следующие 4 функции: send(), WSASend(), recv(), WSARecv() из WS2_32.DLL.
Система XP SP2.
Мучая код, заметил такую штуку: если не вызывать функции работы с адресной книгой (Windows Address Book), то никаких падений не происходит, отсюда делаю вывод, что кривой код именно здесь. Суть этого кода в том, чтобы имея email получить display name. Вот эта функция:
Очень срочно нужно! Помогите кто знает, хоть предположения, где может быть грабля...
Re[3]: <app> has encountered a problem and needs to close
От:
Аноним
Дата:
08.12.06 17:00
Оценка:
Здравствуйте, Аноним, Вы писали:
Ещё заметил, что программы падают всегда с одной и той же ошибкой Access violation, read address at 608A2A3B — адрес тоже всегда один и тот же. Можно ли как-нибудь посмотреть, кто обращается к этому адресу и в каком модуле этот адрес, не используя тяжёлых средств вроде SoftICE ?
Re[4]: <app> has encountered a problem and needs to close
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Аноним, Вы писали:
А>Ещё заметил, что программы падают всегда с одной и той же ошибкой Access violation, read address at 608A2A3B — адрес тоже всегда один и тот же. Можно ли как-нибудь посмотреть, кто обращается к этому адресу и в каком модуле этот адрес, не используя тяжёлых средств вроде SoftICE ?
убери патчинг, пронаблюдай падения. Если исчезнут — методом исключения проверь какой перехват приводит к падению. Запусти OE под отладчиком, с бряком на любое исключение. Может быть твой AV это кульминация целой серии резрушающих событий. Сделай логгинг вызовов своих перехватов. Ну и в заключение — покажи код патча. Мож он у тя кривой и падение происходит потому что ты все время ставишь-снимаешь патч (сталкивался и с таким)
kalsarikännit
Re[5]: <app> has encountered a problem and needs to close
От:
Аноним
Дата:
08.12.06 20:46
Оценка:
Здравствуйте, IID, Вы писали:
IID>Здравствуйте, Аноним, Вы писали:
А>>Здравствуйте, Аноним, Вы писали:
А>>Ещё заметил, что программы падают всегда с одной и той же ошибкой Access violation, read address at 608A2A3B — адрес тоже всегда один и тот же. Можно ли как-нибудь посмотреть, кто обращается к этому адресу и в каком модуле этот адрес, не используя тяжёлых средств вроде SoftICE ?
IID>убери патчинг, пронаблюдай падения. Если исчезнут — методом исключения проверь какой перехват приводит к падению. Запусти OE под отладчиком, с бряком на любое исключение. Может быть твой AV это кульминация целой серии резрушающих событий. Сделай логгинг вызовов своих перехватов. Ну и в заключение — покажи код патча. Мож он у тя кривой и падение происходит потому что ты все время ставишь-снимаешь патч (сталкивался и с таким)
Нечто похожее наблюдал с инжектом на вин98.
Re[5]: <app> has encountered a problem and needs to close
От:
Аноним
Дата:
11.12.06 07:22
Оценка:
Здравствуйте, IID, Вы писали:
IID>Здравствуйте, Аноним, Вы писали:
А>>Здравствуйте, Аноним, Вы писали:
А>>Ещё заметил, что программы падают всегда с одной и той же ошибкой Access violation, read address at 608A2A3B — адрес тоже всегда один и тот же. Можно ли как-нибудь посмотреть, кто обращается к этому адресу и в каком модуле этот адрес, не используя тяжёлых средств вроде SoftICE ?
IID>убери патчинг, пронаблюдай падения. Если исчезнут — методом исключения проверь какой перехват приводит к падению. Запусти OE под отладчиком, с бряком на любое исключение. Может быть твой AV это кульминация целой серии резрушающих событий. Сделай логгинг вызовов своих перехватов. Ну и в заключение — покажи код патча. Мож он у тя кривой и падение происходит потому что ты все время ставишь-снимаешь патч (сталкивался и с таким)
Антивируса никакого не установленно.
Да, я довольно часто ставлю-снимаю патч, а именно внутри вызова моей new-функции, перед вызовом оригинальной функции — снимаю (возвращаю старые байты), после — устанавливаю патч опять. Возможно это и есть слабое место. Код патча такой:
bool UninstallHook (LPVOID origfaddr, CODE* poldcode)
{
__try
{
SIZE_T szt;
if (! WriteProcessMemory (
GetCurrentProcess (), // process to write to
origfaddr, // entry point of function to write to
poldcode, // original function codesizeof (CODE), // number of bytes to write
&szt)) // number of bytes written
{
return false;
}
}
__except (EXCEPTION_EXECUTE_HANDLER)
{
#ifdef _DEBUG
MessageBox (0, "exception in UninstallHook", "error", MB_ICONEXCLAMATION);
#endif
return false;
}
return true;
}
bool
InstallHook (LPVOID origfaddr, LPVOID newfaddr, CODE* poldcode)
{
__try
{
// reading original bytes
CODE code = *(CODE*) origfaddr;
// saving original bytes
*poldcode = code;
// preparing new code
//
// push newfaddr
// ret
//
code.push = 0x68;
code.push_arg = (DWORD) newfaddr;
code.ret = 0xC3;
// writting new code to beginning of original function
SIZE_T szt;
if (! WriteProcessMemory (
GetCurrentProcess (), // process to write to
origfaddr, // function entry point to write to
&code, // new function startup codesizeof (CODE), // number of bytes to write
&szt)) // number of bytes written
{
return false;
}
}
__except (EXCEPTION_EXECUTE_HANDLER)
{
#ifdef _DEBUG
MessageBox (0, "exception in InstallHook", "error", MB_ICONEXCLAMATION);
#endif
return false;
}
return true;
}
Re[6]: <app> has encountered a problem and needs to close
А>Да, я довольно часто ставлю-снимаю патч, а именно внутри вызова моей new-функции, перед вызовом оригинальной функции — снимаю (возвращаю старые байты), после — устанавливаю патч опять. Возможно это и есть слабое место. Код патча такой: