Сейчас на форуме: UniSoft, laslo, bartolomeo (+5 невидимых) |
eXeL@B —› Программирование —› Подскажите новичку по перехвату Api функций |
. 1 . 2 . 3 . >> |
Посл.ответ | Сообщение |
|
Создано: 17 ноября 2011 17:16 · Личное сообщение · #1 Доброго времени суток. Разбираюсь с перехватом API функций через dll инъекцию. В сети нашел интересный пример и на нем сделал библиотечку которая подменяет нужные функции. В частности: GetDriveTypeA, GetVolumeInformationA, GetVersion, GetVersionExA Все они находятся в kernel32.dll, что усложняет задачку GetDriveTypeA и GetVersion удалось подменить выводы на нужные, а вот GetVolumeInformationA и GetVersionExA проблемы GetVolumeInformationA возвращает 0 (наверное потому что не знаю в какой регистр писать и в один ли ) А с GetVersionExA вообще труба каким образом и как там идет возврат. К сожалению приходится пользоватся почти наугад, завести на 64 битном 4 ядерном проце SoftIce не удалось а в виртуалке проблемы с видеодрайвером. Да и мешает еще одна проблема последний раз на асме писал лет 10 назад (уже с трудом что-то вспоминается). Прошу помощи подсказками: Каким софтом можно подсмотреть саму функцию kernel32 Советами по поводу вовратов от функции, примером или чем нибудь еще. В архиве программка мишень, библиотека, flat assembler и исходники всего. http://narod.ru/disk/31656508001/project.zip.html |
|
Создано: 17 ноября 2011 17:21 · Поправил: Kaimi · Личное сообщение · #2 Каким софтом можно подсмотреть саму функцию kernel32 Любым дизассемблером, например, IDA. GetVolumeInformationA возвращает 0 (наверное потому что не знаю в какой регистр писать и в один ли ) А с GetVersionExA вообще труба каким образом и как там идет возврат. К сожалению приходится пользоватся почти наугад, завести на 64 битном 4 ядерном проце SoftIce не удалось а в виртуалке проблемы с видеодрайвером. Да и мешает еще одна проблема последний раз на асме писал лет 10 назад (уже с трудом что-то вспоминается). Может в таком случае стоит взять detours или easyhook и не заморачиваться с разбором функций и ассемблером? |
|
Создано: 17 ноября 2011 17:28 · Личное сообщение · #3 |
|
Создано: 17 ноября 2011 17:28 · Личное сообщение · #4 Может в таком случае стоит взять detours или easyhook и не заморачиваться с разбором функций и ассемблером? Спасибо за совет. Но у меня задача академическая. Я хочу улучшить защиту для своей программы. Но любую защиту можно сломать, поэтому сделал мишешь и её ломаю. По этой причине именно инъекция. Потому что теоретически представим что программу патчить нельзя (не будет свои функции выполнять или 10001 проверка положем). за ida спасибо посмотрю. По практиве пробовал олькой не разобрался как они работают (сложновато для меня - куча ссылок с мета на место в итоге путаешься в показаниях) |
|
Создано: 17 ноября 2011 17:31 · Личное сообщение · #5 |
|
Создано: 17 ноября 2011 17:58 · Личное сообщение · #6 |
|
Создано: 17 ноября 2011 20:06 · Личное сообщение · #7 |
|
Создано: 17 ноября 2011 20:22 · Личное сообщение · #8 |
|
Создано: 17 ноября 2011 20:28 · Личное сообщение · #9 |
|
Создано: 18 ноября 2011 00:29 · Личное сообщение · #10 bowrouco пишет: Я даже не читал топик, кроме названия. Думаю угадаю. Перехват - патч Я, видимо, чего-то не понимаю. Многократно видел подобные посты от Клерка, и назрел вопрос. Допустим, у нас есть некая функция. Проще говоря, некий фрагмент кода, расположенный в кодосекции какого-то модуля. Нам нужно выполнить перехват этой функции, цель - фильтровать некоторые входные параметры (типичная задача). Предположим, что мы не можем определить участки кода, из которых происходят (могут происходить) все вызовы этой функции (код запротекчен или просто генерируется динамически). Т.е. всякие Search for all references ничего не дадут. Мы строим граф потока выполнения этой функции. Получаем, что граф представляет из себя тривиальное дерево - т.е. имеется орграф, заданный множеством вершин Х, и отображением этих вершин на множество Х так, что отображение состоит из одного элемента. Не думайте, что это - надуманный пример. Таких функций масса - GetCurrentProcessId, GetLastError, GetCommandLineA и т.д. Для перехвата нам следует изменить граф потока выполнения. Всякие трюки с доступом к памяти не катят, т.к. это юзермод, и нам надо как-то хэндлить исключения без дебаггера (мы под протом). Какие есть в таком случае варианты без патча? ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 18 ноября 2011 01:56 · Личное сообщение · #11 |
|
Создано: 18 ноября 2011 05:53 · Личное сообщение · #12 ARCHANGEL пишет: Я, видимо, чего-то не понимаю. Многократно видел подобные посты от Клерка, и назрел вопрос. Ну если ты не понял, то клерк оперирует выдуманными технологиями и понятиями и неприемлет ничего другого, считая, что кроме его илитной архитектуры и терминологии нет вообще ничего, только мусор. Причем тут граф? Если ты привел пример с API функциями, то можно сделать похукать экспорт модуля к себе и фильтровать. Если прот чекает валидность экспорта, то можно заюзать секцию релоков модуля или выделить память пониже модуля, и пофиксить модулю SizeOfImage и/или размеры секций. Можно использовать PAGE_GUARD или Dr регистры, с их хендлингом в KiUserExceptionDispatcher или VEH. ----- Yann Tiersen best and do not fuck |
|
Создано: 18 ноября 2011 08:15 · Личное сообщение · #13 |
|
Создано: 18 ноября 2011 09:40 · Личное сообщение · #14 Ты помешался на VX, это форум исследования защиты программного обеспечения, при чем здесь рку? Это протектор, менеджер лицензий? Протекторы не могут использовать все методы антируткитов. Допустим прот спалил что похукана LoadLibrary, что ему делать, убивать защищенное приложение? Тогда юзерам сразу нужно писать, что программа не работает с антивирусами и проактивками. Собственно поэтому ответы здесь именно в контексте защиты программного обеспечения. Для одной WriteConsole я бы переправил RVA экспорта функции в экспорте на секцию экспорта и вписал туда forward на свою DLL. Таким образом RVA будет валидным, а GPA вернет адрес моей функции. А, что на это скажет рку мне срать, ибо у меня не трой. ----- Yann Tiersen best and do not fuck |
|
Создано: 18 ноября 2011 10:44 · Личное сообщение · #15 Freeon пишет: Каким софтом можно подсмотреть саму функцию kernel32 Про OLLYDBG что небуть слыхал,SoftIce это эспонат музея Так хучить вообще не айс и некрасиво. Code:
желательно делать переход на хученную функу а потом подменять значение а так хучить это какоето варворство( если ты конечно не начинающий троянщик те варворы вообще конченные:s6 а так пример кода хороший нашёл ----- Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли. |
|
Создано: 18 ноября 2011 11:06 · Личное сообщение · #16 |
|
Создано: 18 ноября 2011 13:00 · Поправил: Gideon Vi · Личное сообщение · #17 |
|
Создано: 18 ноября 2011 13:13 · Поправил: Maximus · Личное сообщение · #18 Gideon Vi Автор хочет не защитить приложение, а сломать. >или 10001 проверка положем Я хочу показать автору как легко можно обойти все проверки, перехватив всего одну функцию ReadFile и сделать обычный патч В любом случае понятно что метод иньекции для отлома никто использовать не будет. Патч + перехват АПИ функций, как сейчас это делают со всеми протекторами для подмены ХВИДа. Причем функи хукать будут именно в ИАТ программы, а не в kernel библиотеке. Ссылки по теме. Обход проверки патча у ASProtect (Хучится одна функция чтения образа в память и обходятся сразу все проверки) http://exelab.ru/rar/htm.php?n=102 читать раздел "[Обход проверки изменения файла на диске]" Обход проверок на патч Темида (Хучится 3 функции считывания файла с диска, и обходится проверка прота и 100001 проверки в самой программе). Причем в программе как раз подменяется хвид. http://depositfiles.com/ru/files/foengopiq ----- StarForce и Themida ацтой! |
|
Создано: 18 ноября 2011 13:43 · Личное сообщение · #19 |
|
Создано: 18 ноября 2011 14:15 · Поправил: Maximus · Личное сообщение · #20 Gideon Vi Хуками он хочет не защитить приложение, а сломать. Но вектор изначально задан не правильно. Через хуки ломать никто не будет, будут делать инлайн патч. А все проверки на целостность обходятся элементарно путем подмены измененных байтов на первоначальные при считывании данных в память. Freeon смирись с неизбежностью, приложение все равно сломают. Лучше направь свои силы на улучшение программы, а не на ее защиту. ----- StarForce и Themida ацтой! |
|
Создано: 18 ноября 2011 16:09 · Личное сообщение · #21 |
|
Создано: 18 ноября 2011 19:52 · Личное сообщение · #22 |
|
Создано: 18 ноября 2011 20:00 · Поправил: bowrouco · Личное сообщение · #23 PE_Kill Вопрос: > Нам нужно выполнить перехват этой функции, цель - фильтровать некоторые входные параметры (типичная задача). Ответ: > Отложенная передача управления. Комент: > Ты.. далее идёт высер и есчо делее: > Для одной WriteConsole я бы переправил RVA экспорта функции в экспорте на секцию экспорта и вписал туда forward на свою DLL. Таким образом RVA будет валидным, а GPA вернет адрес моей функции. А, что на это скажет рку мне срать, ибо у меня не трой. Тоесть бредятина, не имеющая отношения к вопросу. Это как говорится обосраться. Если нихуя не понимаете, то и писать не нужно. Вы кроме как код патчить не начто больше не годны, тупой по простому говоря. Школота возамнившая себя хз чем. |
|
Создано: 19 ноября 2011 02:04 · Личное сообщение · #24 PE_Kill пишет: Причем тут граф? Да, в общем-то, ни при чём. Можно выбрать разную терминологию для постановки задачи. Я просто пояснил, как я понимаю данную задачу с точки зрения теории графов. Если ты привел пример с API функциями, то можно сделать похукать экспорт модуля к себе и фильтровать АПИ - тот же код, который можно описывать графом - думаю, не открыл для вас ничего нового. Ключевая фраза здесь - похукать экспорт. Это разве не относится к патчу, просто патчится не код целевой функции? и пофиксить модулю SizeOfImage и/или размеры секций И это - тоже патч. Можно использовать PAGE_GUARD или Dr регистры, с их хендлингом в KiUserExceptionDispatcher или VEH Хэндлинг в KiUserExceptionDispatcher - но ведь это возможно, если пропатчить этот самый KiUserExceptionDispatcher. VEH - это другое дело, но, как уже было замечено, любой последующий обработчик станет приоритетным над моим, а чтоб этого не было, нужен патч RtlAddVectoredExceptionHandler, либо же заюзать один из отладочных регистров или поменять доступ к памяти в этой функции, но говорят (в соседнем топике) что не шибко быстро, т.е. если некая малварь будет так делать, падение производительности юзеры заметят "на глаз". Значит для малвари не годится, да и тормозящий легальный софт - тоже не хорошо. bowrouco пишет: Отложенная передача управления. Можно конкретнее? ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 19 ноября 2011 07:43 · Личное сообщение · #25 |
|
Создано: 19 ноября 2011 11:39 · Личное сообщение · #26 ARCHANGEL я же говорю, что он троль: Code:
Code:
Да, да - это не VEH и не патч, это отложенная передача управления! Я уж не говорю о том, что для фильтра одной бедной апи делается перезагрузка имейджа в памяти, трассировка кода и тонна атсос виолейшенов, что естественно не работает на новых ОС. ----- Yann Tiersen best and do not fuck | Сообщение посчитали полезным: 0x90h |
|
Создано: 19 ноября 2011 12:03 · Поправил: bowrouco · Личное сообщение · #27 PE_Kill Это ты троль. Итак по пунктам: 1. Я не говорил что нельзя юзать VEH. В вашем варианте с #PG и вообще с блокированием страниц в памяти это не приемлимо, ибо в пределах страницы помимо нужного кода есть есчо много левого. В данном случае возникает несколько десятков фолтов. Но это в данном примере не существенно, так как пример простой и собран чтобы показать как выполняется маршрутизация, а не как юзать IDP, я специально удалил левые файлы, ибо для понимания не нужно знать в данном случае что такое IDP, как релоцируется образ и прочие не нужные детали. В оптимальном варианте может быть всего несколько фолтов, либо вообще их может не быть, это уже детали реализации, зависящие от апи и не имеют отношения к самому механизму отложенной передачи управления. 2. Это не патч. Образа нет в памяти, есть код в буфере, с которым можно делать что угодно. Оригинальный модуль не изменяется. Вы не сможите обнаружить подобного рода хак никаким существующим детектором. 3. Релокация образа необходима для стековой или поточной маршрутизации, именно для того, чтобы не трассировать код и небыло лишних трапов. 4. В новой W8 трап процессинг остался не изменным. 5. Ответ для ARCHANGEL, не для твердолобых типа PE_Kill. |
|
Создано: 19 ноября 2011 12:14 · Личное сообщение · #28 bowrouco пишет: В данном случае возникает несколько десятков фолтов. Но это в данном примере не существенно, так как пример простой и собран чтобы показать как выполняется маршрутизация А у тебя других и нет, у тебя все примеры либо просто чтобы..., либо не оптимизированы, либо код старый и т.д. Зациклился на VX, нашел детекторы и раз их обошел, то теперь всем говорит, что патч - гавно, а, то что при этом портит системную структуру и генерит кучу фолтов - это фигня, главное детекторы не видят. Так зачем столько извратов, сломал структуру, получил фолт и иди трапом до начала API, это хоть работать везде будет. Короче как обычно бред один от тебя. ----- Yann Tiersen best and do not fuck |
|
Создано: 19 ноября 2011 12:19 · Личное сообщение · #29 bowrouco Весь твой бред не читал, но основная суть видимо в том чтобы заменить ненавистный тебе патч на "патч от Инде", то есть православный. Вроде как основная идея твоего IDP (или как-там называется твой двиг, чето на четыре буквы, ББПЕ?) в организации передачи управления нестандартным способом с использованием исключений и т.д. и т.п. Скажи мне, дружище, в каких проектах (малварь, энтерпрайз) был задействован твой двиг и где с ними можно ознакомиться (в случае малвари можешь кинуть MD5 или просто аверское имя). За три года существования в разных вариантах, при непомерной крутизне методы, его уже должны были применить где-нибудь. p.s. Мне тут сказали, что ты постишь свои ресерчи на дваче. Я прослезился. |
|
Создано: 19 ноября 2011 12:20 · Поправил: bowrouco · Личное сообщение · #30 |
. 1 . 2 . 3 . >> |
eXeL@B —› Программирование —› Подскажите новичку по перехвату Api функций |