![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
Игорь1024 |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 151 Регистрация: 11.5.2009 Где: Дальний Восток Репутация: нет Всего: нет |
Разбирал пример с rsdn.ru/article/baseserv/IntercetionAPI.xml.
Разобрал исходники, представленные там, не мудрствовая лукаво скопипастил. Всё компилируется и билдится, но при попытке внедрения в любом приложении возникает исключение. Код, я думаю, приводить не надо, т.к его и по ссылке можно глянуть. --------------------
The God is real,unless he is declared as integer. |
|||
|
||||
BorisVorontsov |
|
|||
![]() Thinker ![]() ![]() Профиль Группа: Комодератор Сообщений: 714 Регистрация: 3.11.2005 Где: Молдавия, г. Киши нёв Репутация: 4 Всего: 10 |
Для отлова места исключения используется отладчик. Если найдешь место, и не поймешь при этом, в чем причина исключения, тогда возвращайся в тему с кодом, приводящим к исключению
-------------------- [code=cpp] const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out); for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl; [/code] |
|||
|
||||
Игорь1024 |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 151 Регистрация: 11.5.2009 Где: Дальний Восток Репутация: нет Всего: нет |
Мда, ничего у меня с отладчиком не получилось, понял только что к памяти как-то неправильно обращается.
Вот код. DLL'ка:
Вот внедрение:
P.S Проблема явно в DLL, т.к я её прописывал в AppItitDllls-всё равно лагало --------------------
The God is real,unless he is declared as integer. |
||||
|
|||||
DarthTon |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 106 Регистрация: 7.2.2009 Репутация: 5 Всего: 6 |
замени на
Это выравняет все поля структуры по 1 байту, и структура будет занимать корректных 6 байт в памяти вместо 12-ми. Это сообщение отредактировал(а) DarthTon - 3.11.2010, 14:44 |
||||
|
|||||
Addidas |
|
|||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 20.8.2007 Репутация: нет Всего: нет |
Мммм... это вообще называется защита от дурака... в примерах перехвата МС Рема тоже было пару уловок от лупней...
|
|||
|
||||
Игорь1024 |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 151 Регистрация: 11.5.2009 Где: Дальний Восток Репутация: нет Всего: нет |
не помогло, спасибо за советы ( в том числе и про лупня
![]() хма, про защиту от дурака что верно,то верно (просто стало интересно и вот решил попробовать разобрать). всё равно спасибо. --------------------
The God is real,unless he is declared as integer. |
|||
|
||||
bass |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 315 Регистрация: 5.8.2007 Репутация: 2 Всего: 2 |
Ребят насколько помню надо разрешить запись , потому что в коде стоит только чтение VirtualProtect((void*)(SENDMessageUser32),20,PAGE_READWRITE, &op)).......
Добавлено через 2 минуты и 21 секунду Еще поставь компилятор длл в одно байтовое выравнивание.... |
|||
|
||||
Игорь1024 |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 151 Регистрация: 11.5.2009 Где: Дальний Восток Репутация: нет Всего: нет |
bass, я говорил про первые способы.
по-моему флаг PAGE_READWRITE разрешает запись и чтение. При чём здесь "надо разрешить запись"? --------------------
The God is real,unless he is declared as integer. |
|||
|
||||
bass |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 315 Регистрация: 5.8.2007 Репутация: 2 Всего: 2 |
Блин пример рабочий ставь компилятор длл в однобайтовое выравнивание........
jump.instr_push = 0x68;//Вот здесь я не понял. jump.arg = (DWORD)&Intercept_MessageBoxA; // если не будет стоять однобайтовое выравнивание адрес здесь будет неверен и вследствии крах приложения..... jump.instr_ret = 0xC3;//И здесь. получаеться PUSH 405678// адрес возврата RET если это не поможет то ...... перед вот этим поставь..... //Запишем команду перехода на нашу функцию поверх этих 6-ти байт WriteProcessMemory(GetCurrentProcess(), (void*)adr_MessageBoxA, (void*)&jump, sizeof(jmp_far), &written); Вот это VirtualProtect((void*)adr_MessageBoxA,6,PAGE_READWRITE, &op)).. разрешить запись......... Можеш скинуть скрин ошибки которая выдает программа..... Хоть пойму что у тебя происходит , где ошибка..... А вообще отладчик в помощь.... |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
именно это #pragma pack(1) и делает -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
Игорь1024 |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 151 Регистрация: 11.5.2009 Где: Дальний Восток Репутация: нет Всего: нет |
ошибка 0xC0000005.
смотрел дамп убитого приложения. Там описание исключения-мол не подходящие права для записи и чтения. но ведь вообще же это неправильное обращение к памяти. или я неправ? знаете, я видать ещё "зелёный". Постараюсь позже разобрать этот пример. Во всяком случае у Рихтера есть несколько примеров перехвата API разными способами. всем спасибо за участие, но даже с предложенным DarthTon и bass выравниванием ничено не получается. наверное тему можно закрыть. --------------------
The God is real,unless he is declared as integer. |
|||
|
||||
bass |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 315 Регистрация: 5.8.2007 Репутация: 2 Всего: 2 |
Если синий экран и такая ошибка то ты убил Winlogon.... Лан не буду интересоваться за чем тебе это надо.....
Потренеруйся на блокноте........ А потом лезь в системный процесс... Я писал прогу она работает в процессе winlogon но отлаживал я ее на калькуляторе...... Если на билдоре работаешь то могу помоч ..... |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
||||
|
||||
bass |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 315 Регистрация: 5.8.2007 Репутация: 2 Всего: 2 |
Если ХР и от админа то даст 100% тестировал......... Правда наткнулся на такую хрень один раз, я пользовался не writeproccesMemory А на асме комадой mov и черт ее дери первый байт в функции хоть застрелись не меняет. ![]() ![]() ![]() ![]() А вообще такие вещи без отладчика не делаються(без представления что в процессе происходит...). |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |