Сейчас на форуме: UniSoft, laslo, bartolomeo (+5 невидимых)

 eXeL@B —› Программирование —› Подскажите новичку по перехвату Api функций
. 1 . 2 . 3 . >>
Посл.ответ Сообщение

Ранг: 2.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 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



Ранг: 60.6 (постоянный), 87thx
Активность: 0.060
Статус: Участник

Создано: 17 ноября 2011 17:21 · Поправил: Kaimi
· Личное сообщение · #2

Каким софтом можно подсмотреть саму функцию kernel32
Любым дизассемблером, например, IDA.


GetVolumeInformationA возвращает 0 (наверное потому что не знаю в какой регистр писать и в один ли )
А с GetVersionExA вообще труба каким образом и как там идет возврат.
К сожалению приходится пользоватся почти наугад, завести на 64 битном 4 ядерном проце SoftIce не удалось а в виртуалке проблемы с видеодрайвером.
Да и мешает еще одна проблема последний раз на асме писал лет 10 назад (уже с трудом что-то вспоминается).

Может в таком случае стоит взять detours или easyhook и не заморачиваться с разбором функций и ассемблером?




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 17 ноября 2011 17:28
· Личное сообщение · #3

http://wasm.ru/article.php?article=apihook_1
http://wasm.ru/article.php?article=apihook_2
http://wasm.ru/article.php?article=apihook_3

-----
Yann Tiersen best and do not fuck




Ранг: 2.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 17 ноября 2011 17:28
· Личное сообщение · #4

Может в таком случае стоит взять detours или easyhook и не заморачиваться с разбором функций и ассемблером?

Спасибо за совет. Но у меня задача академическая. Я хочу улучшить защиту для своей программы. Но любую защиту можно сломать, поэтому сделал мишешь и её ломаю. По этой причине именно инъекция. Потому что теоретически представим что программу патчить нельзя (не будет свои функции выполнять или 10001 проверка положем).
за ida спасибо посмотрю. По практиве пробовал олькой не разобрался как они работают (сложновато для меня - куча ссылок с мета на место в итоге путаешься в показаниях)



Ранг: 0.0 (гость)
Активность: 0.250
Статус: Участник

Создано: 17 ноября 2011 17:31
· Личное сообщение · #5

Freeon
На сях или делфи пишется 5 минут, готового кода как говна, только выбирай, если конечно не смущает авер.
Юзермод, можешь использовать OllyDbg.
С перехватом пиречисленных функций нет проблем, если нужен только асм жди Инди.

>Все они находятся в kernel32.dll, что усложняет задачку

Улыбнуло.



Ранг: 189.9 (ветеран), 334thx
Активность: 0.30
Статус: Участник

Создано: 17 ноября 2011 17:58
· Личное сообщение · #6

Freeon вот --> тут <-- почитай.



Ранг: 47.7 (посетитель), 17thx
Активность: 0.090
Статус: Участник

Создано: 17 ноября 2011 20:06
· Личное сообщение · #7

Я даже не читал топик, кроме названия. Думаю угадаю. Перехват - патч. Патч не годно. Вы портите ось. Посему в биореактор вам дорога.



Ранг: 301.4 (мудрец), 194thx
Активность: 0.170.01
Статус: Участник

Создано: 17 ноября 2011 20:22
· Личное сообщение · #8

Ну и в чем проблема в GetVolumeInformationA и GetVersionExA? Читаешь из [esp+4], или по какому там окажется смещению, указатель-аргумент. Правишь поля структуры, относительно полученного смещения, и все.



Ранг: 2.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 17 ноября 2011 20:28
· Личное сообщение · #9

Всем спасибо заработало!




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 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.




Ранг: 47.7 (посетитель), 17thx
Активность: 0.090
Статус: Участник

Создано: 18 ноября 2011 01:56
· Личное сообщение · #11

ARCHANGEL

Отложенная передача управления.




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 18 ноября 2011 05:53
· Личное сообщение · #12

ARCHANGEL пишет:
Я, видимо, чего-то не понимаю. Многократно видел подобные посты от Клерка, и назрел вопрос.

Ну если ты не понял, то клерк оперирует выдуманными технологиями и понятиями и неприемлет ничего другого, считая, что кроме его илитной архитектуры и терминологии нет вообще ничего, только мусор.

Причем тут граф? Если ты привел пример с API функциями, то можно сделать похукать экспорт модуля к себе и фильтровать. Если прот чекает валидность экспорта, то можно заюзать секцию релоков модуля или выделить память пониже модуля, и пофиксить модулю SizeOfImage и/или размеры секций. Можно использовать PAGE_GUARD или Dr регистры, с их хендлингом в KiUserExceptionDispatcher или VEH.

-----
Yann Tiersen best and do not fuck




Ранг: 47.7 (посетитель), 17thx
Активность: 0.090
Статус: Участник

Создано: 18 ноября 2011 08:15
· Личное сообщение · #13

PE_Kill

Много что можно, давайте на примере. Как WriteConsole() захачить, так чтобы без порчи(чтоб рку ничего не видал), #PG и #DB не годится, ибо первое однократно и асинхронно с другими потоками, второе не подхолит так как всего четыре брейка.




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 18 ноября 2011 09:40
· Личное сообщение · #14

Ты помешался на VX, это форум исследования защиты программного обеспечения, при чем здесь рку? Это протектор, менеджер лицензий? Протекторы не могут использовать все методы антируткитов. Допустим прот спалил что похукана LoadLibrary, что ему делать, убивать защищенное приложение? Тогда юзерам сразу нужно писать, что программа не работает с антивирусами и проактивками.

Собственно поэтому ответы здесь именно в контексте защиты программного обеспечения. Для одной WriteConsole я бы переправил RVA экспорта функции в экспорте на секцию экспорта и вписал туда forward на свою DLL. Таким образом RVA будет валидным, а GPA вернет адрес моей функции. А, что на это скажет рку мне срать, ибо у меня не трой.

-----
Yann Tiersen best and do not fuck





Ранг: 568.2 (!), 465thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 18 ноября 2011 10:44
· Личное сообщение · #15

Freeon пишет:
Каким софтом можно подсмотреть саму функцию kernel32

Про OLLYDBG что небуть слыхал,SoftIce это эспонат музея
Так хучить вообще не айс и некрасиво.
Code:
  1. //GetVolumeInformation
  2. /*361024*/  MOV ESI,0
  3. /*361029*/  MOV EAX,0
  4. /*36102E*/  ADD EAX,B4DBBF89
  5. /*361033*/  MOV EAX,ESI
  6. /*361035*/  RETN

желательно делать переход на хученную функу а потом подменять значение а так хучить это какоето варворство( если ты конечно не начинающий троянщик те варворы вообще конченные:s6 а так пример кода хороший нашёл

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.





Ранг: 392.8 (мудрец), 108thx
Активность: 0.260.01
Статус: Участник
REVENGE сила, БеХоЦе могила

Создано: 18 ноября 2011 11:06
· Личное сообщение · #16

Freeon
А почему исключается патч? Можешь ты выложить код с проверкой целостности?

-----
StarForce и Themida ацтой!





Ранг: 1131.7 (!!!!), 447thx
Активность: 0.670.2
Статус: Участник

Создано: 18 ноября 2011 13:00 · Поправил: Gideon Vi
· Личное сообщение · #17

Вот интересно, почему до сих пор ни кто кроме Клерка не сказал автору, что защищать приложение своими кривыми хуками - ?




Ранг: 392.8 (мудрец), 108thx
Активность: 0.260.01
Статус: Участник
REVENGE сила, БеХоЦе могила

Создано: 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 ацтой!





Ранг: 1131.7 (!!!!), 447thx
Активность: 0.670.2
Статус: Участник

Создано: 18 ноября 2011 13:43
· Личное сообщение · #19

Maximus пишет:
Автор хочет не защитить приложение, а сломать.


Freeon пишет:
Я хочу улучшить защиту для своей программы


не?




Ранг: 392.8 (мудрец), 108thx
Активность: 0.260.01
Статус: Участник
REVENGE сила, БеХоЦе могила

Создано: 18 ноября 2011 14:15 · Поправил: Maximus
· Личное сообщение · #20

Gideon Vi
Хуками он хочет не защитить приложение, а сломать. Но вектор изначально задан не правильно.
Через хуки ломать никто не будет, будут делать инлайн патч. А все проверки на целостность обходятся элементарно путем подмены измененных байтов на первоначальные при считывании данных в память.

Freeon смирись с неизбежностью, приложение все равно сломают. Лучше направь свои силы на улучшение программы, а не на ее защиту.

-----
StarForce и Themida ацтой!





Ранг: 1131.7 (!!!!), 447thx
Активность: 0.670.2
Статус: Участник

Создано: 18 ноября 2011 16:09
· Личное сообщение · #21

ну может я не так понял. Автор поправит.



Ранг: 237.0 (наставник), 20thx
Активность: 0.130
Статус: Участник
sysenter

Создано: 18 ноября 2011 19:52
· Личное сообщение · #22

Maximus пишет:
Обход проверок на патч Темида (Хучится 3 функции считывания файла с диска, и обходится проверка прота........

Обычно хватает одного перехвата CreateFileW.

-----
продавец резиновых утёнков




Ранг: 47.7 (посетитель), 17thx
Активность: 0.090
Статус: Участник

Создано: 18 ноября 2011 20:00 · Поправил: bowrouco
· Личное сообщение · #23

PE_Kill

Вопрос:

> Нам нужно выполнить перехват этой функции, цель - фильтровать некоторые входные параметры (типичная задача).

Ответ:

> Отложенная передача управления.

Комент:

> Ты.. далее идёт высер и есчо делее:

> Для одной WriteConsole я бы переправил RVA экспорта функции в экспорте на секцию экспорта и вписал туда forward на свою DLL. Таким образом RVA будет валидным, а GPA вернет адрес моей функции. А, что на это скажет рку мне срать, ибо у меня не трой.

Тоесть бредятина, не имеющая отношения к вопросу. Это как говорится обосраться. Если нихуя не понимаете, то и писать не нужно. Вы кроме как код патчить не начто больше не годны, тупой по простому говоря. Школота возамнившая себя хз чем.




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 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.




Ранг: 47.7 (посетитель), 17thx
Активность: 0.090
Статус: Участник

Создано: 19 ноября 2011 07:43
· Личное сообщение · #25

ARCHANGEL

9d15_19.11.2011_EXELAB.rU.tgz - IDPxSrt.zip




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 19 ноября 2011 11:39
· Личное сообщение · #26

ARCHANGEL я же говорю, что он троль:

Code:
  1.          push offset VEH
  2.          push 0
  3.          %CALLIDP IDP_ADD_VEH


Code:
  1.          mov eax,PL2
  2.          mov byte ptr [eax],0EAH   ; Jmp far
  3.          mov dword ptr [eax + 1],offset Stub
  4.          mov word ptr [eax + 5],cs


Да, да - это не VEH и не патч, это отложенная передача управления! Я уж не говорю о том, что для фильтра одной бедной апи делается перезагрузка имейджа в памяти, трассировка кода и тонна атсос виолейшенов, что естественно не работает на новых ОС.

-----
Yann Tiersen best and do not fuck


| Сообщение посчитали полезным: 0x90h

Ранг: 47.7 (посетитель), 17thx
Активность: 0.090
Статус: Участник

Создано: 19 ноября 2011 12:03 · Поправил: bowrouco
· Личное сообщение · #27

PE_Kill

Это ты троль. Итак по пунктам:

1. Я не говорил что нельзя юзать VEH. В вашем варианте с #PG и вообще с блокированием страниц в памяти это не приемлимо, ибо в пределах страницы помимо нужного кода есть есчо много левого. В данном случае возникает несколько десятков фолтов. Но это в данном примере не существенно, так как пример простой и собран чтобы показать как выполняется маршрутизация, а не как юзать IDP, я специально удалил левые файлы, ибо для понимания не нужно знать в данном случае что такое IDP, как релоцируется образ и прочие не нужные детали. В оптимальном варианте может быть всего несколько фолтов, либо вообще их может не быть, это уже детали реализации, зависящие от апи и не имеют отношения к самому механизму отложенной передачи управления.

2. Это не патч. Образа нет в памяти, есть код в буфере, с которым можно делать что угодно. Оригинальный модуль не изменяется. Вы не сможите обнаружить подобного рода хак никаким существующим детектором.

3. Релокация образа необходима для стековой или поточной маршрутизации, именно для того, чтобы не трассировать код и небыло лишних трапов.

4. В новой W8 трап процессинг остался не изменным.

5. Ответ для ARCHANGEL, не для твердолобых типа PE_Kill.




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 19 ноября 2011 12:14
· Личное сообщение · #28

bowrouco пишет:
В данном случае возникает несколько десятков фолтов. Но это в данном примере не существенно, так как пример простой и собран чтобы показать как выполняется маршрутизация

А у тебя других и нет, у тебя все примеры либо просто чтобы..., либо не оптимизированы, либо код старый и т.д. Зациклился на VX, нашел детекторы и раз их обошел, то теперь всем говорит, что патч - гавно, а, то что при этом портит системную структуру и генерит кучу фолтов - это фигня, главное детекторы не видят. Так зачем столько извратов, сломал структуру, получил фолт и иди трапом до начала API, это хоть работать везде будет. Короче как обычно бред один от тебя.

-----
Yann Tiersen best and do not fuck




Ранг: 145.8 (ветеран), 191thx
Активность: 0.140.36
Статус: Участник

Создано: 19 ноября 2011 12:19
· Личное сообщение · #29

bowrouco

Весь твой бред не читал, но основная суть видимо в том чтобы заменить ненавистный тебе патч на "патч от Инде", то есть православный. Вроде как основная идея твоего IDP (или как-там называется твой двиг, чето на четыре буквы, ББПЕ?) в организации передачи управления нестандартным способом с использованием исключений и т.д. и т.п. Скажи мне, дружище, в каких проектах (малварь, энтерпрайз) был задействован твой двиг и где с ними можно ознакомиться (в случае малвари можешь кинуть MD5 или просто аверское имя). За три года существования в разных вариантах, при непомерной крутизне методы, его уже должны были применить где-нибудь.

p.s.
Мне тут сказали, что ты постишь свои ресерчи на дваче. Я прослезился.



Ранг: 47.7 (посетитель), 17thx
Активность: 0.090
Статус: Участник

Создано: 19 ноября 2011 12:20 · Поправил: bowrouco
· Личное сообщение · #30

PE_Kill

Есчо оправдания есть ?

> Мне тут сказали, что ты постишь свои ресерчи на дваче. Я прослезился.

Я не знаю что такое двач.


. 1 . 2 . 3 . >>
 eXeL@B —› Программирование —› Подскажите новичку по перехвату Api функций
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати