关于给其它程序发送信息(游戏DrictX相关).谢谢大家支持 ( 积分: 100 )

  • 主题发起人 主题发起人 laohe
  • 开始时间 开始时间
L

laohe

Unregistered / Unconfirmed
GUEST, unregistred user!
我想写个外挂,发送到将文字发送到游戏中去.
找过相关资源,发送过去都是修改程序里的标题.不能发送到游戏中去.

function GetHWND: HWND;
var
hCurrentWindow: HWnd;
WndText:String;
begin
hCurrentWindow := GetWindow(Application.Handle, GW_HWNDFIRST);
while hCurrentWindow <> 0 do
begin
WndText:=GetWndText(hCurrentWindow);
if Pos('记事本',WndText)>0 then
begin
Result:=hCurrentWindow;
Exit;
end;
hCurrentWindow := GetWindow(hCurrentWindow, GW_HWNDNEXT);
end;


function GetWndText(hWnd: HWND): String;
Var
Ret:LongInt;
mText:PChar;
Buf:Integer;
begin
Ret:=SendMessage(hWnd,WM_GETTEXTLENGTH,0,0)+1;
GetMem(mText,Ret);
try
Buf:=LongInt(mText);
SendMessage(hWnd,WM_GETTEXT,Ret,Buf);
Result:=StrPas(mText);
finally
FreeMem(mText,Ret);
end;
end;

以上是代码.在相关资源中获取了.只能设置其它程序(游戏窗口)的标题。不能发送到文字录入区.
 
我想写个外挂,发送到将文字发送到游戏中去.
找过相关资源,发送过去都是修改程序里的标题.不能发送到游戏中去.

function GetHWND: HWND;
var
hCurrentWindow: HWnd;
WndText:String;
begin
hCurrentWindow := GetWindow(Application.Handle, GW_HWNDFIRST);
while hCurrentWindow <> 0 do
begin
WndText:=GetWndText(hCurrentWindow);
if Pos('记事本',WndText)>0 then
begin
Result:=hCurrentWindow;
Exit;
end;
hCurrentWindow := GetWindow(hCurrentWindow, GW_HWNDNEXT);
end;


function GetWndText(hWnd: HWND): String;
Var
Ret:LongInt;
mText:PChar;
Buf:Integer;
begin
Ret:=SendMessage(hWnd,WM_GETTEXTLENGTH,0,0)+1;
GetMem(mText,Ret);
try
Buf:=LongInt(mText);
SendMessage(hWnd,WM_GETTEXT,Ret,Buf);
Result:=StrPas(mText);
finally
FreeMem(mText,Ret);
end;
end;

以上是代码.在相关资源中获取了.只能设置其它程序(游戏窗口)的标题。不能发送到文字录入区.
 
你应该获得文字录入区(一般都是EDIT类)的控件句柄才行
 
游戏里就不是一般都是EDIT类,以前也试过.没用,都只是修标题
 
游戏外挂似乎不是这样做的

好像都是写进程的(WRITEPROCESSMEMORY)
 
INDEXWND:= GetHWND;
txtWnd:=GetWindow(GetDlgItem(INDEXWND,0),GW_CHILD); // 文本框

这个对游戏里的东西没用.请大家帮帮忙.
 
WRITEPROCESSMEMORY是写到内存里是吧.
内存地址是动态变化的.
这次地址是A,重新登录后可能是C,G了...
 
要不然,怎么叫外挂,,,还不就是你正在玩时,它起作用
 
DWORD hProcId;
HWND hWnd =::FindWindow(&quot;CRHClass&quot;,NULL);
if(hWnd ==FALSE)
MessageBox(&quot;No&quot;);
else
{
GetWindowThreadProcessId(hWnd,&amp;hProcId);
HANDLE nOK =OpenProcess(PROCESS_ALL_ACCESS|PROCESS_TERMINATE|PROCESS_VM_OPERATION|PROCESS_VM_READ|
PROCESS_VM_WRITE,FALSE,hProcId);
if(nOK ==NULL)
MessageBox(&quot;ProcNo!&quot;);
else
{
DWORD buf1;
DWORD write;
BOOL OK=ReadProcessMemory(nOK,(LPCVOID)0x00506961,(LPVOID)&amp;buf1,4,NULL); //读取我们保存EDX中的基础
if(OK ==TRUE)
{
write =buf1+0x000003F4; //得到内力值的地址
DWORD Writeed =0x00; //要修改的数值
BOOL B =WriteProcessMemory(nOK,(LPVOID)write,&amp;Writeed,1,NULL);
if(B==FALSE)
MessageBox(&quot;WriteNo&quot;);
}
}
CloseHandle(nOK);
}
 
还是没有方法吗?
这个没有用.
有没有朋友写过外挂的
 
在WIN32下编写的程序,都有自己的内存区域,并且这块自己的区域是受保护的。
想修改别的程序内的内存信息,首先应该进入别人程序的内存区域中去才可以的。
去看看《DELPHI下深入WINDOWS核心编程》那里有一章关于隐藏的就讲到了这种技术并且有源代码。
 
到了WINDOWS核心编程了呀....怎么越来越深了
 
当然了,写外挂一定是用到了核心编程,绝对不是简单的SENDMESSAGE可以做到的
 
听课...
金山游侠就是一个不错的外挂,它是用的什么技术呀?
 
金山游侠也应该用的是远程嵌入(注入)技术!
 
目录游戏外挂,多数还是似虚操作.
操作内存都是获取数据参数罢了,修改数据包的外挂,除了传奇这种源码都出来的
 
对于网络游戏的外挂有可能比较麻烦吧。
毕竟传输的时候他们应该是将数据进行过加密的!
 
后退
顶部