www.gusucode.com > VC编写的千年封包捕获工具源码程序 > VC编写的千年封包捕获工具源码程序/code/Y1000Packet/DialogMain.cpp

    ??// DialogMain.cpp : ?[?s?e?N

// Download by http://www.codefans.net



#include "stdafx.h"

#include "Y1000Packet.h"

#include "DialogMain.h"





// CDialogMain ?[݋Fh



IMPLEMENT_DYNAMIC(CDialogMain, CDialog)



CListCtrl *m_pDataList;

static DWORD jmpSendAddr,pJmpSendAddr;

char *buf;

WORD bSize;

extern "C" void _declspec(naked) HookSendPacket()

{

	_asm{

		pushad

			push ebx

			push edx

			call ShowSendPacket

			popad

			pushad

			pushad

			mov word ptr [esp],0x0f91f

			jmp pJmpSendAddr

		}





}

CDialogMain::CDialogMain(CWnd* pParent /*=NULL*/)

	: CDialog(CDialogMain::IDD, pParent)

{



}



CDialogMain::~CDialogMain()

{

}



void CDialogMain::DoDataExchange(CDataExchange* pDX)

{

	CDialog::DoDataExchange(pDX);

	DDX_Control(pDX, IDC_LIST_DATALIST, m_DataList);

}





BEGIN_MESSAGE_MAP(CDialogMain, CDialog)

	ON_WM_SYSCOMMAND()

	ON_WM_PAINT()

	ON_WM_QUERYDRAGICON()

	ON_BN_CLICKED(IDOK, &CDialogMain::OnBnClickedOk)

END_MESSAGE_MAP()





// CDialogMain ?mo`Ytz?^

BOOL CDialogMain::OnInitDialog()

{

	CDialog::OnInitDialog();

	m_pDataList=&m_DataList;

	m_DataList.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);	

	m_DataList.InsertColumn(0,"?S",NULL,50,-1);

	m_DataList.InsertColumn(1,"6e?Sh?_",LVCFMT_LEFT,50,-1);

	m_DataList.InsertColumn(2,"'Y\",LVCFMT_LEFT,50,-1);

	m_DataList.InsertColumn(3,"penc",LVCFMT_LEFT,800,-1);

	while(!GetModuleHandle("Sddyn02.dll"))

	{

		Sleep(100);

	}



	InitHook();	

 //&TR?z?S
N>f:y?

   return TRUE;

}

void CDialogMain::OnBnClickedOk()

{

	while(!GetModuleHandle("Sddyn02.dll"))

	{

      Sleep(100);

	}



	InitHook();



}

void CDialogMain::InitHook()

{

	char jmpSendCode[5]={0};

    ULONG jmpSendHookAddr;

	HMODULE hModule= GetModuleHandle("Sddyn02.dll");

	MEMORY_BASIC_INFORMATION Mbi;

	if(hModule)

	{

	   jmpSendCode[0]=0xe9;

       jmpSendAddr=(DWORD)hModule+0x1608;

	   pJmpSendAddr=jmpSendAddr+0x8;

       jmpSendHookAddr=(ULONG)&HookSendPacket;

	   CString Addr;

	   Addr.Format("jmp Addr=%p",pJmpSendAddr);

	   AfxMessageBox(Addr);

	   jmpSendHookAddr=jmpSendHookAddr-jmpSendAddr-5;

	   memcpy((void*)&jmpSendCode[1],&jmpSendHookAddr,4);

	   VirtualQuery((LPCVOID)jmpSendAddr,&Mbi,sizeof(Mbi));

	   VirtualProtect((LPVOID)jmpSendAddr,Mbi.RegionSize,PAGE_READWRITE,&Mbi.AllocationProtect);//

       memcpy((void*)jmpSendAddr,(void*)&jmpSendCode,5);

	}

}



void WINAPI ShowSendPacket(BYTE* buf,ULONG bSize)

{

	CString No,buff,SizeStr;

	buff=CovertStr(buf,bSize);

	SizeStr.Format("%x",bSize);

	int n=m_pDataList->GetItemCount();

	No.Format("%d",n);

	No.MakeUpper();

	m_pDataList->InsertItem(n,No);

	m_pDataList->SetItemText(n,1,"?S?");

	m_pDataList->SetItemText(n,2,SizeStr);

	m_pDataList->SetItemText(n,3,buff);

}

CString CovertStr(BYTE *buf,ULONG bSize)

{

	CString buff;



	BYTE *tmp=new BYTE[bSize*3];

	for(ULONG i=0;i<bSize;i++)

	{

		itoa((int)buf[i],(char*)(DWORD)(tmp+(i*3)),16);

		if(!i)

		{

			memset((void*)(ULONG)(tmp+2),0x20,1);

		}else

		{

			memset((void*)(ULONG)(tmp+(i*3-1)),0x20,1);

		}

	}

	for (ULONG i=0;i<bSize*3;i++)

	{

		if(tmp[i]==0x30 && tmp[i+1]==0x00)

		{

			tmp[i+1]=(byte)0x30;

		}

		if(tmp[i]==0)

		{

			tmp[i]=tmp[i-1];

			tmp[i-1]=(byte)0x30;

		}

	}

	memset((void*)(ULONG)(tmp+bSize*3-1),0,1);

	buff.Format("%s",tmp);

	buff.MakeUpper();

	delete[] tmp;

	return buff;

}