首页
社区
课程
招聘
[求助]这样直接调用call可行吗?错在哪里?
发表于: 2013-4-6 12:21 5305

[求助]这样直接调用call可行吗?错在哪里?

2013-4-6 12:21
5305
typedef struct
{
    BYTE longjmp;
    DWORD longjmpvalue;
}LONGJMP,*LPLONGJMP;
LONGJMP mylongjmp;

void CmyDlg::OnBtPlay()
{
    DWORD dwRemoteProcessId;
    HANDLE hRemoteProcess;
    BOOL iReturnCode;
    DWORD startadr,endadr;
    dwRemoteProcessId=0x5610;
    hRemoteProcess = OpenProcess(PROCESS_CREATE_THREAD|PROCESS_VM_WRITE|PROCESS_VM_OPERATION,FALSE,dwRemoteProcessId );
    endadr=0x4A4F20;
    startadr = (DWORD)VirtualAllocEx( hRemoteProcess, NULL, sizeof(mylongjmp)+1, MEM_COMMIT, PAGE_READWRITE);
    mylongjmp.longjmp=0xE8;
    mylongjmp.longjmpvalue=(DWORD)(endadr-startadr-0x5);
    WriteProcessMemory(hRemoteProcess,(PVOID)startadr,&mylongjmp,sizeof(mylongjmp),NULL);
    CreateRemoteThread(hRemoteProcess,NULL,0,(PTHREAD_START_ROUTINE)startadr,NULL,0,NULL);
}

我想直接远程注入代码调用进程0x5610中的函数0x4A4F20,这个函数没有参数

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 1392
活跃值: (5212)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
2
CreateRemoteThread 需要的函数是有一个参数的。否则堆栈不平衡啊~~不过你可以在函数开头先ADD,ESP,4试试
2013-4-6 13:15
0
雪    币: 115
活跃值: (46)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
3
虽然你多申请了一字节空间,但貌似不见ret的存在?
至于堆栈,系统会自动平衡的,不用add esp,4
2013-4-6 18:24
0
雪    币: 1042
活跃值: (500)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
pushad
pushfd
popad
pushfd
2013-4-6 20:19
0
雪    币: 225
活跃值: (223)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
远程注入 要注意堆栈平衡,不能用全局变量
2013-4-10 09:41
0
雪    币: 91
活跃值: (11)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
这样怎么执行也会出错??
static DWORD WINAPI Msg(LPVOID pData)
{
        ::MessageBox(NULL,(LPCWSTR)"abce",NULL,NULL);
        return 0;
}
static void afterMsg()
{
}

void CzhuruDlg::OnBnClickedButton1()
{
        // TODO: 在此添加控件通知处理程序代码
        DWORD dwRemoteProcessId;
    HANDLE hRemoteProcess;
    BOOL iReturnCode;
    DWORD startadr,endadr;
    dwRemoteProcessId=0x3154;
    hRemoteProcess = OpenProcess(PROCESS_CREATE_THREAD|PROCESS_VM_WRITE|PROCESS_VM_OPERATION,FALSE,dwRemoteProcessId );
        char szBuffer[10]="abcdefg";
    *(DWORD*)szBuffer=1000;//for test
    void *pDataRemote =(char*) VirtualAllocEx( hRemoteProcess, 0, sizeof(szBuffer), MEM_COMMIT, PAGE_READWRITE );
        //步骤5:写内容到目标进程中分配的变量空间
        WriteProcessMemory( hRemoteProcess, pDataRemote, szBuffer,sizeof(szBuffer),NULL);

        //计算代码大小
    DWORD cbCodeSize=((LPBYTE)afterMsg - (LPBYTE) Msg);
    //分配代码地址空间
    PDWORD pCodeRemote = (PDWORD) VirtualAllocEx( hRemoteProcess, 0, cbCodeSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE );

    //步骤7:写内容到目标进程中分配的代码地址空间
    WriteProcessMemory( hRemoteProcess, pCodeRemote, &Msg, cbCodeSize, NULL);

        HANDLE hThread = CreateRemoteThread(hRemoteProcess, NULL, 0, (LPTHREAD_START_ROUTINE) pCodeRemote,pDataRemote, 0 , NULL);
}
2013-5-8 19:17
0
雪    币: 91
活跃值: (11)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
救救我吧。
2013-5-16 14:59
0
游客
登录 | 注册 方可回帖
返回
//