Я пытаюсь метод анти-отладки.
Сначала я сделал все nessissery и выдал исключение строкой не исправленного кода
assume fs:nothing
push offset antiDebug ;function to deal with exception
push fs:[0]
mov fs:[0],esp
mov eax,offset MENU ;Menu is the label I want to jump to after the exception handled
push eax
call dumpRegs
mov edx,0
mov dword ptr[edx],0 ;wrong code
MENU: ;I want to jump here after exception handled
функция antiDebug ↓, в другом модуль из приведенного выше кода
antiDebug proc _lpExceptionRecord:ptr EXCEPTION_RECORD,_lpSEH:ptr SEH,_lpContext:ptr CONTEXT,_lpDispatcherContext:ptr DISPATCHER_CONTEXT
mov esi,_lpExceptionRecord
mov edi,_lpContext
assume esi:ptr EXCEPTION_RECORD,edi:ptr CONTEXT
invoke MessageBox,NULL,addr infoUser,NULL,MB_OK
mov eax,[ebp+638H] ;I debug many times to find the relative
;distance,eax gets the location oflable MENU
mov [edi].regEip,eax
assume esi:nothing,edi:nothing
mov eax,ExceptionContinueExecution
ret
antiDebug endp
проблема в том, что местоположение МЕНЮ находится не в том же модуле функции защиты от отладки. Так что я просто не могу перейти в МЕНЮ на mov [edi].regEip,eax
Что я должен делать?
ДОБАВИТЬ ДЕТАЛИ : в моем главном модуле, прежде чем вызвать исключение, я помещаю sh расположение МЕНЮ в стеке, и вы можете видеть в окне отладки, eax получает право значение
Я продолжаю отлаживать. В функции antiDebug здесь eax успешно получает местоположение метки и передает его в [edi] .regEip
Но тогда возникает проблема. Я уверен, что я получаю правильное местоположение МЕНЮ, но когда эта функция возвращается, я получаю ошибку.
затем ошибка в функции обработчика и ошибка в функции обработчика, я просто повторяю выполнение функции обработчика (antiDebug)
PS: если я передаю [edi ] .reg Получите ярлык в том же модуле antiDebug, я могу прыгнуть туда.
Заранее спасибо!