Сейчас на форуме: 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



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

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

Alchemistry

Потому что есть функции без пролога например. Есть функции не экспортируемые. Приведу в пример шадов - там очень сложно чтото контролировать на низком уровне и вообще работать с ним изза того, что там мало чего есть в экспорте. Это требует использования всевозможных конструкторов, морфа и прочих способов выделения нужного кода. Например нет способа приемлемого сформировать даже т-фрейм, тоесть поставить свой вектор в идт и чтото вызывать из системы в нём.

Для использования моих идей нужно очень хорошо знать реализацию не только механизмов, но и мелких деталей. Но вы забываете про требования - у меня во первых идёт недетект, только потом всё остальное. Выше я уже писал это.



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

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

bowrouco

Ну ясно все с тобой. С этого и надо было начинать. Ты пишешь для себя и ради развлечения, т.е. любительский лабораторный код. Все я off.



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

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

Alchemistry

В общем верно, но на счёт любительского я не согласен. При конкретном условии и требованиям к конечному коду мне кажется задачу решу только я. Хотя не совсем понятно что понимать под любительским. Как по мне так весь софт(и малварь тоже вся) любительский, ибо всё кривое и дырявое.



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

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

bowrouco пишет:
При конкретном условии и требованиям к конечному коду мне кажется задачу решу только я.


Это напалм




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

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

bowrouco пишет:
Если вы всё про колбеки, то в конце эмуляции дёргается нулевой. И в процессе обработки иногда тоже. CB_DumpCPUContext - видимо вы авер, раз гдето нашли эти константы, хотя не удивительно, я давно подозревал.

Ну вот ты и слился. CB_DumpCPUContext - нулевой колбек, которому передается контекст CPU и флаги, по другому я просто не знал как ее назвать. Но самое интересное, что она НЕ ВЫЗЫВАЕТСЯ в конце эмуляции, она вызывается везде и всюду, до 200 раз, но после эмуляции НЕ ВЫЗЫВАЕТСЯ, поэтому через нее получить анпакнутый файл нельзя, ламо.

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




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

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

PE_Kill

Я же сказал вам номер. И сказал что дёргается много где. И в конце эмуляции вызывается. У меня есчо есть метка с этим колбеком, точнее 3 - VCall, VCallBuffer и VEnd в пределах одной процедуры, посмотрите сами. Так как контекст на стеке, то я и подумал что вы про неё говорите. Анпак и эмуляция это разделённые между собой операции. И я не все колбеки смотрел. Я смотрел только то, что мне было нужно. Например я хотел узнать как этот продукт использует статические сигнатуры - я это узнал. Как оно выполняет дополнительные проверки я не знаю, ибо там они использовали виртуализацию своего же кода(в сигнатуре эти хэндлеры описаны), в которой копаться желания нет. Не пойму чем вы меряетесь, я тоже могу задать контрольный вопрос, на который вы не ответите. Но это будет слишком толсто как и у вас




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

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

bowrouco пишет:
И в конце эмуляции вызывается.

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

>> Анпак и эмуляция это разделённые между собой операции.
Для разных пакеров по разному, для PECRYPT, FLY-CODE, .... эмуляции и анпак одно и тоже, так что не надо.

bowrouco пишет:
я тоже могу задать контрольный вопрос, на который вы не ответите.

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

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




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

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

PE_Kill

> В конце эмуляции оно вызывается при копировании буфера

Изначально вы никаких условий не задавали.

> эмуляции и анпак одно и тоже, так что не надо.

Цикл главный в анпакере вызывает эмулятор. В этом смысле оно единое. Но эмулятор сам по себе независит в общем от анпакера(в процессе эмуляции). Также и сигнатурный детектор непосредственно не связан с эмулем.




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

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

bowrouco пишет:
Изначально вы никаких условий не задавали.

Я вообще не могу условия задавать, это же не мой продукт, у него своя логика. Просто ты сказал, что это плагин распаковщик, с колбеками для этих целей, значит колбек типа SetUnpackedFile должен быть. Я знаю что такого нет, вот и спросил у тебя. При этом я сказал про 0 колбек и после этого ты про него заговорил, а там вообще стоит заглушка retn если что. В общем уже ясно, что ты не в теме дальше я просвещать тебя про FlyCode не буду.

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




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

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

PE_Kill

То что по моей инфе ты продебажил ниочём не говорит. Я вообще надстроку никогда не рассматривал(в смысле при описании), один раз только чтоб запустить отладку. Какая разница что там заглушки стоят. А возможность какого либо контроля это не только колбеки, я например через них и через сервисы код не грузил в эмулятор, который хотел потестить. Это не нельзя, только потому что нет подходящего сервиса.




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

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

bowrouco пишет:
Это не нельзя, только потому что нет подходящего сервиса.

Есть, но как я уже сказал выше обучать тебя я больше не буду.

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


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

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

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






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

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

bowrouco
Давайте вернёмся к теме про патчи и перехваты, ибо тема флая - это, конечно, очень интересно, но как-то странно читать про неё в этом топе.

Я смотрел пример, который вы запостили. Внутри функции

Code:
  1. 00401CDA call    _LdrInitialize@0 ; LdrInitialize()


я вижу потуги загрузить через LdrLoadDll основной ехе-модуль. Этому предшествует работа с критической секцией через LdrLoaderLcok/Unlock, установка VEH, взведение флага TF, что, собственно, и приводит к попаданию в VEH-обработчик. Зачем?

-----
Stuck to the plan, always think that we would stand up, never ran.





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

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

ARCHANGEL ну что же ты тупишь, клерк же написал, что эту часть он специально убрал из сорсов, т.к. она не важна. Ну а если кратко, то клерк ломает системную структуру, которую вызывает предыдущая функция, в VEH_Handler он правит адрес и патчит код вызова интересующей апи. Короче бред, представляю какие тормоза в потоках будут, тут в одном то жутко тормозит, да и практического применения не вижу.

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





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

Создано: 19 ноября 2011 18:52 · Поправил: ARCHANGEL
· Личное сообщение · #16

PE_Kill
Я понял, что код морфится и там уже патчится начало функции путём вставки опкода дальнего перехода. Т.е. код внутри модуля остаётся нетронутым.

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


Да, тормозит сильно, тут без вопросов. Но я говорю про invoke LdrInitialize.

Тьфу, дошло. В буфер морфится код, который ранее принадлежал ехе-модулю. Далее находится начало заталкивания параметров перехватываемой функции в стек, и переадресуется на перехватчик. Это всё, конечно, весело, но не решает сформулированную мной задачу - если неизвестно, откуда будет сделан вызов (многослойный протектор), то перехватить так ничего не удастся.

-----
Stuck to the plan, always think that we would stand up, never ran.





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

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

Это имейдж переносится в буфер и перезагружается. Только не на всех виндах это работает.

ARCHANGEL пишет:
Это всё, конечно, весело, но не решает сформулированную мной задачу - если неизвестно, откуда будет сделан вызов (многослойный протектор), то перехватить так ничего не удастся.

Клерк выше признался, что для каждой апи он кодит такую вот хероту и больше это ни на что не способно, так что тролит как обычно.

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



<< . 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 » Выход » ЛС
   Для печати Для печати