![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
![]()
Приветствую.
Ситуация такова: работаю на Windows 7 x64. Мое приложение (и .dll соответственно) являются x32. Прошу помощи в "тыкни носом", т.к. отлавливает события вроде нормально (сделал тестовое приложение), а вот если передать управление оригинальной функции, то все приложения крушатся. Собственно ниже приведу как все делаю, прошу уделить некоторое время на обсуждение данной проблемы. Не упускаю возможность, что я сам виноват (а то, тогда кто?). Думаю мимо проходящим тоже будем интересно. Intercept.h Код:
Код:
Код:
Последний раз редактировалось BOBAH13; 07.05.2010 в 19:31. |
![]() |
![]() |
![]() |
#2 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
![]()
А на счет SizeOfCode функции, я ее тоже брал там же где и константы OPCODES, вроде перевел корректно
Код:
|
![]() |
![]() |
![]() |
#3 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
![]()
Продолжаю беседу сам с собой, начал вываливать дампы памяти по адресам и сравнивать с дизассемблером (результатом). Оказалось что в функции InterceptAPISaveFunction, а именно (DWORD)next - (DWORD)functionOldAddr - saveSize - 5; формируется не корректный адрес, т.е. если по корректному адресу вывалить первые 5 байт, должен получить B9 03 00 00 00, а получаю совершенно другое.
Кто нибудь может подсказать, подправить формирование адреса? Edit: Оставил только (DWORD)next, дамп теперь правильный, полный код с моим jmp внутри. Но крашится всеравно. Edit: Осознал свою тупость, адреса формируется видимо верно, но почему крашится, не ясно. Т.н. краш происходит при попытке call на оригинальный адрес, там его ждет 5 байт (mov eax, какое то значение DWORD), потом jmp и этот адрес (DWORD)next.... а он шлет на оригинальный код (его продолжение). Т.е. где-то здесь, что-то не так. Edit: Всем спасибо! Разобрался. Последний раз редактировалось BOBAH13; 08.05.2010 в 13:14. |
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 03.01.2010
Сообщений: 229
|
![]()
так скажите же, где была проблема?
подпись
|
![]() |
![]() |
![]() |
#5 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
![]()
С какого перепуга я буду говорить ? :D
Меняйте malloc/free на VirtualAlloc/VirtualFree с аргументами MEM_COMMINT + PAGE_EXECUTE_READWRITE/MEM_RELEASE, соответственно. А вообще... пост катит на статейку ))) 3 вечера убил, даже нашел еще один вариант перепрыгивания на реальный адрес, без расчета относительного, правда код больше на пару байт. Ну это не проблема вовсе. |
![]() |
![]() |
![]() |
#6 | |
Форумчанин
Регистрация: 03.01.2010
Сообщений: 229
|
![]() Цитата:
подпись
|
|
![]() |
![]() |
![]() |
#7 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
![]()
А по атрибутам не видно ? Нет, я угадал. Разумеется разобрался как все работает. Нужен атрибут для этого куска памяти, чтобы код в нем мог исполнятся, читаться и писаться - PAGE_EXECUTE_READWRITE.
|
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 03.01.2010
Сообщений: 229
|
![]()
какая то абра кадабра у вас получилась
![]() Я делал так Код:
подпись
|
![]() |
![]() |
![]() |
#9 | |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
![]()
У вас тормозной вариант. Если вы не понимаете, то не зачем писать, что у меня получилась
Цитата:
2. Мне всего то, ничего, просто указать адрес оригинала. Без лишних действий. так что думайте, прежде чем писать ![]() |
|
![]() |
![]() |
![]() |
#10 | |
Форумчанин
Регистрация: 03.01.2010
Сообщений: 229
|
![]() Цитата:
Мне не нужны твои советы ![]()
подпись
Последний раз редактировалось liljon; 09.05.2010 в 21:00. |
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
перехват API функций | ассемблер123 | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 16 | 29.04.2010 12:51 |
Внедрение DLL и перехват API-функций | Doom_Rooster | Win Api | 4 | 01.04.2010 03:37 |
обновление в блоге - Перехват API функций. Основы | Pblog | Обсуждение статей | 0 | 20.01.2009 10:40 |
API перехват | Irat | Помощь студентам | 13 | 11.02.2008 12:04 |
Перехват API функций | satana | Win Api | 4 | 21.08.2007 20:12 |