读书人

远程注入Dll 参数传递有关问题

发布时间: 2013-01-08 14:02:14 作者: rapoo

远程注入Dll 参数传递问题!
本帖最后由 mywmshow 于 2012-11-01 10:13:22 编辑 注入程序向其它EXE注入DLL,用的是键盘钩子!
怎么样才能把注入时带的参数,在被注入的EXE按某键调出Dll窗口时显示这个参数呢?

var
TmpStr: string;

function installKeyProc(GameTid:THandle;DllId:THandle;MyData:string;): THandle;
begin
Result := SetWindowsHookEx(WH_KEYBOARD, @Keyproc, DllId, GameTid);
TmpStr:=MyData
ShowMessage(TmpStr); //▲▲▲▲这里可以显示传来的参数
end

function keyproc(icode, wp, lp: integer): DWORD; stdcall; //键盘HOOK回调函数
begin
if (icode = HC_ACTION) then
begin
if (wp = VK_HOME) and ((1 shl 31) and lp = 0) then
begin
if MFrm = nil then MFrm := TMFrm.Create(nil);
MFrm.Visible:= not MFrm.Visible;
ShowMessage(TmpStr); //▲▲▲▲这样是显示不了的,如何在这里获取到上面的那个MyData参数呢
end;
end;
keyProc := CallNextHookEx(keyhhk, icode, wp, lp);
end;

[解决办法]
installKeyProc是在你的Exe中运行的,你的Exe把这个Dll加载到你的进程空间,而当别的程序触发键盘钩子时,这个Dll在那个这个进程中加载,这个进程中并没有执行过installKeyProc,因此需要进程间通讯,
实在不行,就用文件交换吧,installKeyProc把内容写到文件里,需要的时候从文件里读,或者注册表
用共享内存比较好
[解决办法]
参数只能在dll, 要么就是消息传递, dll加载完成后向你的exe发条消息, exe收到约定消息再把参数发给dll.
当然用共享内存也可以。 这样的消息最终也是共享内存。

读书人网 >.NET

热点推荐