Сейчас на форуме: jinoweb, bartolomeo, rmn (+4 невидимых)

 eXeL@B —› Программирование —› Перехват прерываний и исключений
<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . >>
Посл.ответ Сообщение

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

Создано: 09 декабря 2013 15:35
· Личное сообщение · #1

Руководствуясь Хоглундом и Батлером на тему перехват прерываний и исключений , написать и запустить драйвер получается но перехват не выходит, пытался перехватить как 0x04 OF так и 0x13 ошибки доступа к памяти, запускал на VB xp 32 с одним процессором, но увы, не опытность даёт знать, вот код на Си который вышел:

init.c:
Code:
  1. #include <ntddk.h>
  2. #include "IDT.c"
  3.  
  4. #define MAKELONG( a , b )( ( LONG ) ( ( ( USHORT ) ( a ) ) | ( ( ULONG ) ( ( USHORT ) ( b ) ) ) << 16 ) )
  5.  
  6. #define NT_SYSTEM_SERVICE_INT 0x13
  7.  
  8. ULONG RealSystemPtr;
  9.  
  10. void MyInt()
  11. {
  12.          __asm
  13.          {
  14.                  pushad
  15.                  pushfd
  16.                  push fs
  17.                  mov bx , 0x30
  18.                  mov fs , bx
  19.                  push ds
  20.                  push es
  21.          }
  22.          
  23.          DbgPrint("Is MyInt");
  24.          
  25.          __asm
  26.          {
  27.                  pop es
  28.                  pop ds
  29.                  pop fs
  30.                  popfd
  31.                  popad
  32.                  jmp RealSystemPtr;
  33.          }
  34. }
  35.  
  36. void Hook()
  37. {
  38.          IDTINFO idt_info;
  39.          IDTENTRY * idt_entries;
  40.          IDTENTRY * int2_entry;
  41.          
  42.          __asm sidt idt_info
  43.          
  44.          idt_entries = ( IDTENTRY * ) MAKELONG( idt_info.LowIDTbase , idt_info.HiIDTbase );
  45.          
  46.          RealSystemPtr = MAKELONG( idt_entries[ NT_SYSTEM_SERVICE_INT ].LowOffset ,
  47.                                                                              idt_entries[ NT_SYSTEM_SERVICE_INT ].HiOffset );
  48.                                                                                     
  49.          int2_entry = &idt_entries[ NT_SYSTEM_SERVICE_INT ];
  50.          
  51.          __asm
  52.          {
  53.                  cli
  54.                  lea eax , MyInt
  55.                  mov ebx , int2_entry
  56.                  mov [ ebx ] , ax 
  57.                  shr eax , 16
  58.                  mov [ ebx + 6 ] , ax
  59.                  sti
  60.          }
  61.  
  62. void DriverUnload( IN PDRIVER_OBJECT DriverObject );
  63.  
  64. NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject , IN PUNICODE_STRING RegPath )
  65. {
  66.          DriverObject -> DriverUnload = DriverUnload;
  67.          Hook();
  68.          return STATUS_SUCCESS;
  69. }
  70.  
  71. void DriverUnload( IN PDRIVER_OBJECT DriverObject )
  72. {
  73.          DbgPrint("Bye!\n");
  74. }


IDT.c
Code:
  1. typedef struct
  2. {
  3.          USHORT IDTLimit;
  4.          USHORT LowIDTbase;
  5.          USHORT HiIDTbase;
  6. }        IDTINFO ;
  7.  
  8. #pragma pack( push , 1 )
  9. typedef struct
  10. {
  11.          USHORT LowOffset;
  12.          USHORT selector;
  13.          UCHAR   unused_lo;
  14.          unsigned char unused_hi : 5;
  15.          unsigned char DPL : 2;
  16.          unsigned char P : 1;
  17.          USHORT HiOffset;
  18. } IDTENTRY ;
  19. #pragma pack( pop )




Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 20 января 2014 19:24
· Личное сообщение · #2

Перевод разделов 1 - 13 (кроме IA-32e, раздел 14, и детального описания обработчиков прерываний, раздел 15). Надеюсь кому-нибудь поможет, если кто найдет ошибки или неточности, просьба сообщить для исправления. Термины старался переводить, находя их в интернете (в том числе использовались русскоязычные источники Intel и сайты посвященные разработке ОС).

e57a_20.01.2014_EXELAB.rU.tgz - Intel_Vol3C_Ch6_Interrupt_and_exeption_handling.docx

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


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

Создано: 20 января 2014 21:25
· Личное сообщение · #3

MickeyBlueEyes

Можно адрес проверить или вхождение его в граф для вектора. Будем извращаться, запилим один хэндлер для всех векторов



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

Создано: 22 января 2014 19:03 · Поправил: MickeyBlueEyes
· Личное сообщение · #4

Вот я тут пишу фичу по вызову юзермодных апи из ядра ну и возврата назад в ядро, и столкнулся с некой я даже незнаю как назвать проблемой, но подумаете вы что опять я туплю, но нет! Я подключил дебагер всё как нужно делаю, роспишу план действий и подкреплю скринами )
1. В IDT выдяляю себе вектор [83] для того чтобы возвратится из 3 в 0.
2. Ставлю на этот вектор DPL=3, чтобы его можна было заюзать из 3 кольца,ну и вешаю обработчик.
3. Аттачусь к процесу в котором мне нужно будет заюзать апи.
4. Выделяю там память, делаю её общей с ядром с помощю IoAllocateMdl. (Память выделяю в PagedPool размером 512байт).
5. Начальный адрес этой памяти будет указывать на наш шел. Записываю в начало шела [ mov edi,xxxx ] где x-айди нашей функции в юзермоде, ну это чтобы знать как вернёмся в ядро какая ф-ция отработала, так как не одну же ф-цию планирую вызывать, и следом int 83.
6. Пишу этот шел в наше начало выделеной памяти.
7. Из нашей памяти беру память для стека. pESP=pShell+508, стек же растёт к меньшим адресам, стека должно хватать.
8. pESP - указатель на int. Пишу в pESP[0]=pShell. pESP -стек для вызываемой ф-ции из юзермода, в pESP[0]-собственно точка возврата, так как аргументов ф-ция не принимает.
9. Аттачимся к процессу, заливаю такое:
Code:
  1. __asm{
  2.   push 23h
  3.   push pESP
  4.   pushfd
  5.   push 1Bh
  6.   push pFunc
  7.   iretd


10.Слежу под отладчиком, прыгаем на функцию, функция отрабатывает, return и делает ретурн на наш шел, всё отлично, шел отрабатывает.
Code:
  1.   mov edi,xxxx
  2.   int 83

11. Попадаем в наш обработчик, и тут первая фича которую я не вкурил, в юзермоде fs равнялся 0, ну я его и не загружал, ну как я понял, селектор fsa юзермода можна загрузить только в юзермоде, тоесть ещё нужно писать шел(mov fs,xx) перед тем как выполнить функцию из юмода? Ну у меня тестовое приложения, fs был не задействован, ну суть не в этом. Но прыгнув в обработчик [83], fs сам стал корректным для ядра. Не понял, переключения задач не было tr не менялся. Ну и ладно, пока это не проблема номер, но буду признателен если кто подскажет.
12. Тут самое интересно. В обрабочике, смотрим айди отработаной ф-ции, ищем в массиве структуру с этим айди, выбираем сохранёный контекст из найденой структуры, ну как контекст(ebp,esp и EFlags), хвататает.
Всё востанавливаем и джамп на сохранёное место следом за CallBack(пид процесса,имя зарегистированой ф-ции). Скрин номер 1:

Ну собсно колбек и есть тот самый и за ним сразу мы пригаем, проверял я esp и ebp всё сходится с орыгиналами и ефлагс, и тута дохажу с F8 до места выделеным синим, и ищё раз жму, ну что тут может такое произойти?[mov esp, ebp] как бы и всё и получается вот такое:

Ну это так не часто, в основном место такого этого всё забито вот такими вот знаками ????????????????????????????. Ну всего 2 варианта, либо такой скрин либо ??????????????.
Ну что может быть не так? Долго сам пытался понять чесно, аж депресняк начинается (




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

Создано: 22 января 2014 23:25
· Личное сообщение · #5

MickeyBlueEyes

KeUserModeCallback/KiCallUserMode() ?

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

1. Дескриптор наврятле валиден. Далее на втором камне новая IDT.
4. MDL есть описатель региона. Его не достаточно выделить, его нужно отобразить.
7. Стек r/w, да есчо и код(в том же сегменте) executable, тоесть что то у вас тут не в порядке.
11. => выше сказанное не актуально.
=>
> первая фича которую я не вкурил, в юзермоде fs равнялся 0

Селекторы юзермодные по воле христа спасителя загружены будут, или быть может заюзаем ядерные и наткнёмся на фолт ?

> mov esp,ebp

Инструкция сия не может фолты генерить, если она не первая исполнилась и не в начале страницы. Инвалидный трап фрейм.

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

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

Создано: 22 января 2014 23:51 · Поправил: MickeyBlueEyes
· Личное сообщение · #6

1. Один процессор, ну назад в ядро прыгает через прерывание всё гуд.
4. Мдл отображён, KeAttachProcess и следом MmMapLockedPagesSpecifyCache.
7. Да, шел и стек лежит в одной страничной r/w области. Чем это может быть проблемно?
Всё сразу не прочёл )
Ну в ядре fs 0x30, ну в юзер мод кода прыгнул стал 0, но суть не в этом, а в том что после прерывание в юмоде, и попадания в ядро, fs сам становится корректным c 0 на 0x30, можете подсказать почему так происходит?

mov esp,ebp
Да, если например самому написать сразу после CallBack:
Code:
  1.  mov esp,ebp
  2.  pop ebp
  3.  retn 8

То это всё выполнится хорошо, но дальше, а вот что было дальше щас гляну, а то дело было вчера.
Поясните пжл "Инвалидный трап фрейм"

ЗЫ: ну практически такое должно работать?



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

Создано: 23 января 2014 01:13 · Поправил: MickeyBlueEyes
· Личное сообщение · #7

Начал криминалистический анализ, почему сразу то не проверил, значения памяти на которое указывает ebp перед вызовов CallBack и сразу после него отличается, вот так. Но всёровно почему та команда не выполняется,хз. Но после того как я прописал вручную это:
Code:
  1.  mov esp,ebp
  2.  pop ebp
  3.  retn 8

То всё прошло ок, но после ретурна выпало тоже самое что и раньше в mov esp,ebp. Чисто предполагаю что глючит дебагер и просто ест всё сразу вполть до ретурна, ну так чисто догадка.



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

Создано: 23 января 2014 01:22 · Поправил: MickeyBlueEyes
· Личное сообщение · #8

ХА! Протрейсил я до перехода в юмод, и сразу же после iretd в нашем орыгинальном ebp адресс указывает на нули, и так протрейсил я всё, вернулся в ядро всё так и осталось по нулям. Почему так)
Несколько часов спустя.......
В юмод прыгаю так, всёрогно нули.
Code:
  1. #define sysexit() {                             \
  2.                           __asm _emit 0x0F    \
  3.                           __asm _emit 0x35    \ 
  4.                         }
  5.  
  6. __asm {
  7.   mov ecx, pESP
  8.   mov edx, pFunc
  9. }
  10. sysexit();


Что процессор может делать с памятью?




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 23 января 2014 09:50
· Личное сообщение · #9

Во-первых, пользуйся кнопкой "Правка", не создавай сообщения подряд.
А во-вторых, я бы не слишком надеялся на отладчик, когда дело касается совсем низкого уровня, он сам хукает часть низкого уровня и может влиять на работу. В критичных местах лучше дебажный вывод ставить или краш и смотреть пост-мортем.

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


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

Создано: 23 января 2014 11:01
· Личное сообщение · #10

MickeyBlueEyes

> 7. Да, шел и стек лежит в одной страничной r/w области. Чем это может быть проблемно?

NX.

> можете подсказать почему так происходит?

iret не изменяет fs.



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

Создано: 23 января 2014 11:51
· Личное сообщение · #11

Dr0p пишет:
iret не изменяет fs.


Если CPL селектора сегмента данных (ds,es,fs и gs) равен CS.CPL, то iret при возврате в менее привилегированный сегмент кладет 0 в соответствующий селектор, чтобы предотвратить использование менее привилегированным кодом более привилегированных селекторов
Archer пишет:
я бы не слишком надеялся на отладчик, когда дело касается совсем низкого уровня

+1
Еще и виртуалка может подглючивать, самый низкий уровень правильней отлаживать на реальном железе

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

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

Создано: 23 января 2014 18:36 · Поправил: MickeyBlueEyes
· Личное сообщение · #12

Ну вот заменил я и прыжок с юмода в кмод на sysenter, всё по прежнему, память на которую указывать должен мой родной ebp имеет вначале все забито нулями, затем другие значения. Перед прижком в юмод, по адресу который лежит в ebp, изменяется фиксированое количество памяти, примерное ebp + 120байт, такое ощущения что перед прижком в юмод либо через iretd | sysexit, затирается стековая память моего драйвера.




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

Создано: 23 января 2014 20:43
· Личное сообщение · #13

spinz

> Если CPL селектора сегмента данных (ds,es,fs и gs) равен CS.CPL, то iret при возврате в менее привилегированный сегмент кладет 0 в соответствующий селектор

Может это и так(допускаю вероятность, так как не знаю). А ман лень смореть. В любом случае это поведение камня не стандартное, так же как и обнуление рпл при нулевом селекторе. Возможно оно разное на интеле и амд. Честно говоря мне всёравно. Если содержимое сегментных регистров валидно, то нет траблов с ними. Вы же цитируете сюда маны и не можите тупо прыгнуть на другой кпл

> заменил я и прыжок с юмода в кмод на sysenter, всё по прежнему, память на которую указывать должен мой родной ebp

Опять же. Какое отношение rEbp имеет к сисколам ?

У вас память NX вероятно, ну или не выделена. Вообще же как я уже и говорил стопицот раз - полнейшее извращенье. Вменяемый человек не будет в мср вектора писать, чтобы дёрнуть свой код в ядре. Маразм.

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




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

Создано: 23 января 2014 20:48 · Поправил: Dr0p
· Личное сообщение · #14

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

В случае тс - он только начал ядро и архитектуру изучать достаточно тупо дёрнуть халовский рантайм(KeIpiGenericCall(), KeSetAffinityThread() etc) для настройки дескриптора. Сами ISR опенсорсные - trap.asm.

Пойми дружище что твой каждый трабл никто не будет изучать.

Изучил подробно инструкцию sysenter - труъ, вот только в целом сути то не видишь. Можно через используемый ядром диспетчер передать любые данные. Дальше сказать н6ечего, только караемый модерами психоанализ

Решение тс задачи было приведено в начале ветки. В данном случае задача уже смысла не имеет, попёрло обсуждение чисто теории/матчасти.



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

Создано: 23 января 2014 21:49 · Поправил: MickeyBlueEyes
· Личное сообщение · #15

> Опять же. Какое отношение rEbp имеет к сисколам ?

Да никакого, может я не так изложил, просто перед тем как вызвать юмод апи, я же сохраняю ebp, чтобы потом вернувшись из юмода в ядро сразу за вызовом юмод апи, востановить этот ebp и тд... и дальше продолжить выполнения драйвера как нивчём не бывало. Ну и ганяю в юмод c помощю sysexit, и обратно в кернел с помощю sysenter. И как только выполняется sysexit и я попадаю в юмод(fs кстати в этом случае не изменятся и остаётся ядерным = 0x30), мой ранее адрес который в ebp перед вызовом, уже указывает на сплошные нули в памяти, примерно ebp + 100 = 00000....

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

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

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

> У вас память NX вероятно, ну или не выделена. Вообще же как я уже и говорил стопицот раз - полнейшее
> извращенье. Вменяемый человек не будет в мср вектора писать, чтобы дёрнуть свой код в ядре. Маразм.

Ну с памятью которая выделена для стека и кода всё нормуль, да и если бы не нормуль, то это уже была бы другая проблема. "МСР вектора"?
Ну так для справки, прыгать я начал из юмода обратно в кмод, ну с помощю sysentera, просто в SDT увеличиваю лимит до 455, и в какую нить 453 ячейку таблици пишу свою фунцию, и в соот.. ячейку количество байт(аргументов), прыгаю в кмод, результат выполнения фуции юмода лежит на стеке, всё считывается, и всё гуд, не гуд только с моей памятью на которую ссылается ebp перед вызовом апи юмода.
А так реально решить такие проблемы, в рунете можна на пару форумах и всё, да и в европе вроде как такие темы не очень актуальны, не понимаю почему, но в этой сфере намного интересней.
Ну вот как то так )

......
Решил я попробывать воспользоватся регистрами отладки, и залить в один из регистров свой магический адрес, чтобы узнать кто же его изменяет, но виртуалка с виндой подгружается уже с загруженым DR6 в котором бит защиты регистров установлен. И ниобнулить его, ни отладить не получается. Замкнутый круг.




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

Создано: 24 января 2014 20:17
· Личное сообщение · #16

MickeyBlueEyes

> перед тем как вызвать юмод апи, я же сохраняю ebp, чтобы потом вернувшись из юмода в ядро сразу за вызовом юмод апи, востановить этот ebp

Это не просто регистр, он отличается от остальных RGP. Нельзя рвать SFC. Это фундаментальная истина. Наверно ща будет вопрос что за SFC -- тут типо вики есть.

> ганяю в юмод c помощю sysexit

Извращенец, что тут скажешь. Очевидно что не наигрался с этим.

> Решил я попробывать воспользоватся регистрами отладки

Чем моё решение в юзермоде не устраивает ?

- недетект.
- в ядре быстродействие не повышается при использовании дск таблиц.
- в ядро нужно есчо как то попасть.



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

Создано: 24 января 2014 20:27
· Личное сообщение · #17

> Чем моё решение в юзермоде не устраивает ?
Та всем устраивает, только нада в процесс попасть незаметно. Из-за чего и весь сербор с вызовом апи из юмода из ядра. Реально dll подгрузить вручную, так чтобы аверы не пропалили?
Ну регистра отладки я тут пытался использовал чтобы выявить кто мою память изменяет.




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

Создано: 24 января 2014 20:31
· Личное сообщение · #18

MickeyBlueEyes

> Из-за чего и весь сербор с вызовом апи из юмода из ядра.

Что это значит ??

> Реально dll подгрузить вручную, так чтобы аверы не пропалили?

Конечно.



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

Создано: 24 января 2014 20:36 · Поправил: MickeyBlueEyes
· Личное сообщение · #19

> Что это значит ??
Ну тоисть что я не могу подрузить длл в ап процесса незаметно чтобы юзать его апи, и приходится извращатся вызовом апи процесса из ядра. Ну поигрался и харе походу с этим способом, попробую dll загрузить беспалевно тогда.
Ну всёрогно когда то пожжа нада бы всётаки докопатся почему у меня память портилась, так чисто из за спортивного интереса.




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

Создано: 24 января 2014 20:38 · Поправил: Dr0p
· Личное сообщение · #20

MickeyBlueEyes

Проблемы с загрузкой может быть три.

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

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

3. Левый детект. Это типо EMET etc.

Что из этого вам нужно ?



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

Создано: 24 января 2014 20:52
· Личное сообщение · #21

Ну на данный момент пока ничего из этого не пойму. Погуглю, отпишу )




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

Создано: 24 января 2014 21:06
· Личное сообщение · #22

MickeyBlueEyes

Тоесть, не понимаете что спрашиваете и что вам нужно. Не желательно разворачивать логическую цепочку



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

Создано: 24 января 2014 21:09 · Поправил: MickeyBlueEyes
· Личное сообщение · #23

Не всё вкурил. У меня такие аверы как хакшилд и фрост, кароче продвинутая защита для игр, ну если фрост не очень, и у меня с ним практически всё выходит, кроме как загрузить легально длл, то с хшилд всё сложнее, ну покрайней мере такое первое впечетление.




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

Создано: 24 января 2014 21:12
· Личное сообщение · #24

MickeyBlueEyes

Если я этих аверов не знаю, то это совсем фейк. Ну а в аверах так полагаю я разбираюсь лучше чем кто либо.

Защита для игр это не авер, сказали бы прямо что античит. Нужно было гадать 4-ре страницы.



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

Создано: 24 января 2014 21:16
· Личное сообщение · #25

Чесно думал что это одно и тоже понятие, и в мыслях не было скрывать для чего )))




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

Создано: 24 января 2014 21:19 · Поправил: Dr0p
· Личное сообщение · #26

MickeyBlueEyes

Это в корне всё меняет.

Античит как угодно палить может ваши модуля. Тут вам и ядро не поможет. Для начала вам необходимо определить что палится. И вообще, я всё больше склоняюсь к мнению, что сей форум есть сборище гадалок, я одна из них

Воспользуюсь моментом и спрошу. Почему вы сразу не спросили в первом посте "как обойти палевность античитом" ?



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

Создано: 24 января 2014 21:31 · Поправил: MickeyBlueEyes
· Личное сообщение · #27

Ну фрост хукает ядерные апи, там открытие процесса, скрывает процесс, хуки на win32k.sys, драйвера фильтры на клаву и мышу. Шилд там поболее наворотов, но ищё чёто творит с длл с их експортом приложения, у них там по 2 експортируемые функции и всё, запускал смотрел в пеб и что експортирует то тоже самое, скрытые системные dll видно, так чисто поток мыслей) Реально проецировать модули и брать експорты с других мест?
.......
>> Воспользуюсь моментом и спрошу. Почему вы сразу не спросили в первом посте "как обойти палевность античитом" ?
Ну что это важно незнал.




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

Создано: 24 января 2014 21:42
· Личное сообщение · #28

MickeyBlueEyes

> Ну что это важно незнал.

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

> фрост хукает ядерные апи, там открытие процесса

Ну вот уже что то. Дров в студию. Не знаю как, когда и где его разбирать, сделайте это сами.

1. Запускаете детектор патчей, rku, gmer etc. Сморите что и как фильтруется. Желательно и нам показать.
2. Открываете дров идой и находите сами фильтры.
3. Я уверен что лишь не многие сервисы фильтруются и полюбому даже они дырявые.
4. Прорабатываем методы обхода.

Ну в общем пока всё.



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

Создано: 24 января 2014 21:51
· Личное сообщение · #29

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



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

Создано: 25 января 2014 03:50 · Поправил: MickeyBlueEyes
· Личное сообщение · #30

Попробывал я только вот всё, как написано, и вроде как чтото получилось. О фросте, приложил файл что дров хукает и дрова. Дров 2шт под х32 и х64 системы, видно как он проверяет стоят ли хуки на ядерных апихах или не. Ну патчить дров хз, палевно походу, та и хучит он вот что, что из этого может пригодится.

Code:
  1. NtDuplicateObject
  2. NtOpenProcess
  3. NtQuerySystemInformation
  4. NtWriteVirtualMemory
  5. ZW* аналогичные
  6. ---------------------------
  7. NtUserBuildHwndList
  8. NtUserFindWindowEx
  9. NtUserGetForegroundWindow
  10. NtUserSendInput
  11. NtUserWindowFromPoint
  12. ---------------------------


Ну это ядерные, в аттаче полный список хуков на апи свого АП. Приложения свои они покрывает темидой? Реально её росковырять? Дрова не громоздкие можна разобрать. Только не увидел драйверов фильтров на клаву и мышу почемуто, походу их и нету, но при загрузке приложений активно отрубается мыша )
Вот у хакшилд там есть фильтра на мышу и на клаву. И хучи вот так он:

Code:
  1. PAGE   ntkrnlpa.exe!NtDeviceIoControlFile + 26      80579270 4 Bytes  CALL 876D9149 
  2. PAGE   ntkrnlpa.exe!ZwWriteFileGather + 334C        80580822 4 Bytes  CALL 89A78E59 
  3. PAGE   ntkrnlpa.exe!ZwReadVirtualMemory + 8         805B42BE 4 Bytes  CALL 89938A09 
  4. PAGE   ntkrnlpa.exe!ZwWriteVirtualMemory + 8        805B43C8 4 Bytes  CALL 87BD4AF9 
  5. PAGE   ntkrnlpa.exe!ZwProtectVirtualMemory + 8      805B841A 4 Bytes  CALL 87C482F9 
  6. PAGE   ntkrnlpa.exe!NtClose + 19                    805BC53D 4 Bytes  CALL 897D1E69 
  7. PAGE   ntkrnlpa.exe!NtOpenProcess + B               805CB443 4 Bytes  CALL 89B38799 
  8. PAGE   ntkrnlpa.exe!ZwGetContextThread + 2B         805D154D 4 Bytes  CALL 8438AC59 
  9. PAGE   ntkrnlpa.exe!ZwGetContextThread + 5A         805D157C 4 Bytes  CALL 89BA3721 
  10. PAGE   ntkrnlpa.exe!ZwSetContextThread + 2B         805D175D 4 Bytes  CALL 8A559AE1 
  11. PAGE   ntkrnlpa.exe!ZwSetLdtEntries + ECA           805D47C6 4 Bytes  CALL 89D13161 
  12. PAGE   ntkrnlpa.exe!ZwQueryPerformanceCounter + DF  806177BB 4 Bytes  CALL 87F63FE9 
  13.  
  14. Фильтра:
  15. Device  \Driver\Kbdclass \Device\KeyboardClass0                                                                                                                                                                89120E20
  16. Device  \Driver\Kbdclass \Device\KeyboardClass0                                                                                                                                                                  89E02C98
  17. Device  \Driver\Kbdclass \Device\KeyboardClass1                                                                                                                                                                  89120E20
  18. Device  \Driver\Kbdclass \Device\KeyboardClass1                                                                                                                                                                  89E02C98
  19. Device  \Driver\Mouclass \Device\PointerClass0                                                                                                                                                                   89B67198
  20. Device  \Driver\Mouclass \Device\PointerClass0


Вот такие дела. Более подробно завтра, точнее сеня )

eb52_25.01.2014_EXELAB.rU.tgz - exelab.rar

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


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

Создано: 25 января 2014 11:57 · Поправил: Dr0p
· Личное сообщение · #31

MickeyBlueEyes

RVA 0x3836 NtOpenProcess.

Разыменовывается только CID.PID, без валидации ссылки(можно ядерный адрес передать). Остальная работа не представляет интереса - проверка на открытие текущего процесса и разрешение для некоторых по именам(lsass etc).

Процедура защищена сех-ом. Сех открывает процесс и возвращает управление. Тоесть это чистая RC атака на CLIENT_ID. Делаем страницу с этой структурой сторожевой и процесс будет успешно открыт.

--> Link <--

Далее инжект обычный, тоесть лишь не многие сервисы фильтруются.

Ну а работа с пользовательскими модулями тривиальна - загружаем копию модуля с диска и юзаем в обход фильтров.

-
Дров пришлось олькой дизасмить, так как не нашёл тут иду в инструментах. Откуда её слить ?

Хотя олькой удобнее и быстрее

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

| Сообщение посчитали полезным: MickeyBlueEyes, Yoyo
<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . >>
 eXeL@B —› Программирование —› Перехват прерываний и исключений
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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