Форум программистов, компьютерный форум, киберфорум
Delphi: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
18 / 17 / 0
Регистрация: 27.11.2012
Сообщений: 353

Замена API функции

17.03.2015, 11:27. Показов 1219. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.

Не нашел подходящего раздела для темы - поэтому сильно не бейте.

Одно приложение использует API вызов из библиотеки user32.dll, функция GetForegroundWindow. Возможно ли каким либо образом заменить эту функцию на свою?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.03.2015, 11:27
Ответы с готовыми решениями:

Замена RichTextBox на API функцию.
Есть готовая программа, в ней используется стандартный RichTextBox. Как его заменить с использованием функции API переписывая как...

Передача функций в функции, замена инициализации функции ключевыми словами
Хочу сделать фишку по типу property в c++/cli int property a{ int get(){ return value; } } и так же есть set Хочу...

Youtube API. Каким образом генерируется плеер? Замена другого блока на плеер
Здравствуйте. Есть такая функция. function cteateIframe(videoID, divID){ var player; player = new YT.Player(divID,...

11
Native x86
Эксперт Hardware
 Аватар для quwy
6853 / 3787 / 1024
Регистрация: 13.02.2013
Сообщений: 11,861
17.03.2015, 17:17
Цитата Сообщение от xVahax Посмотреть сообщение
Возможно ли каким либо образом заменить эту функцию на свою?
Да.
1
18 / 17 / 0
Регистрация: 27.11.2012
Сообщений: 353
17.03.2015, 21:00  [ТС]
Цитата Сообщение от quwy Посмотреть сообщение
Да.
Спасибо, очень интересная статья. Но хотелось бы не перехватывая API, а каким либо образом подменой библиотеки для конкретного приложения. К примеру, написать библиотеку с идентичными названиями функций, во всех сделать вызов на функцию настоящей библиотеки, а в нужной функции написать свой код. Сделать такую библиотеку, теоретически, не проблема (если честно не пробовал, но думаю не сложно). Как заставить приложение работать именно с моей библиотекой?
0
Native x86
Эксперт Hardware
 Аватар для quwy
6853 / 3787 / 1024
Регистрация: 13.02.2013
Сообщений: 11,861
17.03.2015, 21:21
Цитата Сообщение от xVahax Посмотреть сообщение
К примеру, написать библиотеку с идентичными названиями функций, во всех сделать вызов на функцию настоящей библиотеки, а в нужной функции написать свой код
Это возможно, но тогда придется изменить приложение, для которого производится замена, иначе оно не загрузит вашу библиотеку. Но если можно изменить приложение, то проще пропатчить вызов GetForegroundWindow или обработку ее результата.

Цитата Сообщение от xVahax Посмотреть сообщение
Как заставить приложение работать именно с моей библиотекой?
Изменить таблицу импорта исполняемого модуля.
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
17.03.2015, 21:33
Цитата Сообщение от quwy Посмотреть сообщение
Изменить таблицу импорта исполняемого модуля
Этого может быть недостаточно.
Не исключены и обращения к EAT либы со стороны модуля, использующего ее.
EAT будет использована в случае обращения с использованием LoadLibrary + GetProcAddress.
Тогда либо EAT патчить либо IAT для еще как минимум для этих двух ф-ций.
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,608
18.03.2015, 02:13
Цитата Сообщение от xVahax Посмотреть сообщение
Спасибо, очень интересная статья. Но хотелось бы не перехватывая API, а каким либо образом подменой библиотеки для конкретного приложения. К примеру, написать библиотеку с идентичными названиями функций, во всех сделать вызов на функцию настоящей библиотеки, а в нужной функции написать свой код. Сделать такую библиотеку, теоретически, не проблема (если честно не пробовал, но думаю не сложно). Как заставить приложение работать именно с моей библиотекой?
Столько слов, а речь в топике идет о весьма безобидной и простой функции GetForegroundWindow.
Ну и зачем её подмена нужна:?
0
18 / 17 / 0
Регистрация: 27.11.2012
Сообщений: 353
18.03.2015, 08:15  [ТС]
Цитата Сообщение от quwy Посмотреть сообщение
Сообщение от xVahax
К примеру, написать библиотеку с идентичными названиями функций, во всех сделать вызов на функцию настоящей библиотеки, а в нужной функции написать свой код
Это возможно, но тогда придется изменить приложение, для которого производится замена, иначе оно не загрузит вашу библиотеку. Но если можно изменить приложение, то проще пропатчить вызов GetForegroundWindow или обработку ее результата.
Сообщение от xVahax
Как заставить приложение работать именно с моей библиотекой?
Изменить таблицу импорта исполняемого модуля.
Нет, исходников приложения нет((, тогда бы и вопросов не было))

Насчет своей библиотеки: встречал такие примеры, когда кидаешь рядом с приложением пропатченную dll (причем ее там изначально не было) и приложение начинает после перезапуска работать именно с ней, причем библиотеки тоже системными были.
0
Native x86
Эксперт Hardware
 Аватар для quwy
6853 / 3787 / 1024
Регистрация: 13.02.2013
Сообщений: 11,861
18.03.2015, 12:36
Цитата Сообщение от xVahax Посмотреть сообщение
Нет, исходников приложения нет((, тогда бы и вопросов не было))
Это можно сделать и без исходников.

Цитата Сообщение от xVahax Посмотреть сообщение
причем библиотеки тоже системными были
Это вряд ли. Попробуйте сами, возьмите любую DLL, и скопируйте ее под именем user32.dll рядом с вашим EXE. Запустите его. Если бы все было так просто, EXE просто не запустился бы по причине того, что в лже-user32.dll нет ожидаемых функций. Однако процесс запустится как ни в чем не бывало, т.е. загрузит библиотеку из системного каталога, а не ту, что лежит рядом с тем же именем.
0
18 / 17 / 0
Регистрация: 27.11.2012
Сообщений: 353
18.03.2015, 13:13  [ТС]
Цитата Сообщение от quwy Посмотреть сообщение
Это можно сделать и без исходников.
Вряд ли это мне по силам... Но мне интересно, подскажите какую нибудь статью - я даже не знаю как это называется чтобы найти)))

Добавлено через 4 минуты
Цитата Сообщение от quwy Посмотреть сообщение
Это вряд ли. Попробуйте сами, возьмите любую DLL, и скопируйте ее под именем user32.dll рядом с вашим EXE. Запустите его. Если бы все было так просто, EXE просто не запустился бы по причине того, что в лже-user32.dll нет ожидаемых функций. Однако процесс запустится как ни в чем не бывало, т.е. загрузит библиотеку из системного каталога, а не ту, что лежит рядом с тем же именем.
Как вариант: при загрузке лже-dll не нашлось используемых функций и поэтому пришлось обратиться по зарегистрированному в системе адресу для этой dll. Но это так, мысли вслух...
0
Native x86
Эксперт Hardware
 Аватар для quwy
6853 / 3787 / 1024
Регистрация: 13.02.2013
Сообщений: 11,861
18.03.2015, 13:38
Цитата Сообщение от xVahax Посмотреть сообщение
Вряд ли это мне по силам... Но мне интересно, подскажите какую нибудь статью - я даже не знаю как это называется чтобы найти)))
Все зависит от того, что вы хотите сделать. Затереть вызов GetForegroundWindow и заменить его на какую-то константу проще простого.

Цитата Сообщение от xVahax Посмотреть сообщение
Но это так, мысли вслух...
Я подробностей уже не помню, но вроде у Рихтера читал, что самые базовые DLL автоматически проецируются в адресное пространство процесса вне зависимости от его желания, и всегда именно те, которые использует сама система.
0
18 / 17 / 0
Регистрация: 27.11.2012
Сообщений: 353
18.03.2015, 15:13  [ТС]
Цитата Сообщение от quwy Посмотреть сообщение
Все зависит от того, что вы хотите сделать. Затереть вызов GetForegroundWindow и заменить его на какую-то константу проще простого.
Буду Вам весьма благодарен, если расскажете как это сделать, мне это интересно!

Добавлено через 2 минуты
Цитата Сообщение от quwy Посмотреть сообщение
Я подробностей уже не помню, но вроде у Рихтера читал, что самые базовые DLL автоматически проецируются в адресное пространство процесса вне зависимости от его желания, и всегда именно те, которые использует сама система.
Спорить не буду, т.к. не знаю)
0
Native x86
Эксперт Hardware
 Аватар для quwy
6853 / 3787 / 1024
Регистрация: 13.02.2013
Сообщений: 11,861
18.03.2015, 15:23
Цитата Сообщение от xVahax Посмотреть сообщение
Буду Вам весьма благодарен, если расскажете как это сделать, мне это интересно!
Нужно взять отладчик уровня приложений, найти нужное место вызова GetForegroundWindow, пропатчить его сначала прямо в памяти, убедиться, что все работает как нужно, а потом заменить байты, соответствующие старому коду на байты нового кода в самом EXE. Но с этим лучше с новой темой в форуме по ассемблеру.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.03.2015, 15:23
Помогаю со студенческими работами здесь

API - функции
Добрый вечер Господа!))) Вопрос - где можно найти толковую тнформацию по параметрам функции ExitWindowsEx Смысл - хочу сделать...

API функции
Народ дали вот такое задание С помощью API-функций создать графическое приложение, которое выводит 8-10 окружностей с разными атрибутами...

API функции
И снова здравствуйте, господа! как мне написать команды сохранить и открыть файл с помощью API функций? для поддержки Excel 2000. я...

API функции
создать программу описывающую сетевую карту с помощью API функции. интерфейс должен быть как при запуске диспетчера устройст.

API функции
Здраствуйте! Помогите пожалуйста с реализацией простенькой API функции кроме ExitProcess u MessageBox Буду презнателен. Спасибо!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru