· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.VIROLOGY —› Добавление секции в ехе

<< . 1 . 2 .

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


Дата: Дек 4, 2002 10:34:09

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

хорошо, другой вопрос. ставлю сен.
в примере и доках что то вроде

seh sSeh

mov seh.1,esp
mov seh.2,ebp
mov seh.3,offset some

соотв. для добавленного секции
lea eax,[ebp+offset seh]
assume eax:ptr sSen
mov [eax].1,esp
...

под масм32 ругается на тип

пытаюсь менять на
seh dd 3dup(?)

mov [seh],esp
mov [seh+4],ebp
mov [seh+8],offset some

работает, довожу до
lea eax,[ebp+offset seh]

mov [eax],esp
mov [eax+4],ebp

вылетает по первому мов

опыты с мов еах,[ebp +offset seh]
lea еах,[ebp + seh]
ничего не дали. Как?


Дата: Дек 4, 2002 12:16:30

>я гворю сам текст ф- выдернуть. из кернела. и прописать в свою >прогу. мне нужно то их две штуки.
:)))))))...

А че бы тебе описание структуры не показать - места нехватило :)


Дата: Дек 4, 2002 12:28:13

у меня нет ее под рукой. там просто, три поля dd подряд
я ж говорю, seh dd 3 dup(?) работает.
я так понимаю, я в последнем варианте неправильно загружаю адрес структуры или неправильно к ней потом обращаюсь


Дата: Дек 4, 2002 15:13:45

.386
.model flat, stdcall
option casemap:none

;:::::::::::::::::::::::::::::::::::::::::::::::::

include \masm32\include\windows.inc
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib

SEH STRUCT
PrevEsp dd ?
PrevEbp dd ?
SafeOffset dd ?
SEH ENDS

.data
seh SEH <>

;:::::::::::::::::::::::::::::::::::::::::::::::::

.code

xHandler proc uses esi edi pExcept:DWORD, pFrame:DWORD, pContext:DWORD, pDispatch:DWORD

LOCAL acMessage[64]:CHAR

.data
g_szException db "Access violation at address: %08X", 0

.code
mov ecx, pExcept
mov eax, [ecx][EXCEPTION_RECORD.ExceptionCode]
.if eax == EXCEPTION_ACCESS_VIOLATION
invoke wsprintf, addr acMessage, addr g_szException, \
[ecx][EXCEPTION_RECORD.ExceptionInformation][4]
.endif

invoke MessageBox, NULL, addr acMessage, NULL, MB_OK + MB_ICONHAND + MB_APPLMODAL

lea eax, seh
push (SEH PTR [eax]).SafeOffset
push (SEH PTR [eax]).PrevEsp
push (SEH PTR [eax]).PrevEbp

mov eax, pContext
pop (CONTEXT PTR [eax]).regEbp
pop (CONTEXT PTR [eax]).regEsp
pop (CONTEXT PTR [eax]).regEip

xor eax, eax ; mov eax, ExceptionContinueExecution

ret

xHandler endp

;:::::::::::::::::::::::::::::::::::::::::::::::::

start:
assume fs:nothing
push offset xHandler
xor eax, eax
push fs:[eax]
mov fs:[eax], esp

mov seh.SafeOffset, offset SafePlace
mov seh.PrevEbp, ebp
mov seh.PrevEsp, esp

; make exception
mov eax, 0C0000000h
xchg [eax], eax

SafePlace:
pop fs:[0]
add esp, sizeof DWORD

ret

end start



Посмотри в исходниках на wasm.ru. Есть пример от comrade.
Или:
http://spiff.tripnet.se/~iczelion/files/SehEn.zip
http://spiff.tripnet.se/~iczelion/files/SEH.zip

А лучше всего читай это:
http://www.jorgon.freeserve.co.uk/ExceptFrame.htm


Дата: Дек 4, 2002 16:25:13

смотрел я эти примеры...
мне нужно переписать это в относительных смещениях

; вот как мне переписать этот кусок
mov seh.SafeOffset, offset SafePlace
mov seh.PrevEbp, ebp
mov seh.PrevEsp, esp
; вот в что то типа этого, и чтоб под масмом скомпилилось?

mov [eax].SafeOffset, offset SafePlace
mov [eax].PrevEbp, ebp
mov [eax].PrevEsp, esp

;либо

mov [eax+8], offset SafePlace
mov [eax+4], ebp
mov [eax], esp


Дата: Дек 4, 2002 16:27:10

интересно, конструкция assume eax, sSEH ptr сработает7


Дата: Дек 4, 2002 17:33:17

;Вот это работает на MASM 100%.

.386
.model flat,stdcall
option casemap:none

include \masm32\include\windows.inc

sSEH STRUCT
OrgEsp dd ?
OrgEbp dd ?
SaveEip dd ?
sSEH ENDS

.data

SEH sSEH <0>
.code
start:

;################################################

TrueSeh proc
ASSUME FS : NOTHING
push offset SehHandler
push FS:[0]
mov SEH.OrgEsp, esp
mov SEH.OrgEbp, ebp
mov SEH.SaveEip, offset SafePlace
mov FS:[0], esp
;==
xor eax,eax
mov [eax],eax

;==
SafePlace:
pop FS:[0]
add esp, 4
ret

TrueSeh endp

;#########################################################

SehHandler PROC C

pExcept:DWORD,pFrame:DWORD,pContext:DWORD,pDispatch:DWORD

mov eax, pContext
ASSUME EAX : PTR CONTEXT
push SEH.SaveEip
pop [eax].regEip
push SEH.OrgEsp
pop [eax].regEsp
push SEH.OrgEbp
pop [eax].regEbp
mov eax, ExceptionContinueExecution
ASSUME EAX : NOTHING
ret

SehHandler ENDP

;#########################################################

end start


Дата: Дек 4, 2002 18:04:08

*** начало цитаты ***
; вот как мне переписать этот кусок
mov seh.SafeOffset, offset SafePlace
mov seh.PrevEbp, ebp
mov seh.PrevEsp, esp
; вот в что то типа этого, и чтоб под масмом скомпилилось?

mov [eax].SafeOffset, offset SafePlace
mov [eax].PrevEbp, ebp
mov [eax].PrevEsp, esp
*** конец цитаты ***




;lea eax, seh ; если seh на стеке
mov eax, offset seh
assume eax:ptr SEH
mov [eax].SafeOffset, offset SafePlace
mov [eax].PrevEbp, ebp
mov [eax].PrevEsp, esp
assume eax:nothing

Только зачем?


Дата: Дек 5, 2002 11:06:46

Я ж говорю, это новая секция. Надо ж новый адрес структуры определять. Дельта смещение и все такое. Короче я нашел глюк. Фишка в том, что при вызове ф-й ебп менялся. Юзайте средства отладки, они рулез. Исправил- понеслось.
Теперь другая проблема, с ф-й гет коммандлине как я понимаю.
В каком виде она возвращает строку под НТ и далее, какую ф-ю использовать, А или W, как обеспечить совместимость с 98. Самое плохое что на работе масм32 не работает а дома нет НТ :-(((
Засада.


Дата: Дек 5, 2002 14:40:59

Нормально все с этими блин ф-ми оказалось, все работает.

Может кто подскажет, какие поля РЕ точно нужно модифицировать? Все, особненно те что требует НТ?


Дата: Дек 6, 2002 13:55:47 · Поправил: BADik

Так просто, к сведению:
Долго ковырялся в одной софтине (упакованная самописным упаковщиком с криптацией кодовой секции и прочей замудренностью..., но это к делу не относится)... Так вот. Когда у меня был уже готовый дамп + заголовок + таблица импортов + ресурсы + короче вся фигня -> exe-шник не работал. Я и црц фиксил, и дату/время и атрибуты файла, ВСЕ делал - не работал. Потом допер сделать такую элементарную весчь как выравнивание файла - ЗАРАБОТАЛО! Во, ля... Так сказать, самую маленьку детальку забыл - и на тебе! Попробуй, могет поможет....

ЗЫ: Работает на 2К Сервер, ХР, 98, МЕ...

<< . 1 . 2 .


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