Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.57/14: Рейтинг темы: голосов - 14, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 13.05.2022
Сообщений: 36

Правка таблицы импорта

13.05.2022, 12:57. Показов 3283. Ответов 55
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Вопрос по правке таблицы импорта. Мне попался делфийский код по перехвату и подмене "MessageBoxA" в user32. Вот ссылка: https://pastebin.com/00FbHHwN
Но я сишник... и решил переписать его под С++. Всё нормально..., но есть НЮАНС (!) - на RAd Studio 2010 нормально компилируется и работает, а вот RAd Studio 10.4.2 и RAd Studio 11 - так же нормально компелируется..., сама прога работает, но перехвата и подмены не происходит! Не пойму... - в чём причина? Код абсолютно одинаковый. Нашёл в инете ещё пару кодов. Переделал их "под себя" - та же картина!... - в 2010 идёт подмена, а в 10.4.2 нет. Не находит он "MessageBoxA" в билотеке. Подскажите пожалуйста в каком направлении смотреть. За ранее благодарен за любую подсказку.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.05.2022, 12:57
Ответы с готовыми решениями:

Получение таблицы импорта pe файла
С экспортом разобрался, теперь бы получить импорт. Нашел статьи но не могу разобраться( Добавлено через 49 минут type ...

Файл без таблицы импорта
Вопрос может быть и в тему, но мне очень интересно. Как можно создать полноценный исполняемый файл для винды, не использующий таблицу...

Массовое отображение и правка файлов в виде таблицы
Добрый день. Возникла необходимость переработать большое количество файлов, а последний раз программировать я пытался лет десять назад, не...

55
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
15.05.2022, 20:27
Студворк — интернет-сервис помощи студентам
cvi, давайте вернемся к вашему предложению:
Цитата Сообщение от cvi Посмотреть сообщение
Я Вам могу хоть сейчас два .ехе скомпилировать и скинуть
Скиньте.
0
place status here
 Аватар для gunslinger
3192 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,027
15.05.2022, 21:10
Могу ошибаться, но может проблема в том, что MessageBoxA - неюникодная версия функции.
А MessageBoxW (или MessageBox) - юникодная.
winuser.h (билдер XE5):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
WINUSERAPI
int
WINAPI
MessageBoxA(
    __in_opt HWND hWnd,
    __in_opt LPCSTR lpText,
    __in_opt LPCSTR lpCaption,
    __in UINT uType);
WINUSERAPI
int
WINAPI
MessageBoxW(
    __in_opt HWND hWnd,
    __in_opt LPCWSTR lpText,
    __in_opt LPCWSTR lpCaption,
    __in UINT uType);
#ifdef UNICODE
#define MessageBox  MessageBoxW
#else
#define MessageBox  MessageBoxA
#endif // !UNICODE
 
#if defined(_M_CEE)
#undef MessageBox
__inline
int
MessageBox(
    HWND hWnd,
    LPCTSTR lpText,
    LPCTSTR lpCaption,
    UINT uType
    )
{
#ifdef UNICODE
    return MessageBoxW(
#else
    return MessageBoxA(
#endif
        hWnd,
    lpText,
    lpCaption,
    uType
        );
}
#endif  /* _M_CEE */
0
0 / 0 / 0
Регистрация: 13.05.2022
Сообщений: 36
16.05.2022, 01:03  [ТС]
Выскакивает именно MessageBoxA. Это легко проверить по перехвату, подмене. Повторюсь... - код делфи, откомпиленый на разных версиях, работает!
0
0 / 0 / 0
Регистрация: 13.05.2022
Сообщений: 36
16.05.2022, 01:07  [ТС]
Спасибо большое, что решили помочь... Отправляю...
Вложения
Тип файла: rar exe.rar (3.28 Мб, 14 просмотров)
0
0 / 0 / 0
Регистрация: 13.05.2022
Сообщений: 36
16.05.2022, 12:54  [ТС]
Что то удалось увидеть? Есть какие нибудь идеи?...
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
16.05.2022, 13:00
Цитата Сообщение от cvi Посмотреть сообщение
Что то удалось увидеть? Есть какие нибудь идеи?...
Пока ничего. Я ж не целыми днями на форуме. Вечером посмотрю.
0
0 / 0 / 0
Регистрация: 13.05.2022
Сообщений: 36
16.05.2022, 15:33  [ТС]
Понял... Спасибо! Пожалуйста извините.
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
17.05.2022, 08:15
cvi, а можете ваши два проекта в 10.4.2 и 2010 запаковать и сюда прикрепить? Если там что-то не предназначенное для для сторонних глаз, то лучше тогда сделайте два консольных проекта (мой код для этого вполне пригоден), в каждой из версий соответственно, и прикрепите сюда.
0
0 / 0 / 0
Регистрация: 13.05.2022
Сообщений: 36
17.05.2022, 11:20  [ТС]
Конечно... Спасибо большое что не отказываете в помощи.
Вложения
Тип файла: rar all.rar (413.9 Кб, 8 просмотров)
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
17.05.2022, 13:00
cvi, Да, это я посмотрю, как доберусь до винды. А пока все-таки сделайте два именно консольных проекта, с кодом, который я выше привел. И просто скажите одинаково они работают или нет.

Что касается вашего кода, то насколько я понял, нужный вам MessageBox вызываете не вы, а библиотека где-то внутри себя?
Если да, то два предположения:
1) Возможно более новая версия библиотека уже использует W версию MesageBox, поэтому вы ее и не ловите.
2) Возможно боле новая версия вообще не использует системный MessageBox, а рисует полностью свой собственный.
0
0 / 0 / 0
Регистрация: 13.05.2022
Сообщений: 36
17.05.2022, 13:45  [ТС]
Да, Вы абсолютно правы - MessageBoxА вызывается из библиотеки где то внутри себя. И..... - вызывается именно MessageBoxА! Я загружал .ехе в Hex Works и там видно, что именно MessageBoxА! Ваши версии очень правдоподобны, если бы не одно НО... - делфийский код то, ссылку на который я давал, работает и там и там!... Скины то "работают" во всех версиях RadStudio.
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
17.05.2022, 13:49
Цитата Сообщение от cvi Посмотреть сообщение
НО... - делфийский код то, ссылку на который я давал, работает и там и там!
Для гарантированного заключения нужно хорошо разбираться во внутренностях VCL (чего про меня сказать нельзя), но только одно это (процитированное) опять же не означает, что С++ и Delphi используют на 100% одинаковые части VCL.

Все-таки первым делом проверьте консольные варианты, без VCL вообще (тот код, что я привел ранее). Это позволит исключить много факторов.
0
0 / 0 / 0
Регистрация: 13.05.2022
Сообщений: 36
17.05.2022, 14:45  [ТС]
Хорошо, я попробую позже и напишу...

Добавлено через 36 минут
Консольники (без VCL) и там и там работают абсолютно одинаково! Срабатывает MessageBoxA(0, "test", "Unregistered skin", 0);

Добавлено через 11 минут
...Если вместо MessageBoxA пишу MessageBox или MessageBoxW, то сначала срабатывает MessageBoxA(0, "test", "Unregistered skin", 0); а затем MessageBoxA(0, "test", "test", 0); Если изменяю хоть на одну букву имя "Unregistered skin", то окно открывается и сразу закрываеться. Одинаково и там и там!
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
17.05.2022, 14:47
cvi, ну вот, таким незамысловатым образом мы установили, что код перехвата тут уже не при чем, значит мучить его дальше нет смысла. Однозначно понятно, что нюанс кроется в реализации VCL в разных версиях среды.
0
0 / 0 / 0
Регистрация: 13.05.2022
Сообщений: 36
17.05.2022, 15:20  [ТС]
Я уже это понял... Получается... - в C++ и в Delphi используются разные реализации VCL. Спасибо большое за помощь! Есть у меня ещё один вопрос, который я давненько никак не могу для себя решить... Кручусь вокруг да около... Но вопрос конкретно не в эту тему. Не знаю... - можно его тут задать ? Если да, то я тогда опишу суть проблемы...
0
 Аватар для Annemesski
2690 / 1347 / 485
Регистрация: 08.11.2016
Сообщений: 3,735
17.05.2022, 15:29
Цитата Сообщение от cvi Посмотреть сообщение
можно его тут задать ?
лучше сформулируйте в отдельной теме - обсуждение может оказаться полезным и для других, а отдельная тема легче гуглится.
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
17.05.2022, 16:41
Цитата Сообщение от cvi Посмотреть сообщение
Получается... - в C++ и в Delphi используются разные реализации VCL
Можете в 10.4.2 попробовать начать перехватывать W версию. Только не забудьте исправить аргументы.
Или поискать что вызывается вместо нее и перехватывать уже его.

Цитата Сообщение от cvi Посмотреть сообщение
Если да, то я тогда опишу суть проблемы...
Тут действительно лучше новую тему сделать, чтобы правила форума не нарушать.
0
0 / 0 / 0
Регистрация: 13.05.2022
Сообщений: 36
17.05.2022, 18:20  [ТС]
Пробовал уже в 10.4.2 W версию. Поствил const wchar_t, wcscmp. Строка if( (PVOID)Thunk->u1.Function == __ADDRES ) тогда срабатывает. Т.е. - адрес в библиотеке такой есть..., но подмены не происходит...

Добавлено через 13 минут
Хотелось бы конечно докопаться до сути...
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
17.05.2022, 23:35
cvi, в какой момент программа должна выдавать этот MessageBox, что заставляет ее это сделать? Опишите чего вы пытаетесь достичь.
0
0 / 0 / 0
Регистрация: 13.05.2022
Сообщений: 36
18.05.2022, 00:00  [ТС]
Мне надо наоборот, что бы MessageBoxA с заголовком "Unregistered skin" не выскакивал перед запуском проги. Его запускает сама библиотека если скин незаригестрированый. Таковых не много..., но они есть. Чтобы его перехватить, нужно поправить таблицу импорта. Перехватить его надо на точке входа, т.е. до того, как приложение начнёт выполнение.

Добавлено через 2 минуты
Всё это работает, но... только в 2010. А в 10.4 оно выскакивает. А от него я уже отхожу.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.05.2022, 00:00

Инструменты для редактирования таблицы импорта pe?
Доброго! Есть бинарник под десятку, хочу завести его под семёркой. Он использует несколько winapi из user32, kernel32 и др, которых в...

Контрол для импорта таблицы в файл Word
Приветствую, Друзья! Подскажите контрол для импорта в вордовский файл таблицы, состоящей из пяти столбцов(первые три столбца описывают...

После импорта таблицы, пропадает сортировка - настоящая головоломка
Есть БД. Возникла необходимость обновить таблицу (набранную в точно такой-же, но из-вне). Вначале импортом воспользовался-проблема (ниже),...

Как получить имена Dll файлов из таблицы импорта
Добрый день. Нужно получить имена Dll файлов из таблицы импорта и при этом иметь возможность заблокировать запуск приложение....

Автоматическое создание формы на основе созданной таблицы в результате импорта данных (VBA)
Доброе время суток, Уважаемые! Подскажите, пожалуйста, решение задачи. Задача: Необходимо после импорта данный из разных однотипных...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
сукцессия 41
anaschu 24.07.2026
Численная верификация бифуркации в агентной модели лесной сукцессии: от одного параметра к ансамблю Автор: пользователь @Shumilov_AS | Раздел: Прикладная математика / Численные методы Кратко. . .
сукцессия 40. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем **Полевые заметки о двухнедельной совместной работе**. . .
Теория всего 12. ВГК на планете в стратегической игре "терра"
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928 Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru