首页
社区
课程
招聘
[旧帖] 2.1.2 远程CALL调用代码实现 0.00雪花
发表于: 2012-8-13 00:19 1203

[旧帖] 2.1.2 远程CALL调用代码实现 0.00雪花

2012-8-13 00:19
1203
1.上节我们是用代码注入器来调用的CALL,那么这次我们自己编写代码来调用CALL,这需要几个函数的联合运用。
1, FindWindow
2, GetWindowThreadProcessId
3, OpenProcess
4, CreateRemoteThread


HWND FindWindow(LPCSTR lpClassName, LPCSTR lpWindowName);
如果函数执行成功,则返回值是拥有指定窗口类名或窗口名的窗口的句柄。

DWORD GetWindowThreadProcessId(HWND hWnd, LPDWORD lpdwProcessId);
找出某个窗口的创建者(线程或进程),返回创建者的标志符。 

HANDLE OpenProcess(   
  DWORD dwDesiredAccess, //渴望得到的访问权限(标志)   
  BOOL bInheritHandle, // 是否继承句柄   
  DWORD dwProcessId// 进程标示符   
  );
如成功,返回值为指定进程的句柄。 

HANDLE CreateRemoteThread(
  HANDLE hProcess,        // OpenProcess
  LPSECURITY_ATTRIBUTES lpThreadAttributes,  // 安全结构指针 NULL
  DWORD dwStackSize,      // 0
  LPTHREAD_START_ROUTINE lpStartAddress, // 指向我们的CALL 地址
  LPVOID lpParameter,     // 传递的参数指针 NULL (stdcall)
  DWORD dwCreationFlags,  // 0
  LPDWORD lpThreadId      // 返回一个 线程ID标识 int lptid;=(LPDWORD) &lptid;
);
如果调用成功,返回新线程句柄.   


2.新建一个基于对话框的MFC可执行程序,如下:


新添加的程序代码如下:

void RemoteCall(int CallAddr)
{
  HWND h=::FindWindow(NULL,"MyGame");  // 查找窗口句柄
  DWORD id;  // 进程ID
  LPDWORD pid=&id;  //定义临时变量方便调用
  ::GetWindowThreadProcessId(h,pid);  // 取得指定窗口的进程ID,存放到变量id里面
  HANDLE  hp=OpenProcess(PROCESS_ALL_ACCESS,false,id); // 获取访问进程权限 存放至hp
  DWORD tid;
  // 在进程里面调用 CallAddr.
  CreateRemoteThread(hp,NULL,0, (LPTHREAD_START_ROUTINE)CallAddr ,NULL,0,&tid);
}

void CCALLDlg::OnRemoteAdd() 
{
  // TODO: Add your control notification handler code here
  RemoteCall(0x402360);
  
}

void CCALLDlg::OnBTNDECBlood() 
{
  // TODO: Add your control notification handler code here
  RemoteCall(0x40108c);
}

3.编译,执行,测试。

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

上传的附件:
收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//