c++ hook 各位大虾,我用c writeprocessmemoryy来修改某条汇编代码来达到hoo

问题补充&&
本页链接:
这个要在c和c++中嵌入汇编,用汇编写
mafangsan&4-11 06:16
用softice跟踪调试即可。管用。
DerrickScott&4-11 14:52
猜你感兴趣网络游戏外挂C++编写_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
网络游戏外挂C++编写
上传于||文档简介
&&网​络​游​戏​外​挂​C​+​+​编​写​
​
​C​+​+​编​写​网​络​游​戏​外​挂
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
下载文档到电脑,查找使用更方便
还剩8页未读,继续阅读
你可能喜欢拦截http协议封包hook哪些_百度知道
拦截http协议封包hook哪些
提问者采纳
//1 &#47: return PROTOCOL_STRING_UNKNOW_TXT;: &#47,完毕后再将执行结果也写入log文件; ),其中flag 设置为ture, lParam )、IP源地址; DWORD pRecv = 0;; 生命期 BYTE Pn& hook type HOOKPROCsend&quot, sizeof(DWORD)*2, CREATE_ALWAYS, GENERIC_WRITE; ); )。必须注意的是.168;r\/ 校验和 WORD UrgPtr,以使调用变为串行进行, &quot!= NULL ) { return CallNextHookEx( hOldHook, &quot,这样我们才能把代码放到别的进程里去。   小结   本文介绍的以原始套接字方式对网络数据进行捕获的方法实现起来比较简单,得到的一个分析结果如下,需要包含头文件winsock2.1,只要保证是目标程序肯定会调用到就行, (void *)btNewB &#47,原始套接字此时捕获到的数据包并不仅仅是单纯的数据信息, RecvB 。下面先给出结构,我们必须设法把自己的代码放到目标程序的进程空间里去;/ *(DWORD *)( btNewBytes + 1 ) = (DWORD)new_GetMessage:GetProtocolTxt(int Protocol) { switch (Protocol){ case IPPROTO_ICMP , IP_HDRINCL;/ &#47.sin_family = AF_INET: 172, sizeof(DWORD)*2; 设置 SOCK_RAW 为SIO_RCVALL, strlen( szTemp ), 0x0;* tcp */ return PROTOCOL_STRING_ICMP_TXT.dll中的send和recv:, BUFFER_SIZE; :, (void *)dwOldBytes[0];Before GetM &#47, 0x0E0,以便接收所有的IP包; 源地址 DWORD DstA dwValue为输入输出参数, 0x0,还要给TCP数据包添加一个IP数据段头以组成IP数据报; :。通过对这些在低层传输的原始信息的分析可以得到有关网络的一些信息,尤其是不需要编写VxD虚拟设备驱动程序就可以实现抓包; typedef IP * LPIP; &#47,GetProtocolTxt(。SetWindowsHookEx的声明如下, / n\/TCP&quot, MSG 0x%8; *(DWORD *)( btNewBytes + 1 ) = (DWORD)new_send,就是把三个函数的首8字节修改一下(实际上只需要7个); BYTE TimeToLtime,但嗅探器本身的危害并不是很大; #define PROTOCOL_STRING_SPX_TXT &/ if (ret &gt::WriteProcessMemory( INVALID_HANDLE_value, X %d, 如 ARP数据包,因此不能接收到与 IP 同属网络层的其它数据包, lpMsg-&gt.dll&hwnd文章比较长。 之后,这也有别于通常经常使用的数据流套接字和数据报套接字;\/ 源端口 WORD DstPr&#92,这些信息保留了它在网络传输时的原貌,亲自对IP头进行处理 setsockopt(wParam。其中UDP数据段头比较简单, (void *)dwOldBytes[2];&#47,没有对数据包做进一步的分析; *(DWORD *)( btNewBytes + 1 ) = (DWORD)new_recv.SrcPort); LRESULT CALLBACK CallWndProc( int nCode,inet_ntoa(*(in_addr*)& , /Watch over return r, strlen( szTemp ),可对原始套接字的使用方法以及TCP&#47:ReadProcessMemory( INVALID_HANDLE_ #define PROTOCOL_STRING_UDP_TXT &quot, HWND hWnd:&#92, &dwValue):10 数据包长度;n&&#47:WriteFile( hDebug.log& &#47: while (true) { &#47,在实际编程中也需要通过一个数据结构来表示此IP数据段头;ws2_32;s executed sprintf( szTWatch here before it'SPX&quot.8x &#92, lpMsg-&new_GetMn& } 上面的钩子函数, lpMsg-& hook it again *(DWORD *)( btNewBytes + 1 ) = (DWORD)new_GetMessage。我们自己的钩子函数中;/6 / if( dwCurrentPID == 0 ) { dwCurrentPID = GetCurrentProcessId(); DWORD dwPIDW&#47,下面给出此数据结构的定义; ; /r\ BYTE btNewBytes[8] = { 0x0B8:WriteProcessMemory( INVALID_HANDLE_value, (void *)btNewB HWND hwndMainHook.h和ws2 获取本地 IP 地址 pHost = gethostbyname((char*)LocalName)),通常的套接字程序只能响应与自己硬件地址相匹配的或是以广播形式发出的数据帧:,ntohs(&#47, wParam,使用了GetProtocolTxt()函数; 窗口大小 WORD Chksum, (void *)pGetMessage。也就是通过将所需要截获的API的开头几个字节改为一个跳转指令;, IPPROTO_IP;&#47、TCP目标端口号以及数据包长度等信息; tcp = *(TCP*)(RecvBuf + ip,dwThreadId设为0, lpMsg-&gt.DstPort),对于其他形式的数据帧比如已到达网络接口但却不是发给此地址的数据帧;r&#92, 0, r ); /user32;UNKNOW& TRACE(&quot, 0 }: 数据包 IP头 TCP头(或其他信息头) 数据   数据在从应用层到达传输层时, msgMin 0x%8, hW/ ); ), wParam 0x%8: 172;* control message protocol */&#47.168, &/   在网络层,得慢点看; 版本 BYTE HdrL if( r ) { sprintf( szTemp, 0 ): #define SIO_RCVALL _WSAIOW(IOC_VENDOR。显然,以20个固定字节开始;/&#47, 2), 0 );n& default, Y %d&#92:;Watch over / / / TRACE(&lP/&#47,偷梁换柱已经完成, & 协议WORD HdrChksum, &dwSize: typedef struct _TCP{ WORD SrcP GETMESSAGE pGetMessage = NULL: 172; char szTemp[256]::19522 数据包长度;n&quot,此时。 虽然网络嗅探器技术被黑客利用后会对网络安全构成一定的威胁; hwndMainHook = , (WM_USER+101),或是UDP数据段头;r&#92。IP数据段头格式如下; BOOL r =/ 的定义为,就可以对捕获到的数据包进行分析了.1 TCP源端口号;/TCP目标端口号,以原始套接字的方式 截获流经本机网卡的IP数据包 从事网络安全的技术人员和相当一部分准黑客(指那些使用现成的黑客软件进行攻击而不是根据需要去自己编写代码的人)都一定不会对网络嗅探器(sniffer)感到陌生,主要是用来为其他黑客软件提供网络情报: &#47、TCP数据段头的结构描述而对捕获的数据包进行分析; pRecv = (DWORD)GetProcAddress( hLib,在进行协议分析时, (WM_USER+100); 把原始套接字sock 绑定到本地网卡地址上 bind(数据包长度。你可以把其中的写log部分改成你自己想要的操作。此分析结果可供网络安全分析之用.h;r\&#47, sizeof(DWORD)*2,而且还可以指定是否亲自处理IP头, szT&#47,写入到一个log文件中,同时为程序流程的清晰起见,可以在每次new_GetMessage中加入一个CriticalSection的锁和解锁。主要代码实现清单为。 整个截获的过程就是这样,下面就给出一个简单的示例:; 目的地址 BYTE O ),并可从中分析出协议,但如为黑客所利用也可以为其发动进一步的攻击提供有价值的信息; / TCP头长 BYTE F return PROTOCOL_STRING_TCP_TXT,接收到的原始数据包存放在缓存RecvBuf[]中:WriteProcessMemory( INVALID_HANDLE_value, (void *)pS /&#47, 0 ), 0 )。 这里Hook本身的功能并不重要, wMsgFilterMin, 0x40,网络嗅探器无论是在网络安全还是在黑客攻击方面均扮演了很重要的角色; …… CString CSnifferDlg。Windows Hook可以帮我们实现这一点,下面就结合注释对程序的具体是实现进行讲解.1;协议.8X, sizeof(DWORD)*2、RARP数据包等, UINT wMsgFilterMin:; &#47, (PSOCKADDR)&addr_in,然后再通过bind()函数将原始套接字绑定到本地网卡; } }   其中; #define PROTOCOL_STRING_NCP_TXT & &#47,tcp: %s\ &#47,去掉了错误检查等保护性代码; IHL }, FILE_ATTRIBUTE_NORMAL。   具体到编程实现上。可见; dwPIDWatched = ,以便分析,嗅探器实际是一把双刃剑; ;/ / BYTE ServiceType, (void *)btNewBytes,还需要通过ioctlsocket()来进行设置; /Watch here after it' TRACE(&recv&quot, &dwSize ): TCP IP源地址。但是与其他两种套接字不同的是;TCP源端口号: 19714 TCP目标端口号,&#47,第一次运行将进行最重要的API重定向的工作:WriteFile( hDebug。解决办法是.8X.dll& &#47, 0 );message,要达到此目的就不能再让网卡按通常的正常模式工作,网络嗅探手段可以有效地探测在网络上传输的数据包信息:: HHOOK SetWindowsHookEx( int idHook。IP数据头以大端点机次序传送。这里我想截三个调用, szTemp,WSAData为WSADATA结构对象 WSAStartup(MAKEWORD(2;r&#92.1: 16707 TCP目标端口号; #define PROTOCOL_STRING_TCP_TXT &quot,1) ioctlsocket(sock。如果是小端点机;n&quot, &quot.SrcAddr)),将添加TCP数据段头;&#92,该函数实现如下;/ &#47,此程序完全具备了嗅探器的数据捕获以及对数据包的分析等基本功能, (char*)&flag,也就是说应用程序无法收取到达的数据包; &#47, &dwSize ), (void *)pRecv:ReadProcessMemory( INVALID_HANDLE_value:WriteProcessMemory( INVALID_HANDLE_value,需要通过setsockopt()函数来设置IP头操作选项,并输出分析结果 ip = *(IP*)RecvBuf。btNewBytes中的指令实际就是   前面的工作基本上都是对原始套接字进行设置,真正的攻击主要是由其他黑软来完成的, szTemp. sprintf( szTemp, szT 获取本机名 gethostname((char*)LocalNTrace: &#47.Protocol)): 协议, &dwSn&#92, sizeof(flag));, &dwSize ): %d\ TRACE(&quot, LPARAM lParam ) { DWORD dwSize。由于前面已经将程序的设计流程讲述的比较清楚了; / #define PROTOCOL_STRING_UNKNOW_TXT &quot,由一个8字节的头和数据部分组成,下面给出TCP数据段头的格式组成.168; 填充SOCKADDR_IN结构 addr_in: 78 …… 协议; / &#47, & pGetMessage = (GETMESSAGE)GetProcAddress( hL 选项 } IP; &#47, 0, sizeof(DWORD)*2, &WSAData); 0) { &#47,对网卡的编程也是使用通常的套接字(socket)方式来进行;/&#47:, UINT wMsgFilterMax ) { DWORD dwSize。hook Type我们任选一种即可,有必要对网络嗅探器的实现原理进行介绍: 16位 16位 版本 IHL 服务类型 总长 标识 标志 分段偏移 生命期 协议 头校验和 源地址 目的地址 选项(0或更多)   同样,然后将GetMessageA的执行结果返回给调用者, &#47, hWnd, &quot, (void *)pRecv,就可以通过recv()函数从网卡接收数据了;。而在网络安全方面;&#47,具体格式如下.x, &dwSize );r&#92,而必须将其设置为混杂模式:FindWindow( 0; &#47, (void *)btNewBytes,但由于捕获到的数据包头不包含有帧信息。 嗅探器的具体实现   根据前面的设计思路。然后恢复原先保留下来的GetMessageA的首8字节, (void *)pGetMessage, &dwSize )。权衡利弊。然后就可以根据前面对IP数据段头, (void *)dwOldBytes[2],我们使用它的目的仅仅只是为了能够让Windows把我们的代码植入别的进程里去; hook procedure HINSTANCE hMod。以GetMessageA为例,缓冲区长度BUFFER_SIZE定义为65535;&#47.DstAddr)), &/ &#47。 首先:%d&#92,比如new_recv/ hDebug = ;&#47。通过本文的介绍;IP目标地址, lpMsg-&gt、IP目标地址, sizeof(LocalName)-1); &#47:CreateFile( &h_addr_list[0], &dwSize ),这种对网卡混杂模式的设置是通过原始套接字(raw socket)来实现的: %s&#92, 0,也是通过对网卡的编程来实现网络通讯的; return PROTOCOL_STRING_UDP_TXT,如果目标进程是多线程的, (void *)pSend。这是最关键的部分, (void *)pGetMessage,从左到右:WriteProcessMemory( INVALID_HANDLE_value:;NCP&r&#92, 0x400000 jmp eax 这里的0x400000就是新的函数的地址; .sin_addr = *(in_addr *)pHost-&17 /IP addr_ / typedef IP UNALIGNED * ULPIP;;/;IP源地址; 对数据包进行分析;* user datagram protocol */ hOldHook = (HHOOK); 顺序号 DWORD AckNum, msgMax 0x%8, strlen(szTemp),该示例可以捕获到所有经过本地网卡的数据包、 TCP头等信息头的最原始的数据信息;UDP&quot,在将原始套接字设置完毕;M typedef TCP UNALIGNED * ULPTCP;&#47。 文章正文   嗅探器设计原理   嗅探器作为一种网络通讯程序。再看看我们的函数中都干了些什么;&#47, SIO_RCVALL; 创建原始套接字 sock = socket(AF_INET: %s&#92, nC&#47, &dwSize )。在本示例中将分析结果用TRACE()宏进行输出, 0; } return 0; 具体的参数含义可以翻阅 分段偏移 };n&quot,在调试状态下运行,因此这里就不在赘述了; 设置IP头操作选项; DWORD dwOldBytes[3][2]; }   最后;new_send&#47,比如你想分析一下别人的程序是怎样工作的; 标志(URG:,inet_ntoa(*(in_addr*)&&#47,为了使程序能成功编译。由于这些数据经过了网络层和传输层的打包;/ &#47, &dwSize:.168。这里我介绍一下一种我自己试验通过的方法:WriteFile( hDebug.8X; thread identifier ),就会有问题: 172。为了让原始套接字能接受所有的数据; .HdrLen).TotalLen)); /Pentium是小端点机); 检查 Winsock 版本号:: BOOL _stdcall new_GetMessage( LPMSG lpM HHOOK hOldHook = NULL; case IPPROTO_TCP ; case IPPROTO_UDP .&#92.8X&#92, &dwSize ); execute it r = pGetMessage( lpM typedef TCP *LPTCP,实际就可以开始对网络数据包进行嗅探了.8X。 DWORD dwCurrentPID = 0; } } if( hOldHook ,表示对所有系统内的线程都挂上这样一个hook、TCP源端口号; &#47: 200 ……   从分析结果可以看出, 0x0FF, &dwSize,没有msdn可谓寸步难行;&#47.1: #define PROTOCOL_STRING_ICMP_TXT & 总长 WORD ID; 目的端口 DWORD SeqN DWORD pSend = 0。而网络嗅探器的目的恰恰在于从网卡接收所有经过它的数据包, wMsgFilterM; /&#47。但是: 16位 16位 源端口 目的端口 UDP长度 UDP校验和   而TCP数据头则比较复杂;&#47.8x:SendMessage( hwndMainHook,并可实现对网络上传输的数据包的捕获与分析。lpfn和hMod分别指向我们的钩子代码及其所在的 ;n&, lpMsg-&&#47,为1时执行,通过对这些信息的分析利用是有助于网络安全维护的。通过使用网络嗅探器可以把网卡设置于混杂模式。至此;n&/ &#47, 0); );/ HANDLE hDebug = INVALID_HANDLE_value: typedef struct _IP{ union{ BYTE Version, sizeof(DWORD)*2,这里我用的是WH_CALLWNDPROC,因此还必须区分一下进程号,然后执行真正的GetMessageA调用。在创建了原始套接字后.y ),截获动作是不能够并发进行的、user32: 16位 16位 源端口 目的端口 顺序号 确认号 TCP头长 (保留)7位 URG ACK PSH RST SYN FIN 窗口大小 校验和 紧急指针 可选项(0或更多的32位字) 数据(可选项)   对于此TCP数据段头的分析在编程实现中可通过数据结构_TCP来定义; } strcpy( szTemp:.数据包的总体结构;&#47.8X; } 先将截获下来的参数; if( dwCurrentPID == dwPIDWatched ) { hLib = LoadLibrary( &nTime 0x%8, 0 ); handle to application instance DWORD dwThreadId &#47。其中SIO_RCVALL &#47,而是仅仅给出了对一般信息的分析方法, WPARAM wP&#47、ACK等) WORD Window,对数据包的获取仍象流式套接字或数据报套接字那样通过recv()函数来完成; 确认号 BYTE DataOff: %d\ / 头校验和 DWORD SrcAddr, wMsgFilterMax ),版本字段的高位字节先传输(SPARC是大端点机,而是包含有 IP头;r&#92.255 TCP源端口号; &#47: / TRACE(&quot, (void *)dwOldBytes[1],ws2_32; addr_in,使其跳转到我们的API中来; ,0时取消 DWORD dwValue = 1,我们的代码就已经进入了系统内的所有进程空间了; 紧急指针 } TCP, IPPROTO_RAW)), wMsgFilterMax ),我们只需要截获我们所关心的目标程序的调用:; 标志 WORD FragOff, SOCK_RAW;C; / HMODULE hLib。在前面给出的示例程序中考虑到安全因素,该函数负责将IP包中的协议(数字标识的)转化为文字输出, sizeof(DWORD)*2: UDP IP源地址:SendMessage( hwndMainHook, sizeof(addr_in)); ; 服务类型 WORD TotalLen,因此需要根据其附加的帧头对数据包进行分析; hLib = LoadLibrary( & pSend = (DWORD)GetProcAddress( hLMainHook&quot, strlen( szTemp );   在明确了以上几个数据段头的组成结构后, 0x0;ICMP& TRACE(&quot, 0 ),网络接口在验证投递地址并非自身地址之后将不引起响应: HWND 0x%8.dll中的GetMessageA。这里有个不足的地方是:ReadProcessMemory( INVALID_HANDLE_Result of GetMessage is %d,就要在发送和接收时先行转换然后才能进行传输, (void *)pGetM 接收原始数据包信息 int ret = recv(n& 标识 union{ WORD Flags:WriteFile( hDr&#92,只有第一次运行时有用;r\r&#92,使得其编写过程变的非常简便.sin_port = htons(57274).17 IP目标地址,在固定头后面还可以有一些长度不固定的可选项: HWND 0x%8; &#47,这些数据包即可以是发给它的也可以是发往别处的, lParam 0x%8,不难写出网络嗅探器的实现代码, lpMsg-&gt。转载   利用HOOK拦截封包原理 截获API是个很有用的东西;/GetMessageA&quot.5 IP目标地址;IP协议结构原理等知识有一个基本的认识, sizeof(DWORD)*2,使其能按预期目的工作时
资深电脑人
其他类似问题
为您推荐:
其他1条回答
文章比较长,得慢点看。转载
利用HOOK拦截封包原理 截获API是个很有用的东西,比如你想分析一下别人的程序是怎样工作的。这里我介绍一下一种我自己试验通过的方法。 首先,我们必须设法把自己的代码放到目标程序的进程空间里去。Windows Hook可以帮我们实现这一点。SetWindowsHookEx的声明如下: HHOOK SetWindowsHookEx( int idHook, // hook type HOOKPROC lpfn, // hook procedure HINSTANCE hMod, // handle to application instance DWORD dwThreadId // thread identifier ); 具体的参数含义可以翻阅msdn,没有msdn可谓寸步难行。 这里Hook本身的功能并不重要,我们使用它的目的仅仅只是为了能够让Windows把我们的代码植入别的进程里去。hook Type我们任选一种即可,只要保证是目标程序肯定会调用...
hook的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁c++ hook 各位大虾,我用WriteProcessMemory来修改某条汇编代码来达到hoo_百度知道
c++ hook 各位大虾,我用WriteProcessMemory来修改某条汇编代码来达到hoo
参数3我不知道怎么弄了,可以加分,我要怎么处理才可以来写,我用WriteProcessMemory来修改某条汇编代码来达到hook的目的,我取到了我要hook过来的子程序地址,然后想要写出jmp 0x123456,可是现在突然发现,不知道能看懂不,减去我要修改目标地址。自学的我说的有点抽象,而且我不知道怎么做5字的类型,可是写进去的是二进制c++ hook各位大虾
我有更好的答案
这个要在c和c++中嵌入汇编,用汇编写
还有你查了jmp的机器指令编号了么
查过了jmp 偏移的字节
用softice跟踪调试即可。管用。
其他类似问题
为您推荐:
大虾的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 hook process 的文章

 

随机推荐