|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
15.11.2017, 18:10 | #1 |
Пользователь
Регистрация: 07.08.2016
Сообщений: 16
|
[Help] Подмена данных о GPU с помощью MS Detours 3.0
Привет всем,
Пытаюсь подменить информацию о видеокарте (производитель, имя и т.д.), но столкнулся с проблемой. Данные о видеокарте (GPU) в большинстве случаев тянутся посредством Win32_VideoController. Вот как то так: Код:
Используя MS Detours 3.0 пробовал перехватить IEnumWbemClassObject::CreateInstanc eEnum следующим образом: Попытка получить указатель: Код:
Код:
Код:
А по идее это все должно было работать так, что при захвате CreateInstanceEnum у меня бы появлялся MessageBox. Возможно есть другие варианты решения подмены информаци о GPU, но я их не знаю, поэтому пытаюсь сделать так. В общем помогите чем могёте Как это дело перехватить? |
15.11.2017, 20:30 | #2 |
Форумчанин
Регистрация: 12.04.2017
Сообщений: 889
|
Хы, пркольно, а что пончик уже и перехватывать умеет? Последний раз перехватыл я сам, а пончиком ток дизассемблировал.
Ну так на вскидку, а ДЛЛ в процесс встроена? Нужно убедится что 1. Она загрузилась в процесс. 2. Она сделала перехват ДО вызова CreateInstanceEnum оригинальной прогой. Насчет пункта (2) я не уверен, т.к., скорее всего, программа считывает видюху прежде вообще всего и вы просто не успеваете встроить перехват. В этом случае, вам нужно делать замену всей системной ДЛЛ, переименовать ее, написать свою, со старым именем, которая будет перенаправлять все вызовы в оригинал, кроме вот того 1. Т.к. это COM объект ... м.б. можно подпатчить реестр, т.е. сделать переименование в нем, а не файлов на диске. Последний раз редактировалось alexzk; 15.11.2017 в 20:33. |
15.11.2017, 22:40 | #3 | |
Пользователь
Регистрация: 07.08.2016
Сообщений: 16
|
Цитата:
Так она перехватывает остальные данные, но вот с этим случаем у меня траблы. Не хватает знаний и опыта, вроде делаю как пишут мелгомягкие в прилагаемых примерах, но что-то не работает. Насчет замены всей DLL не вариант т.к. чревато нестабильностью в работе. |
|
15.11.2017, 23:05 | #4 |
Форумчанин
Регистрация: 12.04.2017
Сообщений: 889
|
Так стоп...я уже подзабыл эти интерфейсы, но это же объект некого класса по идее? А в классах 1й параметр это не явный this.
Попробуйте так Код:
Если сработает - то его же и в оригинал передавать не забывайте. Вообще, стоит взять IDA и ей посмотреть бинарную функция в длл, она на основе ассемблера даст прототип, и сравнить его с тем что вы делаете. Вот еще идея проверить, по умолчанию компилер делает __cdecl, а все системные ф. винды __stdcall (хотя, кажется, это уже включено в макросе WINAPI). Последний раз редактировалось alexzk; 15.11.2017 в 23:15. |
16.11.2017, 03:47 | #6 |
Пользователь
Регистрация: 07.08.2016
Сообщений: 16
|
Подсказали использовать хук на метод Get вместо задуманного мною ранее. В итоге родился такой код:
Код:
#1 jwy8Ffr.png #2 3N2qSQA.png Вроде прикрепляется, но программа выплевывает ошибку и не запускается. Почему? |
16.11.2017, 09:12 | #7 |
Форумчанин
Регистрация: 12.04.2017
Сообщений: 889
|
По моему вы там чета с указателями перемудрили. По идее
Код:
Код:
Последний раз редактировалось alexzk; 16.11.2017 в 09:17. |
16.11.2017, 12:21 | #8 | ||
Пользователь
Регистрация: 07.08.2016
Сообщений: 16
|
Цитата:
А далее когда я уже подключаю DLL к EXE и запускаю все совместно, то в DllMain перехватывается указатель из библиотеки fastprox.dll на оригинальный метод Get. Т.е. я его таким образом присваиваю: Код:
Цитата:
|
||
16.11.2017, 12:27 | #9 |
Форумчанин
Регистрация: 12.04.2017
Сообщений: 889
|
Ага, значит все правильно (не заметил, что глобалка), но не правильно...
(PVOID* ppTarget.. это будет РЕЗУЛЬТАТ, а не источник. А вы передаете источник. Т.е. Код:
Кстати PVOID означает, что подойдет любой указатель. Скорее всего, туда нада ваш тип передавать, т.е. Код:
Последний раз редактировалось alexzk; 16.11.2017 в 12:29. |
16.11.2017, 14:29 | #10 |
Пользователь
Регистрация: 07.08.2016
Сообщений: 16
|
SetDetour - эту моя функция, но первый ее параметр передается в DetourAttachEx и к сожалению документации к ней найти не смог. Ориентируюсь я только по примерам, а в них в 98% случаев первый параметр передается так - &(PVOID&)parameter и очень редко (PVOID*)¶meter.
Т.е. DetourAttachEx и/или DetourAttach принимают только PVOID тип и поэтому приходится делать преобразование. Однако в моем случае что бы я не написал - (PVOID*)&p_Get / &(PVOID&)p_Get / (PVOID*)p_Get - любая запись выбрасывает ошибку, только в последнем случае выбрасывает еще и ошибку 0xc0000005 при запуске dxdiag.exe ------------------------------------------ Хм. Сменил LoadLibraryA("fastprox.dll") на GetModuleHandle(L"fastprox.dll") прога стала запускаться, но значения не меняются. Как так то?!?! Последний раз редактировалось SuprSonic; 16.11.2017 в 15:04. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Подмена url с помощью .htaccess | Gorychev | Общие вопросы Web | 1 | 19.02.2014 01:39 |
в чем отличие gpu core clock и gpu clock почему значания разные? | gpu0 | Компьютерное железо | 0 | 10.06.2012 05:17 |
DETOURS, Перехват API средствами Detours | Micki1 | Visual C++ | 1 | 05.04.2012 04:45 |
подмена данных в программе | linkod | Фриланс | 9 | 12.03.2009 11:12 |
Подмена данных | Smip | Microsoft Office Excel | 2 | 13.01.2009 08:51 |