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





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

Создано: 06 мая 2014 22:25 · Поправил: Dr0p
· Личное сообщение · #2

MickeyBlueEyes

Да, там реализованы две маршрутизации - для недетекта копирует загрузчик и выполняет маршрутизацию для реализации SEH.

Добавлено спустя 13 минут
Честно говоря я всегда полагал, стремился к тому и щас так думаю - мой код полностью чистый, прозрачный и логичный. Унылые скрипты, всякие помеси виньапи, нэйтива и ооп и прочий шлак - вот это не понятно, не логично и не годится.

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

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

Создано: 06 мая 2014 22:56
· Личное сообщение · #3

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




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

Создано: 06 мая 2014 23:07
· Личное сообщение · #4

MickeyBlueEyes

Причём там гуй..

Проецирование используется(?, не помню) для обхода валидаций памяти. Весь нэйтив переносится в безопасный буфер, таким образом выполняется отвязка от файла.

Для сех механизм прост, элементарно фильтруются несколько сервисов, выполняющих проверки NX.



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

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

Причём там гуй..
Ну иконка та же хранится в ресурсах, ресуры надо как-то найти, а либа была загружена не легитимным способом. Ресурсы в целях оптимизации начинает искать по мере надобности, форма и есть тот случай, раз ищет не через записи в пебе, то я и предположил что винда через mapping objects потом ищет нужную длл, и в ней ресурсы, глупо может, так просто варианты свои ) Не берите в голову если бред. И так много инфы за вечер, реализую СЕХ для начала, раз уже зацепился. Опять что-то я много пишу, и скорее всего не в тему



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

Создано: 07 мая 2014 02:26
· Личное сообщение · #6

Dr0p пишет: стремился к тому и щас так думаю - мой код полностью чистый, прозрачный и логичный

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




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

Создано: 07 мая 2014 05:26 · Поправил: Dr0p
· Личное сообщение · #7

F_a_u_s_t

А что с графами не так ?

Там был действительно мозговыносящий код. Лишнего ничего небыло.

Code:
  1. CxMorphEntry proc uses ebx esi edi CxTable:PVOID, JcxEntry:PVOID, GpLimit:PVOID
  2. Local Delta:ULONG, SrcEntry:PVOID
  3. Local JcxHeader:JCC_HEADER
  4.          mov esi,JcxEntry
  5.          lea edi,JcxHeader
  6.          mov ebx,dword ptr [esi + EhAccessFlag]
  7.          mov ecx,ENTRY_HEADER_SIZE/4
  8.          mov eax,esi
  9.          cld
  10.          mov edx,CxTable
  11.          rep movsd
  12.          mov ecx,dword ptr [eax + EhEntryType]
  13.          and ebx,ACCESSED_MASK_FLAG
  14.          and cl,TYPE_MASK
  15.          cmp cl,HEADER_TYPE_JCC
  16.          jne Exit
  17.          test dword ptr [eax + EhJcxType],BRANCH_CX_FLAG
  18.          jz Exit
  19.          mov eax,dword ptr [eax + EhJccType]
  20.          and eax,JCC_TYPE_MASK
  21.          shl eax,5        ; x ENTRY_HEADER_SIZE
  22.          lea eax,[edx + 2 * eax + CX_REPLACE_TABLE_LENGTH]
  23.          test dword ptr [esi - ENTRY_HEADER_SIZE + EhJccType],JCC_X16_MASK
  24.          .if !Zero?
  25.                  add eax,ENTRY_HEADER_SIZE
  26.          .endif
  27.          mov esi,dword ptr [eax + EhBranchLink]
  28.          mov edi,JcxEntry
  29.          and esi,NOT(TYPE_MASK)
  30.          mov SrcEntry,esi
  31.          mov edx,edi
  32.          mov ecx,ENTRY_HEADER_SIZE/4
  33.          rep movsd
  34.          and dword ptr [edx + EhFlink],TYPE_MASK
  35.          and dword ptr [edx + EhBlink],TYPE_MASK and NOT(ACCESSED_MASK_FLAG)    ; &Blink
  36.          mov edi,GpLimit
  37.          mov ecx,JcxHeader.Link.Blink
  38.          mov edi,dword ptr [edi]
  39.          and ecx,NOT(TYPE_MASK)
  40.          mov eax,edi
  41.          or dword ptr [edx + EhAccessFlag],ebx
  42.          sub eax,esi
  43.          or dword ptr [edx + EhFlink],edi
  44.          mov Delta,eax
  45.          or dword ptr [edx + EhBlink],ecx
  46. Do:
  47.          mov eax,dword ptr [esi + EhEntryType]
  48.          mov ecx,dword ptr [esi + EhFlink]
  49.          and eax,TYPE_MASK
  50.          mov edx,Delta
  51.          jnz NoLine
  52. ; Line
  53.          and ecx,NOT(TYPE_MASK)
  54.          jnz IsFlink
  55. ; %HALT
  56.          mov eax,JcxHeader.Link.Flink
  57.          sub edi,ENTRY_HEADER_SIZE
  58.          and eax,NOT(TYPE_MASK)
  59.          and dword ptr [edi + EhFlink],TYPE_MASK
  60.          and dword ptr [eax + EhBlink],TYPE_MASK
  61.          or dword ptr [edi + EhFlink],eax
  62.          or dword ptr [eax + EhBlink],edi
  63.          lea eax,[edi + ENTRY_HEADER_SIZE]
  64.          mov ecx,GpLimit
  65.          mov dword ptr [ecx],eax
  66. Exit:
  67.          xor eax,eax
  68.          ret
  69. IsFlink:
  70.          mov ecx,ENTRY_HEADER_SIZE/4
  71.          rep movsd
  72.          sub edi,ENTRY_HEADER_SIZE
  73.          add dword ptr [edi + EhFlink],edx
  74. IsBlink:
  75.          mov eax,dword ptr [edi + EhBlink]
  76.          and dword ptr [edi + EhAccessFlag],NOT(ACCESSED_MASK_FLAG)
  77.          and eax,NOT(TYPE_MASK)
  78.          .if !Zero?
  79.                  mov ecx,JcxEntry
  80.                  .if SrcEntry == Eax
  81.                         and dword ptr [edi + EhBlink],TYPE_MASK
  82.                  mov dword ptr [edi + EhBlink],ecx
  83.                  .else
  84.                         add dword ptr [edi + EhBlink],edx
  85.                  .endif
  86.          .endif
  87.          or dword ptr [edi + EhAccessFlag],ebx
  88.          add edi,ENTRY_HEADER_SIZE
  89.          jmp Do
  90. NoLine:
  91.          cmp al,HEADER_TYPE_JMP
  92.          jne JccEntry
  93.          mov eax,JcxHeader.BranchLink
  94.          mov ecx,ENTRY_HEADER_SIZE/4
  95.          and eax,NOT(TYPE_MASK)
  96.          rep movsd
  97.          mov ecx,JcxHeader.BranchAddress
  98.          sub edi,ENTRY_HEADER_SIZE
  99.          mov dword ptr [edi + EhBranchLink],eax
  100.          mov dword ptr [edi + EhBranchAddress],ecx
  101.          or dword ptr [edi + EhBranchType],BRANCH_DEFINED_FLAG
  102.          jmp IsBlink
  103. JccEntry:
  104.          ; HEADER_TYPE_JCC
  105.          mov ecx,ENTRY_HEADER_SIZE/4
  106.          rep movsd
  107.          sub edi,ENTRY_HEADER_SIZE
  108.          add dword ptr [edi + EhFlink],edx
  109.          add dword ptr [edi + EhBranchLink],edx
  110.          jmp IsBlink
  111. CxMorphEntry endp


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



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

Создано: 08 мая 2014 19:45
· Личное сообщение · #8

Dr0p пишет:
Да. Предельный случай сис коденга. Особая идеалогия, стремление к знаниям.

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



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

Создано: 10 мая 2014 19:08
· Личное сообщение · #9

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




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

Создано: 12 мая 2014 13:22
· Личное сообщение · #10

spinz

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

Это у тебя умственная патология, раз сделал такой вывод

> понятие графы. С чем их жевать?

Не нужно вам это



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

Создано: 12 мая 2014 19:54 · Поправил: MickeyBlueEyes
· Личное сообщение · #11

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

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




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

Создано: 12 мая 2014 20:51
· Личное сообщение · #12

MickeyBlueEyes

> Если комунить интересен очередной лоадер, то могу и я показать свой велосипед.

Покажте.



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

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

В стиле С++, но без ООП
Правда для вызова точки входа, пришлось из загружаемой длл експортировать какую нить функцию Start и в неё передавать ImageBase через CreateRemoteThread. Ну и в Start я настраиваю импорт и потом call EP, в моих случаях ещё перестраиваю импорт на копии не хученых системных либ. Я ещё незнаю правда как это всё будет работать на x64

Ах да чуть не забыл пароль: www.exelab.ru
cc0e_13.05.2014_EXELAB.rU.tgz - Loader.rar

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


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

Создано: 13 мая 2014 23:32
· Личное сообщение · #14

MickeyBlueEyes

Норм, скрипт изучили. Через несколько лет дойдёте и до системных реализаций



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

Создано: 13 мая 2014 23:41
· Личное сообщение · #15

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


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