使用writeprocess写机器码改变代码执行状态

#include <windows.h>
#include <tchar.h>
#include <windef.h>

typedef int (*PFNMESSAGEW)(HWND,LPCWSTR,LPCWSTR,UINT);

int sum(int a,int b);


LPCWSTR STR_OK=_T("ok");
LPCWSTR STR_WORDS=_T("it work well");

PFNMESSAGEW pfnMessageBoxW=NULL;
int WinMain(HINSTANCE hInstance,HINSTANCE,LPSTR lpCmdLine,int nShowCmd)
{
    DWORD dwNum=0;


    BYTE OBJ_CODE[]={0xe9,0x0,0x0,0x0,0x0};//jmp code
   
    HMODULE hUser32=::LoadLibraryA("user32");
    pfnMessageBoxW=(PFNMESSAGEW)GetProcAddress(hUser32,"MessageBoxW");
   
    //获取__MESSAGEBOX地址
    DWORD dwMessageAddr=0;
    _asm
    {
        push       ebx
        mov        ebx, __MESSAGEBOX
        mov        dwMessageAddr,ebx
        pop        ebx
    }

//计算改变后的地址地址
    dwMessageAddr-=(DWORD)sum+5;
    memcpy(&OBJ_CODE[1],&dwMessageAddr,sizeof(DWORD));

    DWORD dwSumAddr=(DWORD)sum;
    ::WriteProcessMemory(::GetCurrentProcess(),(LPVOID)dwSumAddr,OBJ_CODE,5,&dwNum);

    int s=sum(3,5);
   
    _asm
    {
__MESSAGEBOX:
        push    MB_OK
        push    STR_OK
        push    STR_WORDS
        push    0
        call    pfnMessageBoxW
        add        esp,16
    }
    FreeLibrary(hUser32);

    return 0;
}

int sum(int a,int b)
{
   
    return 5;
}

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

xiaoqiang321

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值