首页
社区
课程
招聘
[求助]远程线程中调用函数的问题。
发表于: 2008-6-27 23:11 6034

[求助]远程线程中调用函数的问题。

2008-6-27 23:11
6034
typedef struct tagREMOTE_PARAMETER {
    DWORD pfGetProcAddress;
    DWORD pfLoadLibraryA;
    DWORD pfFreeLibrary;
    DWORD pfMessageBoxA;
    TCHAR szText[256];
    TCHAR szCaption[256];
} REMOTE_PARAMETER_S;


DWORD WINAPI RemoteThreadProc(LPVOID lpParameter)
{
    typedef FARPROC (WINAPI *GetProcAddress_PF)(HMODULE hModule, LPCSTR lpProcName);
    typedef HMODULE (WINAPI *LoadLibraryA_PF)(LPCSTR lpLibFileName);
    typedef BOOL (WINAPI *FreeLibrary_PF)(HMODULE hLibModule);
    typedef int (WINAPI *MessageBoxA_PF)(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType);
    typedef VOID (WINAPI *START_PF)(VOID);
    
    GetProcAddress_PF pfGetProcAddress = NULL;
    LoadLibraryA_PF pfLoadLibraryA = NULL;
    FreeLibrary_PF pfFreeLibrary = NULL;
    MessageBoxA_PF pfMessageBoxA = NULL;
    START_PF pfStart = NULL;
    REMOTE_PARAMETER_S *pstRemotePara = NULL;
    HMODULE hMod = NULL;
    
    pstRemotePara = (REMOTE_PARAMETER_S *)lpParameter;
    if (NULL == pstRemotePara)
    {
        return 0;
    }

    pfGetProcAddress = (GetProcAddress_PF)pstRemotePara->pfGetProcAddress;
    pfLoadLibraryA = (LoadLibraryA_PF)pstRemotePara->pfLoadLibraryA;
    pfFreeLibrary = (FreeLibrary_PF)pstRemotePara->pfFreeLibrary;
    pfMessageBoxA = (MessageBoxA_PF)pstRemotePara->pfMessageBoxA;
    if ((NULL == pfGetProcAddress) ||
        (NULL == pfLoadLibraryA) ||
        (NULL == pfFreeLibrary) ||
        (NULL == pfMessageBoxA))
    {
        return 1;
    }
    
    pfMessageBoxA(NULL, pstRemotePara->szText, pstRemotePara->szCaption, MB_OK):

    return 0;
}


远程线程插入后,弹出MessageBox后点击确定后弹出内存不能读的错误。
如果注释掉 pfMessageBoxA(NULL, pstRemotePara->szText, pstRemotePara->szCaption, MB_OK):则没有问题
如果调用其它函数,也一样有问题。

这个是怎么回事?

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 239
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
MessageBox显示的内容是否正常???
2008-6-28 11:20
0
雪    币: 325
活跃值: (97)
能力值: ( LV13,RANK:530 )
在线值:
发帖
回帖
粉丝
3
ShellCode  至少也要Release 编译吧 或者把Debug 选项去掉咧。。。
2008-6-28 11:21
0
雪    币: 222
活跃值: (10)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
4
既然是远程线程,lpParameter这个指针又如何能够正常使用呢(虽然看上去你这里还能使用)

一般的插入方法是在目标进程中申请一块内存,在里面写入你的injection Dll full path,然后以LoadLibrary为entry去创建一个remote thread
2008-6-29 04:45
0
雪    币: 232
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
lpParameter 要指向目标的进程空间,而不是本地变量的地址。
是不是 TCHAR szText[256]; 问题?检查一下这个TCHAR数组传递的是指针还是实际字符串。
2008-6-29 10:07
0
雪    币: 203
活跃值: (368)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
果然改为release编译就没有问题了。
谢了!
2008-7-3 23:14
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
新手路过,近来膜拜一下~!
2008-7-4 19:20
0
游客
登录 | 注册 方可回帖
返回