간단한 SEH 처리

5351 단어 처리하다.
#include "stdafx.h"
#include "stdlib.h"
#include <windows.h>
#include <EXCPT.h>
#include <tchar.h>

int main(int argc, char* argv[])
{
    BYTE shellcode[12]="\x66\xB8\x01\x20\x66\xBA\x04\x10\x66\xEF\xC3";

    for (int i = 0; i < sizeof(shellcode); ++i){
        printf("%04d,0x%02X
", shellcode[i],shellcode[i]); } // SEH , BYTE oldByte = 0; PBYTE pAddr = NULL; DWORD dwProtect = 0; _asm mov ebx,ebx _asm push eax _asm pop eax _asm mov eax,eax _try{ _asm mov EAX,EAX _asm mov eax,eax _asm mov eax,eax _asm mov eax,eax HMODULE hMod = LoadLibrary(_T("user32.dll")); pAddr = (PBYTE)GetProcAddress(hMod, _T("MessageBoxA")); VirtualProtect(pAddr, 1, PAGE_EXECUTE_READWRITE, &dwProtect); oldByte = *pAddr; printf("pAddr:0x%08X
", pAddr); printf("oldByte:%02d
", oldByte); *pAddr = 0XCC; VirtualProtect(pAddr, 1, dwProtect, NULL); MessageBoxA(NULL, "Test","Test",MB_OK); } _except(EXCEPTION_EXECUTE_HANDLER){ MessageBoxW(NULL, L" ", L" ",MB_OK); VirtualProtect(pAddr, 1, PAGE_EXECUTE_READWRITE, &dwProtect); memset(pAddr, oldByte, 1); VirtualProtect(pAddr, 1, dwProtect, NULL); MessageBoxA(NULL, "Test","Test",MB_OK); } system("pause"); return 0; }

좋은 웹페이지 즐겨찾기