本人最近在写远程注入线程函数。主要就是在远程进程里弹一个消息框,显示dll名字
结果碰到如下的问题:
本地调用MessageBox时:
TCHAR assd[13]=_T("test_dll.dll");
MessageBox(0,assd,assd,0);
//本地函数执行正常,消息框显示"test_dll.dll"
但是当在远程调用MessageBox时:
struct _RemoteData
{
LPVOID messageboxaddr;
TCHAR messageboxdata[13];
};
struct _RemoteData *premote;
struct _RemoteData remotedata={hAddr,TEXT("test_dll.dll")};//写入远程进程空间的结构体。haddr是在主函数里获得MessageBox的内存地址
premote=&remotedata;
//远程执行的线程函数 (远程函数和数据都已经写入到指定进程内存中)
static void WINAPI c_injection(LPVOID addr)
{
typedef int (_stdcall *MESSAGEBOX)(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCaption,UINT uType);//定义了MESSAGEBOX函数
typedef struct
{LPVOID messageboxaddr;
TCHAR messageboxdata[13];}REMOTE;
REMOTE *func_addr;
func_addr=(REMOTE *)addr;
MESSAGEBOX MSGBOX=(MESSAGEBOX)(func_addr->messageboxaddr);//MSGBOX内存有MessageBox真实地址
MSGBOX(0,func_addr->messageboxdata,0,0);
}
//结果远程函数中,确实弹出了消息框,但消息框内容只有首字母“t”,不是字符串"test_dll.dll"。
百思不得其解为什么会这样,求教各位怎么才能让字符串在消息框里完整显示
对了,本人使用的是vs2010
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)