HOOK----send

DWORD sendCode = 0x609E2FDA;//要写入的地址
DWORD sendNR;
DWORD JmpNextAddr = sendCode+5;//跳回地址
PBYTE pbData;

void DumpBuffer(PBYTE pBuffer,DWORD dwBufLen)
{
	CString sMessage; //最终结果
	sMessage.Empty();
	for (DWORD i =0;i<dwBufLen;i++)
	{
		CString sTemp;
		sTemp.Format(L"%02X",pBuffer[i]);
		sMessage +=sTemp;
		
		if((i+1)%16 == 0)
		{
			sMessage +="\r\n";
		}

	}

	AfxMessageBox(sMessage,MB_OK | MB_ICONINFORMATION);
}

__declspec(naked) void MySend()
{
	__asm
	{
		pushad  //压栈保护平衡
		mov sendNR,edx //自己的	
	}
	//输入内容
	pbData = (BYTE*)sendNR;//发包内容的指针

	DumpBuffer(pbData,0x0E);//格式化发包显示
	__asm
	{       
                <pre code_snippet_id="398327" snippet_file_name="blog_20140619_1_787481" name="code" class="cpp">                popad //恢复栈平衡
		MOV ECX,DWORD PTR DS:[ECX+40]//被自己代码覆盖的源程序代码
		TEST ECX,ECX//被自己代码覆盖的源程序代码
                jmp JmpNextAddr;//跳回原程序
}} void SendHook(){DWORD OldProtect;if(VirtualProtect((LPVOID)sendCode,5,PAGE_READWRITE,&OldProtect))//把要hook地址的内存属性改为可读可写{*(BYTE*)sendCode =0xE9;//e9为jmp*(DWORD*)(sendCode+1) = (DWORD)MySend - (DWORD)sendCode - 0x5;//目标地址地址-原地址-5为jmp要跳地址机器码VirtualProtect((LPVOID)MySend,5,OldProtect,&OldProtect);//恢复地址原来的内存属性}}
 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值