![]() |
eXeL@B —› Программирование —› Ошибка в сплайс коде |
Посл.ответ | Сообщение |
|
Создано: 19 декабря 2009 16:43 · Поправил: sterk · Личное сообщение · #1 Пишу длл. в ней делаю сплайс функций. для теста взял функцию send. При инъекте все проходит успешно. Но кусок кода выдает не то что хотелось бы... Code:
LastError это вызов функции GetLastError. Выдает значение 5. доступ запрещен. Но я не понимаю с какого фига Я предпологаю что доступ запрещен к пайпу. мб и нет. Подскажите как это лечится пс: что бы было понятнее наставил каментов ![]() |
|
Создано: 19 декабря 2009 16:55 · Личное сообщение · #2 |
|
Создано: 19 декабря 2009 17:09 · Личное сообщение · #3 Чего недостаточно то? я написал две проги. одну с вызовом send. другая дллка. вот дллка. Через ольку дебажу свою же прогу. перехожу на свой код. в дллке при вызове send из проги. адреса и параметры все правильно подставлено. Но код(GetLastError) выдает ERROR_ACCESS_DENIED. Code:
![]() |
|
Создано: 19 декабря 2009 18:29 · Личное сообщение · #4 |
|
Создано: 19 декабря 2009 18:34 · Личное сообщение · #5 Vol4ok пишет: для начала можно попробовать добавить GENERIC_WRITE вhPipe = CreateFileA((LPCSTR)"\.\pipe\bggPP", GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL); ахаха. во я лопухнулся ![]() ![]() ![]() |
|
Создано: 19 декабря 2009 20:23 · Личное сообщение · #6 sterk В этом случае, когда либа загружается в адресное пространство процесса, более удобным был не сплайсниг, а IAT modification, да и перехват реализован коряво. Так можно было создать функцию с тааким же прототипом и вызывать её вместо оригинальной - код было бы удобнее читать. ----- Stuck to the plan, always think that we would stand up, never ran. ![]() |
|
Создано: 19 декабря 2009 21:07 · Поправил: sterk · Личное сообщение · #7 я пишу снифер. для игр и тд. зачастую вызовы идут не из ехе файла а из какой нить дллки... править всем загруженным модулям иат? так же не слишком понял насчет кривезны перехвата. я с наименьшими изменениями и тд делаю перехват и исполнение своего кода. так же слежу по минимуму произвожу манипуляций. во 1 может возникнуть меньше глюков с адресами в памяти во 2 скорость выполнения в тех же онлайн игрушках выше. ![]() |
|
Создано: 19 декабря 2009 21:20 · Личное сообщение · #8 sterk пишет: во 1 может возникнуть меньше глюков с адресами в памяти А при модификации таблицы импорта какие тут могут быть глюки? Наоборот, почитай статьи того же MS-REM, где он говорит, что сплайсинг куда опаснее. Рихтер с ним солидарен. во 2 скорость выполнения в тех же онлайн игрушках выше А скорость везде одинаковая (впринципе, можно поспорить, что при модификации таблицы выше, но не буду). править всем загруженным модулям иат? А что - это задача со звёздочкой? ----- Stuck to the plan, always think that we would stand up, never ran. ![]() |
|
Создано: 19 декабря 2009 21:34 · Поправил: sterk · Личное сообщение · #9 Никогда не правил иат. Причем всему что движется ))) А как отслеживать если загрузится новый модуль какой нить? кинь ссылки на подобные статьи плиз. а насчет функции я так понимаю ты предлагаеш вот такое Code:
![]() |
|
Создано: 19 декабря 2009 21:49 · Личное сообщение · #10 sterk ![]() ![]() Code:
Неее, рекурсию я не предлагаю ))) Хотя ладно, С различает регистр букв. А как отслеживать если загрузится новый модуль какой нить? А отслеживать и не надо. Когда твой код начнёт стваить перехавт, помимо правок таблиц импорта уже загруженных модулей пусть правит таблицу экспорта для того, чтоб GetProcAddress не могла правильное значение определить. кинь ссылки на подобные статьи плиз. Джеффри Рихтер - Windows для проффесионалов. Это не статья, а книга. Качай и читай, там всё написано. ----- Stuck to the plan, always think that we would stand up, never ran. ![]() |
|
Создано: 19 декабря 2009 21:58 · Личное сообщение · #11 дллка грузится в начале работы проги. значит для уже загруженных модулей надо исправить иат. после чего для будущих модулей достаточно исправить таблицу экспорта в ws2_32.dll? А можно ли как нить загрузить мою длл что бы нужно было только экспорт редактировать? ![]() + очень большой вопрос по поводу пакеров\протектеров... что будет если программа будет защищена. а программы в основном защищены themida. для меня это не преодолимо... ![]() ![]() |
|
Создано: 19 декабря 2009 22:09 · Личное сообщение · #12 sterk пишет: А можно ли как нить загрузить мою длл что бы нужно было только экспорт редактировать? Чисто теоретически - можно, если к ехе-файлу эта либа (ws2_32.dll) не прилинкована статически. В противном случае нельзя. Импорт всё равно - хотяб для ехе-файла - придётся править. + очень большой вопрос по поводу пакеров\протектеров... что будет если программа будет защищена. а программы в основном защищены themida. для меня это не преодолимо... Ну, Фима так и разрабатывалась, чтоб не хукали все кому не лень её функции. Но всегда можно написать драйвер и хукать в ядре. Правда, для этого придётся напрячься гораздо сильнее - поисследовать, какие сервисы нужно перехватить и при каких входных параметрах и т.д. ----- Stuck to the plan, always think that we would stand up, never ran. ![]() |
|
Создано: 19 декабря 2009 22:18 · Личное сообщение · #13 |
|
Создано: 19 декабря 2009 23:20 · Поправил: Vol4ok · Личное сообщение · #14 sterk пишет: всегда хотел писать драйверы и рулить на низком уровне. но не нашел хороших и понятных книг. зато нашлись статьи: изучайте, хорошо и понятно написано и примерами и даже картинками ![]() sterk пишет: Я например не знаю как без шаманства прикрутить разработку драйверов к VS 2008ру. попробуйте это - только WDK не забудьте поставить и прописать переменную стреды WINDDK = "путь\к\ВДК" ![]() sterk пишет: как с помощью драйверов перехваты делать? Также как и без них. ЗЫ: у вас в начале топика был написан вполне нормальный и рабочий код, не понимаю зачем вам этот гимор с импортом/экспортом? ![]() |
|
Создано: 20 декабря 2009 00:03 · Личное сообщение · #15 Вообще мне хотелось бы такой метод перехвата данных для снифера. что бы он во 1 не палился различного рода защитами. А во 2 что бы я мог редактировать проходящий трафик. была идея написать драйвер сетевой но знаний не хватает. А опыт в сплайсинге и контроле различных программ есть. вот и решил через перехват писать. ![]() |
|
Создано: 20 декабря 2009 04:21 · Личное сообщение · #16 |
|
Создано: 20 декабря 2009 04:32 · Поправил: ARCHANGEL · Личное сообщение · #17 |
|
Создано: 20 декабря 2009 06:05 · Личное сообщение · #18 |
|
Создано: 20 декабря 2009 09:07 · Личное сообщение · #19 |
|
Создано: 20 декабря 2009 13:17 · Поправил: Clerk · Личное сообщение · #20 Текущий уровень привилегий, имел ввиду оба кольца защиты. Нужно найти возможность для срабатывания ловушки(не только Trap, но и ошибка, любой сепшен) гдето до вызова целевого кода, пусть даже весьма далеко от него. В этом случае используется трассировка процедур с заменой адреса возврата после входа. Это может быть не валидный указатель, структура, селектор и пр. Упомянули LastError - на этом может быть сгенерирован останов(см. g_dwLastErrorToBreakOn). В ядре на низком иркл этот механизм может использоваться обычно. ![]() |
|
Создано: 20 декабря 2009 13:54 · Личное сообщение · #21 |
|
Создано: 20 декабря 2009 14:19 · Личное сообщение · #22 sterk пишет: в студии появлялся отдельный тип проекта. Win32 Driver ну что то в этом духе. visualddk.sysprogs.org/ sterk пишет: во 1 не палился различного рода защитами. А во 2 что бы я мог редактировать проходящий трафик. была идея написать драйвер сетевой но знаний не хватает. весьма противоречивые требования, вы хотите написать крутой снифер при этом не обладая необходимыми знаниями. Вы уж определитесь, либо пишите что умеете, но работать оно будет как получится, либо изучайте матчасть и пишите как надо, тогда работать будет как вы хотите. Cамый оптимальное решение для создания снифера - написание NDIS-фильтра, в WDK есть готовые шаблоны для NDIS 5 - NDIS Intermediate Driver (src\network\ndis\passthru), для NDIS 6 - NDIS Filter Driver (src\network\ndis\filter). ![]() |
|
Создано: 20 декабря 2009 15:50 · Личное сообщение · #23 |
|
Создано: 20 декабря 2009 16:34 · Личное сообщение · #24 |
![]() |
eXeL@B —› Программирование —› Ошибка в сплайс коде |