Сейчас на форуме: _MBK_ (+7 невидимых) |
![]() |
eXeL@B —› Основной форум —› Отлов модификации пациентом |
. 1 . 2 . >> |
Посл.ответ | Сообщение |
|
Создано: 27 июня 2007 10:01 · Личное сообщение · #1 |
|
Создано: 27 июня 2007 10:06 · Личное сообщение · #2 |
|
Создано: 27 июня 2007 10:13 · Личное сообщение · #3 |
|
Создано: 27 июня 2007 10:40 · Личное сообщение · #4 Рихтер В DLL, может быть лишь одна функция входа/выхода Система вызывает ее в некоторых ситуациях (о чем речь еще впереди) сугубо в информационных целях, и обычно она используется ULL для инициализации и очистки ресурсов в конкретных процессах или потоках Если Вашей DLL подобные уведомления не нужны, Вы не обязаны реализовывать эту функцию. Пример — DLL, содержащая только ресурсы. Но если же уведомления необходимы, функция должна выглядеть так: BOOL WINAPI DllMain(HINSTANCE hinstDll, DWORD fdwReason, PVOID fImpLoad) { switch (fdwReason) { case DLL_PROCESS_ATTACH: // DLL проецируется на адресное пространство процесса break; case DLL_THREAD_ATTACH: // создается поток break; case DLL_THREAD_DETACH: // поток корректно завершается break; case DLL PROCESS_DETACH // DLL отключается от адресного пространства процесса break; } return(TRUE); // используется только для DLL_PROCESS_ATTACH } NOTE: При вызове DllMain надо учитывать регистр букв Многие случайно вызывают DLLMain, и это вполне объяснимо- термин DLL обычно пишется заглавными буквами. Если Вы назовете функцию входа/выхода не DllMain, а как-то иначе . (пусть даже только один символ будет набран в другом регистре), компиляция и компоновка Вашего кода пройдет без проблем, но система проигнорирует такую функцию входа/выхода, и Ваша DLL никогда не будет инициализирована. Параметр hinstDll содержит описатель экземпляра DLL, Как и hinstExe функции (w)WinMain, это значение — виртуальный адрес проекции файла DLL на адресное пространство процесса. Обычно последнее значение сохраняется в глобальной переменной, чтобы его можно было использовать и при вызовах функций, загружающих ресурсы (типа DialogBox или LoadString), Последний параметр, fImpLoad, отличен от 0, если DLL загружена неявно, и равен 0, если она загружена явно. Параметр fdwReason сообщает о причине, по которой система вызвала эту функцию. Он принимает одно из четырех значений: DLL_PROCESS_ATTACH, DLL_PROCESS_DETACH, DLL_THREAD_ATTACH или DLL_THREAD_DETACH. Мы рассмотрим их в следующих разделах. NOTE: Не забывайте, что DLL инициализируют себя, используя функции DllMain. К моменту выполнения Вашей DllMain другие DLL в том же адресном пространстве могут не успеть выполнить свои функции DllMain, т. e. они окажутся неинициализированными. Поэтому Вы должны избегать обращений из DllMain к функциям, импортируемым из других DLL. Кроме того, не вызывайте из DllMain функции LoadLibrary(Ex) и FreeLibrary, так как это может привести к взаимной блокировке. ![]() |
|
Создано: 27 июня 2007 10:45 · Личное сообщение · #5 |
|
Создано: 27 июня 2007 10:47 · Личное сообщение · #6 |
|
Создано: 27 июня 2007 10:49 · Личное сообщение · #7 Medsft пишет: подробнее если можно.... и как отловить? Пытался так не получилось ставим бряк на load dll d ольке после первого срабатывания ставим бряк на секцию text и фиг пишет примерно следующее: R6034 An application has made an attemp to load the C runtime library incorrectly. Для начала отбрось самый простой случай. В настройках кроме бряка на load dll поставь system breakpoint. Сразу как открываешь жертву глянь на карту модулей (Alt+E). Если там уже есть подозрительные библиотеки от жертвы, значит они прошли инициализацию (то есть выполнился код по EntryPoint). Проверь этот код. ----- Всем привет, я вернулся ![]() |
|
Создано: 27 июня 2007 11:00 · Личное сообщение · #8 |
|
Создано: 27 июня 2007 11:02 · Личное сообщение · #9 |
|
Создано: 27 июня 2007 11:05 · Личное сообщение · #10 |
|
Создано: 27 июня 2007 11:07 · Личное сообщение · #11 |
|
Создано: 27 июня 2007 11:30 · Личное сообщение · #12 Ara а ты в computerbild иногда поглядываешь? (там иногда хорошие шароварки попадаются от всяких бедных кодеров которые в силу отсутствия денег придумывают а не приобретают защиту) так в последнем номере прога есть для коррекции изображения с web-камеры. Icelot и как же нам брякнутся в эту dll-ку из под родительского процесса а не через loaddll.exe? ![]() |
|
Создано: 27 июня 2007 11:33 · Поправил: Ara · Личное сообщение · #13 |
|
Создано: 27 июня 2007 11:36 · Личное сообщение · #14 |
|
Создано: 27 июня 2007 11:37 · Личное сообщение · #15 |
|
Создано: 27 июня 2007 11:40 · Личное сообщение · #16 |
|
Создано: 27 июня 2007 11:43 · Поправил: Ara · Личное сообщение · #17 |
|
Создано: 27 июня 2007 11:47 · Личное сообщение · #18 |
|
Создано: 27 июня 2007 11:48 · Личное сообщение · #19 |
|
Создано: 27 июня 2007 12:06 · Личное сообщение · #20 Ara пишет: Ну хардваре бряк на измененные байты попробуй поставь и перезапусти прогу - не подходит jkhan пишет: Ты случайно сегменту кода атрибуты на RWE не поменял? Смени на RE =) у туда менял и сюда. Flint пишет: В kernel32.dll поставь бряки на LoadLibraryA LoadLibraryExA LoadLibraryExW LoadLibraryW Поставить то можно но эта самая dll-ка заугружается в пространство уж не знаю как но до того как оля начинает ловить "break on new module dll" ![]() |
|
Создано: 27 июня 2007 12:10 · Личное сообщение · #21 |
|
Создано: 27 июня 2007 12:20 · Личное сообщение · #22 |
|
Создано: 27 июня 2007 13:39 · Личное сообщение · #23 |
|
Создано: 27 июня 2007 13:55 · Личное сообщение · #24 |
|
Создано: 27 июня 2007 14:22 · Личное сообщение · #25 |
|
Создано: 27 июня 2007 14:48 · Поправил: Hellspawn · Личное сообщение · #26 |
|
Создано: 27 июня 2007 15:09 · Личное сообщение · #27 |
|
Создано: 27 июня 2007 15:20 · Личное сообщение · #28 |
|
Создано: 27 июня 2007 16:09 · Личное сообщение · #29 Кароче. Я изменил тут 0041295B JE 00412BBF на jmp прога вначале ругалась "An application has made an attempt to load the C runtime library incorrectly. Please contact the application's support team for more information." теперь че-то перестала. Кстати если ее переименовать то она тож ругается ![]() При этом в переименованной/исправленной проге 3 раза (в нормальной 2 раза) загружается либа C:\ProgramFiles\VideoChimeraHome\Bins\Win32Release\MSVCR80.dll с именем MSVCR8_1 (в нормальной 2 раза MSVCP80). Так вот она загружается с Base = 00340000 и MessageBox идет оттуда. Буду копать дальше P.S ты где код правил? ----- Nulla aetas ad discendum sera ![]() |
|
Создано: 27 июня 2007 16:33 · Личное сообщение · #30 |
. 1 . 2 . >> |
![]() |
eXeL@B —› Основной форум —› Отлов модификации пациентом |