Как же можно некорректно вычислить адрес? @Jump: db 0EFh (А так же я пробовал другие n вариантов кода команды jmp dd offset MyMessageBox И потом пишу: WriteProcessMemory,...,...,@Jump,X,NULL х Соответственно, сколько байт записать, 5 или 6. Как только меняю на push / ret, сразу работает. А Jump, он прыгает, только всегда куда-то не туда И команду Jumpa, который бы прыгнул куда нужно, я уже давно спрашиваю
Да нет, адрес верный, просто jmp его не правильно понимает. Вот мне и нужно команду jmp, которая правельно поймет адрес, который я ей представляю методом offset MyMessageBox.
И что там под столом? Узнали че-нить? Или так и не можете мне помочь? Странные вы люди. Столько дней, столько сил, столько времени потратили, а ответ то, максимум 2 байта написать. А вы ржете и издеваетесь. Обидно...
Докатились... Почему тема не в разделе для новичков?? Lex2029,а вам товарищ книгу по ассемблеру в руки и марш зубрить!
Lex2029 Все разобрался. Короче код операции 0E9h. Теперь попорядку. У тебя есть адрес для хука AddresProc: mov edi,edi push ebp .... У тебя есть процедура которая будет обрабатывать хук HookProcessing: pushad call Mutex jxx AllreadyRestore .... Call Mutex call RestoreHook AllreadyRestore: popad jmp ds:[StoreAddres] В данном случае пользуется переменная StoreAddress StoreCode db ? dd ? Так, теперь SetHook: mov eax,offset AddresProc mov [StoreAddress],eax mov dl,[eax] mov [StoreCode],dl mov byte ptr [eax],0E9h mov ebx,offset HookProcessing sub ebx,eax !!!!!!!!!!!!!!!!!!!!!! 2 САМых ГЛАВНЫХ СТРОЧКИ sub ebx,5 mov edx,[eax+1] mov [StoreCode+1],edx mov [eax+1],ebx PS: Label1: jmp Address Label2: Address это относительное смещение от Label2, а не абсолютный адрес PS: Для коммерческой отказоустойчивой реализации необходимо еще SuspendThread(все потоки инжектируемого процесса) VirtualProtectEx(....PAGE_EXECUTE_READWRITE....) потом Хук, потом ResumeThread(все потоки) Тоже необходимо при снятии хука.