· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Перехват участка кода... из вне

<< . 1 . 2 .

Посл.отвђт Сообщенiе


Дата: Май 31, 2004 20:55:57

volodya
>А как эту фразу понимать? Менять на что?

А эээ ммм... на селектор с нужным cpl... :)

http://sbvc.net/articles/17.html
http://sbvc.net/articles/16.html

kaspersky
млин... в 9х никто тебе по лапкам не даст ;) - об этом и речь... см выше - статьи с примерами.


Дата: Май 31, 2004 21:05:27

Ага. Теперь понял. В задницу. Не работает. Вот из-за этого:
            TrapFrame->SegCs = SANITIZE_SEG(ContextFrame->SegCs, PreviousMode);
            if (PreviousMode != KernelMode && TrapFrame->SegCs < 8) {

                //
                // If user mode and the selector value is less than 8, we
                // know it is an invalid selector.  Set it to flat user
                // mode selector.  Another reason we need to check for this
                // is that any cs value less than 8 causes our exit kernel
                // macro to treat its exit trap fram as an edited frame.
                //

                TrapFrame->SegCs = KGDT_R3_CODE | RPL_MASK;
            }



Дата: Май 31, 2004 21:17:38 · Поправил: R4DX

Угу, а в мастдае работало... Там даже "заплатку" помнится кто-то из стороних производителей выпускал... По-моему антивурус какой-то... Не "Антивирус Касперского" ли случаем? :D

[offtop]kaspersky - ты тот самый, что написал "Техника оптимизации программ", что у меня на полке лежит? Мой респект ;) Я в этой книжке (где про память написано) до сих пор не во всем разобрался 8) Давно хотел спросить не связано ли твой ник с ником создателя антивируса?[/offtop]


Дата: Май 31, 2004 21:19:01

Все путают "Касперски" и "Касперский" :)


Дата: Май 31, 2004 21:24:56

8) чувствуется я далеко не первый спрашиваю подобное =)


Дата: Май 31, 2004 21:40:51

просто я не уверен... есть сайт http://www.kaspersky.ru...


Дата: Май 31, 2004 22:16:16

Это Касперского, а не Касперски :)


Дата: Июн 1, 2004 16:55:28

> Значит так, разуваем глаза и идем смотреть код NtContinue.
> На, прямо исходниками тебе в нос.
это украденные исходники из ms? что-то не похожи они ни на что. смотрел - w2k, w2ksp3, xp - нигде нет SANITIZE_DRADDR, DR7 - это да, принудительно очищаются глобальные флаги, но я ведь говорил по свое адресное пространство... во вском случае у себя я свободно ставлю точку останова на > MM_HIGHEST_USER_ADDRESS и она срабатывает.

> if ((ContextFlags & CONTEXT_DEBUG_REGISTERS) == CONTEXT_DEBUG_REGISTERS
совсем меня за дурака держишь, да?
я не трогал флаги и эта ветка кода вообще не получала управления - ставил бряк в айсе.


> А теперь я хотел бы насладится зрелищем того, как ты будешь есть свои лыжи :)))
лыжи отменяются до лучших времен.
исходники это хорошо, но дизассемблерный листнг лучше.
перекрестных ссылок на KeGetCurrentThread, так что найти этот фрагмент кода нетрудно (там еще и константы рядом - e00f, ffff0155, 55... только никаких _проверок_ отладочных регистров там нет.


Дата: Июн 1, 2004 18:16:18

Никуда лыжи не отменяются. "У кого-то слишком узкие норы! Нет! Кто-то слишком много ест!"
.text:00430564                 mov     dl, [ebp+CONTEXT.Flags]
.text:00430567                 test    dl, dl
.text:00430569                 jnz     check_dr0
.text:0043056F                 mov     eax, [esi+CONTEXT.Dr0]
.text:00430572 
.text:00430572 back0:                                  ; CODE XREF: KeContextToKframes+4E3j
.text:00430572                 test    dl, dl
.text:00430574                 mov     [ebx+KTRAP_FRAME.Dr0], eax
.text:00430577                 jnz     check_dr1
.text:0043057D                 mov     eax, [esi+CONTEXT.Dr1]
.text:00430580 
.text:00430580 back1:                                  ; CODE XREF: KeContextToKframes+4F7j
.text:00430580                 test    dl, dl
.text:00430582                 mov     [ebx+KTRAP_FRAME.Dr1], eax
.text:00430585                 jnz     check_dr2
.text:0043058B                 mov     eax, [esi+CONTEXT.Dr2]
.text:0043058E 
.text:0043058E back2:                                  ; CODE XREF: KeContextToKframes+50Bj
.text:0043058E                 test    dl, dl
.text:00430590                 mov     [ebx+KTRAP_FRAME.Dr2], eax
.text:00430593                 jnz     check_dr3
.text:00430599                 mov     eax, [esi+CONTEXT.Dr3]
.text:0043059C 
.text:0043059C back3:                                  ; CODE XREF: KeContextToKframes+51Fj
.text:0043059C                 mov     [ebx+KTRAP_FRAME.Dr3], eax
.text:0043059F                 mov     eax, [esi+CONTEXT.Dr6]
.text:004305A2                 and     eax, 0E00Fh
.text:004305A7                 mov     [ebx+KTRAP_FRAME.Dr6], eax
.text:004305AA                 mov     eax, [esi+CONTEXT.Dr7]
.text:004305AD                 and     ax, 155h
.text:004305B1                 test    dl, dl
.text:004305B3                 mov     [ebx+KTRAP_FRAME.Dr7], eax
.text:004305B6                 jz      short loc_4305D9
.text:004305B8                 mov     eax, large fs:124h
.text:004305BE                 mov     ecx, eax
.text:004305C0                 mov     eax, [esi+CONTEXT.Dr7]
.text:004305C3                 and     al, 55h
.text:004305C5                 neg     al
.text:004305C7                 sbb     eax, eax
.text:004305C9                 neg     eax
.text:004305CB                 mov     [ecx+KTHREAD.DebugActive], al
.text:004305CE                 mov     eax, 0FFDFF000h ; KPCR
.text:004305D3                 mov     cl, [ecx+KTHREAD.DebugActive]
.text:004305D6                 mov     [eax+50h], cl   ; KPCR.DebugActive



Дата: Июн 2, 2004 14:19:52

Слушайте, я тут примерчик написал... В аттаче есть... Только почему-то он ведет себя крайне странно. Если в SEH обработчик кинуть int 1 и сделать в SICE'е i1here on - появляется BSOD при бряке. Но самое странное то, что иногда мой бряк по dr3 ставится, а иногда нет :\ От чего это зависит понятия не имею... Сначала я думал, что это от того, что адрес по br невыровнен - поставил на заведомо выровненый адрес - ниче опять не работает... Поведение зависит от совершенно шаманских вещей... Так, например, при изменении cmp al, [flag] на cmp ax, [flag] (и соответственно <flag db 0> на <flag dw 0>) - все работает. 8) Я начинаю чувствовать себя глупо =)

Вот листинг:
    .386                                
    .model flat, stdcall              
    option casemap :none                

o	equ	offset

      include \masm32\include\windows.inc
      include \masm32\include\user32.inc
      include \masm32\include\kernel32.inc
      includelib \masm32\lib\user32.lib      
      includelib \masm32\lib\kernel32.lib
.data                                                    	flag	db	0
.code                                
seh_handler:
	xor eax, eax
	cmp al, [flag]
	jz nnnext
	push eax
	push eax
	call $+5+10
		db	"Debug Msg",0
	push eax
	call MessageBoxA
	jmp exit
nnnext:
	inc [flag]
	mov eax, [esp+0ch]
	assume eax: PTR CONTEXT
	mov ebx, [eax].iDr7
;DR7_LEGAL=11111111111111110000000101010101
	or ebx, 11110000000000000000000101000000b
	mov [eax].iDr7, ebx
	mov [eax].iDr3, o br
	mov [eax].regEip, o cont
	xor eax, eax
ret                               
start:                                      
	assume fs: nothing    
	push o seh_handler
	push dword ptr fs:[0]  
	mov fs:[0], esp
	xor eax,eax
	mov eax, dword ptr [eax]	 
cont:        
	push eax
	push eax
	call $+5+5
		db	"damn",0
	push eax
br:	call MessageBoxA
exit:	invoke ExitProcess,0
end start


_279897521__dr change Test.rar

<< . 1 . 2 .


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.081