⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 s3dhook.cpp

📁 注入呼出外挂窗口
💻 CPP
字号:
// S3DHook.cpp : implementation file
//

#include "stdafx.h"
#include "DLLShared.h"
#include "S3DHook.h"
#include "HookApi.h"
#include "Winsock2.h"
#include "stdio.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

typedef int (WINAPI *_pfnsend)(SOCKET,const char FAR *,int,int);
int WINAPI My_send(DWORD RetAddr,_pfnsend pfnSend,
				   SOCKET s,const char FAR *buf,int len,int flags);
typedef int (WINAPI *_pfnWSASend)(SOCKET,LPWSABUF,DWORD,LPDWORD,DWORD,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE);
int WINAPI My_WSASend(DWORD RetAddr,
					  _pfnWSASend pfnWSASend,
					  SOCKET,LPWSABUF,
					  DWORD,LPDWORD,
					  DWORD,LPWSAOVERLAPPED,
					  LPWSAOVERLAPPED_COMPLETION_ROUTINE
					  );
PHOOKENVIRONMENT pHookEnv;
/////////////////////////////////////////////////////////////////////////////
// CS3DHookDlg dialog
//这有个使用外部变量声明
extern CS3DHookDlg *pCWndWGMain;
CS3DHookDlg::CS3DHookDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CS3DHookDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CS3DHookDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}


void CS3DHookDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CS3DHookDlg)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CS3DHookDlg, CDialog)
	//{{AFX_MSG_MAP(CS3DHookDlg)
	ON_WM_CLOSE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CS3DHookDlg message handlers
BOOL CS3DHookDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	
	pHookEnv=InstallHookApi("Ws2_32.dll", "send", My_send);
	if (!pHookEnv)
	{
		AfxMessageBox("安装钩子失败");
		return TRUE;
	}
	if (pHookEnv->OrgApiAddr)
	{	
		//char ch[128];
		//sprintf(ch,"安装HOOKAPI成功Send地址:%x\n",pHookEnv->OrgApiAddr);
		//::MessageBox(NULL,ch,"警告",MB_OK);
	}


	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}
int WINAPI My_WSASend(DWORD RetAddr,
					  _pfnWSASend pfnWSASend,
					  SOCKET s,LPWSABUF lpBuffers,
					  DWORD dwBufferCount,LPDWORD lpNumberOfBytesSent,
					  DWORD dwFlags,LPWSAOVERLAPPED lpOverlapped,
					  LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
					  )
{
			::MessageBox(NULL,"HOOK API SUCCESS!","Look",MB_OK);
			if (pCWndWGMain)
			{
				char buf[1024];
				lstrcpyn(buf,lpBuffers->buf,lpBuffers->len);
				//在这里使用外部变量
				CListBox *pListBox = (CListBox *)pCWndWGMain->GetDlgItem(IDC_LIST_SEND);
				pListBox->AddString(buf);
				//API钩子返回之前,对原始的API进行调用
			}
			else
				::MessageBox(NULL,"HOOK API fail!","Look",MB_OK);
		return pfnWSASend(s, lpBuffers, dwBufferCount, lpNumberOfBytesSent, dwFlags, lpOverlapped, lpCompletionRoutine);
}
int WINAPI My_send(DWORD RetAddr,_pfnsend pfnSend,
				   SOCKET s,const char FAR *buf,int len,int flags)
{
	//AfxMessageBox("Hook Api Successful!");
	if (pCWndWGMain)
	{
		char buf1[1024];
		lstrcpyn(buf1,buf,len);
		CListBox *pListBox = (CListBox *)pCWndWGMain->GetDlgItem(IDC_LIST_SEND);
		pListBox->AddString(buf1);
	}
	else
		::MessageBox(NULL,"HOOK API Fail!","Look",MB_OK);
	return pfnSend(s,buf,len,flags);
}
void CS3DHookDlg::OnClose() 
{
	// TODO: Add your message handler code here and/or call default
	//UnInstallHookApi(pHookEnv);
	//pCWndWGMain=NULL;
	//CDialog::OnClose();
	pCWndWGMain->ShowWindow(pCWndWGMain->IsWindowVisible() ? SW_HIDE : SW_SHOW);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -