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

 WASM Phorum —› WASM.VIROLOGY —› Помогите пожалуйста разобраться с delta-смещением пожалуйста :(((

<< . 1 . 2 .

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


Дата: Апр 9, 2004 18:11:06

Для демонстрации разницы между реальным адресом нашей программы в памяти и дельта-смещением этого адреса (относительно ожидаемого) предлагается следующий фрагмент:

; получить в ebx адрес для локальной переменной в стеке
push eax
mov ebx, esp
add ebx, 4
; получить в ebp текущий адрес нашего кода
call $+5
pop ebp
; изменить параметры доступа к памяти (+разрешение записи)
invoke VirtualProtect, ebp, 1000h,\
PAGE_EXECUTE_READWRITE, ebx
.if eax == 0; error
invoke MessageBox, NULL, addr MsgB1, addr MsgCap, MB_OK
.endif
; выравнять стек
pop eax
; получить в ebp дельта-смещение нашего кода
call get_delta
;теперь адресуемся к коду с использованием смещения в ebp
lea edi, [ebp + @@m1]
xor dword ptr [edi], 0h
@@m1:
nop
nop
nop
nop
jmp exit
; определить смещение
get_delta:
call $+5
delta:
pop ebp
sub ebp, offset delta
ret
exit:
...

И, в заключение, хотелось бы добавить по поводу вирусов.
И нормального программного обеспечения, кстати. Со времен DOS-а не приходилось мне писать самомодифицирующиеся программы, тогда все это работало на ура. А под Win2000 как то не возникало такой необходимости, и вот результат... Если бы не заинтересовался бы я этой темой (вирусами), так мог никогда бы и не узнать, что нельзя оказывается просто так писать в секцию кода... Это я к тому, что написание вирусов знакомит со многими техниками, которые в ином мире могут никогда не встретиться, а знать которые может оказаться очень и очень важно. А сами вирусы - гадость, конечно, редкая. Тут я полностью согласен с The Svin.

<< . 1 . 2 .


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