Сейчас на форуме: 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 |
|
Создано: 19 ноября 2011 16:37 · Личное сообщение · #2 Alchemistry Потому что есть функции без пролога например. Есть функции не экспортируемые. Приведу в пример шадов - там очень сложно чтото контролировать на низком уровне и вообще работать с ним изза того, что там мало чего есть в экспорте. Это требует использования всевозможных конструкторов, морфа и прочих способов выделения нужного кода. Например нет способа приемлемого сформировать даже т-фрейм, тоесть поставить свой вектор в идт и чтото вызывать из системы в нём. Для использования моих идей нужно очень хорошо знать реализацию не только механизмов, но и мелких деталей. Но вы забываете про требования - у меня во первых идёт недетект, только потом всё остальное. Выше я уже писал это. |
|
Создано: 19 ноября 2011 16:40 · Личное сообщение · #3 |
|
Создано: 19 ноября 2011 16:48 · Личное сообщение · #4 |
|
Создано: 19 ноября 2011 16:52 · Личное сообщение · #5 |
|
Создано: 19 ноября 2011 16:56 · Личное сообщение · #6 bowrouco пишет: Если вы всё про колбеки, то в конце эмуляции дёргается нулевой. И в процессе обработки иногда тоже. CB_DumpCPUContext - видимо вы авер, раз гдето нашли эти константы, хотя не удивительно, я давно подозревал. Ну вот ты и слился. CB_DumpCPUContext - нулевой колбек, которому передается контекст CPU и флаги, по другому я просто не знал как ее назвать. Но самое интересное, что она НЕ ВЫЗЫВАЕТСЯ в конце эмуляции, она вызывается везде и всюду, до 200 раз, но после эмуляции НЕ ВЫЗЫВАЕТСЯ, поэтому через нее получить анпакнутый файл нельзя, ламо. ----- Yann Tiersen best and do not fuck |
|
Создано: 19 ноября 2011 17:03 · Личное сообщение · #7 PE_Kill Я же сказал вам номер. И сказал что дёргается много где. И в конце эмуляции вызывается. У меня есчо есть метка с этим колбеком, точнее 3 - VCall, VCallBuffer и VEnd в пределах одной процедуры, посмотрите сами. Так как контекст на стеке, то я и подумал что вы про неё говорите. Анпак и эмуляция это разделённые между собой операции. И я не все колбеки смотрел. Я смотрел только то, что мне было нужно. Например я хотел узнать как этот продукт использует статические сигнатуры - я это узнал. Как оно выполняет дополнительные проверки я не знаю, ибо там они использовали виртуализацию своего же кода(в сигнатуре эти хэндлеры описаны), в которой копаться желания нет. Не пойму чем вы меряетесь, я тоже могу задать контрольный вопрос, на который вы не ответите. Но это будет слишком толсто как и у вас |
|
Создано: 19 ноября 2011 17:21 · Личное сообщение · #8 bowrouco пишет: И в конце эмуляции вызывается. В конце эмуляции оно вызывается при копировании буфера, только если буфер больше 1к и если веб не уверен что файл анпакнулся, и при этом с контекста взять буфер с файлом нельзя, так что это слив. >> Анпак и эмуляция это разделённые между собой операции. Для разных пакеров по разному, для PECRYPT, FLY-CODE, .... эмуляции и анпак одно и тоже, так что не надо. bowrouco пишет: я тоже могу задать контрольный вопрос, на который вы не ответите. Ну смысла уже нет, так как ты слился. Но даже если и задашь, то врятли его кто то кроме тебя его поймет, но можешь попробовать. ----- Yann Tiersen best and do not fuck |
|
Создано: 19 ноября 2011 17:40 · Личное сообщение · #9 PE_Kill > В конце эмуляции оно вызывается при копировании буфера Изначально вы никаких условий не задавали. > эмуляции и анпак одно и тоже, так что не надо. Цикл главный в анпакере вызывает эмулятор. В этом смысле оно единое. Но эмулятор сам по себе независит в общем от анпакера(в процессе эмуляции). Также и сигнатурный детектор непосредственно не связан с эмулем. |
|
Создано: 19 ноября 2011 17:45 · Личное сообщение · #10 bowrouco пишет: Изначально вы никаких условий не задавали. Я вообще не могу условия задавать, это же не мой продукт, у него своя логика. Просто ты сказал, что это плагин распаковщик, с колбеками для этих целей, значит колбек типа SetUnpackedFile должен быть. Я знаю что такого нет, вот и спросил у тебя. При этом я сказал про 0 колбек и после этого ты про него заговорил, а там вообще стоит заглушка retn если что. В общем уже ясно, что ты не в теме дальше я просвещать тебя про FlyCode не буду. ----- Yann Tiersen best and do not fuck |
|
Создано: 19 ноября 2011 17:50 · Поправил: bowrouco · Личное сообщение · #11 PE_Kill То что по моей инфе ты продебажил ниочём не говорит. Я вообще надстроку никогда не рассматривал(в смысле при описании), один раз только чтоб запустить отладку. Какая разница что там заглушки стоят. А возможность какого либо контроля это не только колбеки, я например через них и через сервисы код не грузил в эмулятор, который хотел потестить. Это не нельзя, только потому что нет подходящего сервиса. |
|
Создано: 19 ноября 2011 17:53 · Личное сообщение · #12 bowrouco пишет: Это не нельзя, только потому что нет подходящего сервиса. Есть, но как я уже сказал выше обучать тебя я больше не буду. ----- Yann Tiersen best and do not fuck | Сообщение посчитали полезным: Alchemistry |
|
Создано: 19 ноября 2011 18:15 · Личное сообщение · #13 |
|
Создано: 19 ноября 2011 18:30 · Личное сообщение · #14 bowrouco Давайте вернёмся к теме про патчи и перехваты, ибо тема флая - это, конечно, очень интересно, но как-то странно читать про неё в этом топе. Я смотрел пример, который вы запостили. Внутри функции Code:
я вижу потуги загрузить через LdrLoadDll основной ехе-модуль. Этому предшествует работа с критической секцией через LdrLoaderLcok/Unlock, установка VEH, взведение флага TF, что, собственно, и приводит к попаданию в VEH-обработчик. Зачем? ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 19 ноября 2011 18:44 · Личное сообщение · #15 ARCHANGEL ну что же ты тупишь, клерк же написал, что эту часть он специально убрал из сорсов, т.к. она не важна. Ну а если кратко, то клерк ломает системную структуру, которую вызывает предыдущая функция, в VEH_Handler он правит адрес и патчит код вызова интересующей апи. Короче бред, представляю какие тормоза в потоках будут, тут в одном то жутко тормозит, да и практического применения не вижу. ----- Yann Tiersen best and do not fuck |
|
Создано: 19 ноября 2011 18:52 · Поправил: ARCHANGEL · Личное сообщение · #16 PE_Kill Я понял, что код морфится и там уже патчится начало функции путём вставки опкода дальнего перехода. Т.е. код внутри модуля остаётся нетронутым. Code:
Да, тормозит сильно, тут без вопросов. Но я говорю про invoke LdrInitialize. Тьфу, дошло. В буфер морфится код, который ранее принадлежал ехе-модулю. Далее находится начало заталкивания параметров перехватываемой функции в стек, и переадресуется на перехватчик. Это всё, конечно, весело, но не решает сформулированную мной задачу - если неизвестно, откуда будет сделан вызов (многослойный протектор), то перехватить так ничего не удастся. ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 19 ноября 2011 19:04 · Поправил: PE_Kill · Личное сообщение · #17 Это имейдж переносится в буфер и перезагружается. Только не на всех виндах это работает. ARCHANGEL пишет: Это всё, конечно, весело, но не решает сформулированную мной задачу - если неизвестно, откуда будет сделан вызов (многослойный протектор), то перехватить так ничего не удастся. Клерк выше признался, что для каждой апи он кодит такую вот хероту и больше это ни на что не способно, так что тролит как обычно. ----- Yann Tiersen best and do not fuck |
<< . 1 . 2 . 3 . |
eXeL@B —› Программирование —› Подскажите новичку по перехвату Api функций |