![]() |
eXeL@B —› Программирование —› Не работает inject dll (исходник прилагается) |
. 1 . 2 . >> |
Посл.ответ | Сообщение |
|
Создано: 19 ноября 2012 18:11 · Личное сообщение · #1 |
|
Создано: 19 ноября 2012 19:44 · Личное сообщение · #2 |
|
Создано: 19 ноября 2012 20:36 · Поправил: CodeMaster · Личное сообщение · #3 Там косяк был что APIAdvancedHook.dll не переименовал в Project11.dll и забыл Unit13.pas выложить. А почему мои файлы не работают даже если имя длл Project11.dll? Ещё у меня когда используешь InjectDllEx и InjectDllExAlt вываливается exception. В отладчике выдает что Imagebase=nil поэтому не работает. ![]() |
|
Создано: 19 ноября 2012 20:41 · Поправил: SReg · Личное сообщение · #4 |
|
Создано: 21 ноября 2012 18:03 · Поправил: CodeMaster · Личное сообщение · #5 С этим разобрался,работает всё на примере MessageBoxA. Теперь я хочу сохранить в файл протокола на диске названия документов,которые открывает notepad.Но пишется какая-то белиберда: Code:
То ли функция не перехватывается,то ли неправильно записывает данные. ![]() |
|
Создано: 21 ноября 2012 18:41 · Поправил: F_a_u_s_t · Личное сообщение · #6 CodeMaster Ваш код это одна сплошная ошибка. Code:
1. Где проверка на валидность хендла: Code:
2. Какого уя вообще там делает функция открытия лог файла, а не в DLL_PROCESS_ATTACH с закрытием хендла в DLL_PROCESS_DETACH ? 3. В место CreateFile разве не нужно вызывать TrueCreateFile в detours покрайне мере так, как здесь не знаю, не пользовался. Add: И что это за неопределенность: Code:
Если что в блокноте CreateFileW используется. Ужос, воистину мастер кодер. ![]() |
|
Создано: 21 ноября 2012 19:17 · Личное сообщение · #7 В оригинале функция TrueCreateFile выглядела так: Code:
Но у нас она в процедуре HookProc должна быть var. Вот я и объединил два разных кода в один общий. NewCreateFile должна записать лог в файл,передать управление TrueCreateFile,которая в свою очередь возвращает result=CreateFileW ,т.е. оригинальную функцию или если быть точным pointer на неё Я так это понял. ![]() |
|
Создано: 21 ноября 2012 21:41 · Личное сообщение · #8 |
|
Создано: 21 ноября 2012 23:14 · Поправил: Alchemistry · Личное сообщение · #9 |
|
Создано: 26 ноября 2012 18:56 · Личное сообщение · #10 Накодил вот что: Code:
Перехват работает,но имена файлов в лог не пишутся. И ещё я не пойму как определить размер открываемого файла, нужно вызывать функцию определения хэндла для lpFileName ? Или забить вообще на CreateFileW и перехватывать NtCreateFile? ![]() |
|
Создано: 26 ноября 2012 23:24 · Личное сообщение · #11 CodeMaster CloseHandle кто делать будет? С чего ему писаться-то? Второй раз открыть не дает sharing violation, первый раз кеш не сбрасывается. Если и после этого не запишется, отлаживай всё подряд, что возвращает TrueCreateFileW, что WriteFile. По коду. Использовать WriteProcessMemory для своего процесса - зачем? Использовать VirtualProtectEx для своего процесса - опять же зачем? ВиртуалПротект надо отменять после записи, да и ставить EXECUTE_READWRITE - не очень хорошая идея. Главное: этот код не потокобезопасен. ![]() |
|
Создано: 27 ноября 2012 02:36 · Поправил: ajax · Личное сообщение · #12 |
|
Создано: 27 ноября 2012 13:05 · Личное сообщение · #13 CodeMaster Что то не заметно особых исправлений, как был образец для Хз даже что советовать, взять madcodehook или easyhook под delphi есть враппер или тот же afxcodehook. И что бы кто то помог, не плохо бы указывать где и какая ошибка, а это добавить проверки, в уме не очень компилировать, а delphi под рукой нет, кроме старенькой 2006. ![]() |
|
Создано: 28 ноября 2012 13:21 · Личное сообщение · #14 С перехватом вроде всё получилось,имена файлов пишет в протокол. Теперь пытаюсь скопировать содержимое перехваченного файла, но копируется файл в 400 раз большего размера и забитый нулями: Code:
Прошу агрессивно не реагировать на косяки,Delphi изучал на коленке. ![]() |
|
Создано: 28 ноября 2012 13:33 · Личное сообщение · #15 CodeMaster Причем тут дельфе если ты не знаешь даже элементарных основ, а уже поперся в какие-то перехваты, т.е. изменение работы тех самых основ, о которых ты не имеешь, судя по всему, никакого представления. Ты даже не знаешь, что переменные могут быть неинициализованны (прям как у тебя), и что GetFileSize в втором параметре это указатель на переменную, в которой возвращается старшее слово размера файла. У тебя что файл больше 4Gb? Тут же следом в пофигмоде у тебя какой-то паскалевский GetMem с этой переменной. В этой мерзости, что является твоим кодом, даже разбираться то лень. ![]() |
|
Создано: 28 ноября 2012 13:53 · Личное сообщение · #16 |
|
Создано: 28 ноября 2012 14:03 · Личное сообщение · #17 |
|
Создано: 28 ноября 2012 14:06 · Личное сообщение · #18 |
|
Создано: 28 ноября 2012 15:05 · Личное сообщение · #19 Dialog Как два пальца, ну вы поняли. Посоны делают так: Code:
Писал в браузе, но на вид рабочее. ![]() В том же изи хук практически так же. ![]() |
|
Создано: 28 ноября 2012 15:54 · Личное сообщение · #20 Dialog пишет: покажите как правильно и потокобезопасно на примере блокнота Вот целая статья, с примерами Detours и даже внимание, классического сплайсинга. http://www.codeproject.com/Articles/30140/API-Hooking-with-MS-Detours CodeMaster Начнем с того, что блокнот никогда не держит файл открытым, а читает он его через проекцию и точно также записывает обратно изменения. ![]() |
|
Создано: 28 ноября 2012 18:06 · Личное сообщение · #21 Да уж толстее троллинга не придумаешь,обосрать всех и выложить ссылку на другом языке программирования. Нах мне ваши примеры,если я свой код разрабатываю на основе совсем других сорцев? Перехват + инжект у меня работает замечательно, задача перехватить открытый Блокнотом файл и скопировать его на диск. Доработанный мною упрощенный вариант кода правильно определяет размер файла,создает его но там одни нули: Code:
![]() |
|
Создано: 28 ноября 2012 18:51 · Личное сообщение · #22 CodeMaster Простите мастер падавана, ну все же может изволите сделать одолжение и перечитать мои посты, даже укажу что именно.: F_a_u_s_t пишет: 1. Где проверка на валидность хендла: F_a_u_s_t пишет: 2. Какого уя вообще там делает функция открытия лог файла, а не в DLL_PROCESS_ATTACH с закрытием хендла в DLL_PROCESS_DETACH ? F_a_u_s_t пишет: взять madcodehook Вы уж простите великодушно что мне жаль времени описывать основы. Но madcodehook сполна это компенсирует, в если погуглить то можно найти ломаный компонент или исходники старых версий. ![]() |
|
Создано: 28 ноября 2012 19:11 · Личное сообщение · #23 F_a_u_s_t 1. Она как то влияет на работу кода? У меня работает и без проверки (в сорцах исходных её не было) 2. Вообще бред какой-то. DLL_PROCESS_ATTACH у нас инициализирует функцию установки хука и управление передается функции NewCreateFile. Верно? Как же будет работать код,если я его засуну после функции хука в раздел DLL_init? Более того,я пробовал так делать и ничего не работает. Я не пойму вы издеваетесь или правда не понимаете как это работает? Я нуб в кодинге и то уже вроде понял что все операции после хука надо прописывать в тело перехватываемой функции ![]() |
|
Создано: 28 ноября 2012 19:11 · Личное сообщение · #24 |
|
Создано: 28 ноября 2012 19:22 · Поправил: CodeMaster · Личное сообщение · #25 |
|
Создано: 28 ноября 2012 20:05 · Личное сообщение · #26 |
|
Создано: 28 ноября 2012 20:21 · Личное сообщение · #27 CodeMaster Достопочтеннейший гуру сплайса и маэстро Win32 API, не соблаговолите ли вы объяснить толстому троллю мне вот эти ваши илитные кодесы: Code:
интересует набор флагов, используемый вами, в частности dwShareMode, который вы выставили в 0 и dwCreationDisposition который вы выставили в OPEN_ALWAYS. Я бы дал ссылочку на матчасть, но вы же гуру, а я тролль, и вдобавок матчасть на мсдн о ужас не на дельфе, так что я скромно промолчу. Еще вот этот кусочек чистой магии тоже интересен (можно и вариант с FILE_BEGIN). ![]() Code:
Вы как бэ только что открыли(создали) фаел. И теперь значит мы двигаем маркер. Ок, зачем? ![]() |
|
Создано: 28 ноября 2012 20:30 · Личное сообщение · #28 Alchemistry пишет: Вы как бэ только что открыли(создали) фаел. И теперь значит мы двигаем маркер. Ок, зачем? Я могу вам объяснить задачу: 1. Внедряем длл в процесс Блокнот //сделано 2. Из длл запускаем код перехвата CreateFileW // сделано 3. Новая функция NewCreateFileW выполняет наш код: 3.1 Записывает имя открытого Блокнотом файла в лог // опционально,работает 3.2 Получает размер открытого файла по его хэндлу, устанавливает маркер на требуемое количество байт,выполняет чтение в буфер памяти // в процессе 3.3 Из буфера памяти пишем данные в новый файл на диске // в процессе 3.4 Закрываем хэндлы,освобождаем память,выводим сообщение об успешном завершении операции ![]() |
|
Создано: 28 ноября 2012 21:55 · Личное сообщение · #29 Ну вот хвала яицам,всё работает в упрощенном виде: Code:
когда Code:
Я не могу понять,как сделать чтобы хэндл перехватываемого файла получить. Иными словами,представьте что Блокнот открывает зашифрованный файл и расшифровывает его в памяти,а мы его оттуда хотим утащить. ![]() |
|
Создано: 28 ноября 2012 22:03 · Личное сообщение · #30 |
. 1 . 2 . >> |
![]() |
eXeL@B —› Программирование —› Не работает inject dll (исходник прилагается) |
Эта тема закрыта. Ответы больше не принимаются. |