📄 s3dhook.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 + -