能力值:
( LV2,RANK:10 )
|
-
-
2 楼
思路可以这样: 1、先向C端进行远程线程注入; 2、这个线程再HOOK C端的数据发送函数; 3、这个线程还可以与S2进行通讯; 4、S2可以将要发送的数据发送给线程,然后线程中可以把数据发送到S端。。
|
能力值:
( LV7,RANK:105 )
|
-
-
3 楼
"借用S端的socket向C端发“,这个可以通过hook拿到S端已有的socket,然后就可以自己控制发送数据了。
|
能力值:
( LV1,RANK:0 )
|
-
-
4 楼
WSADuplicateSocket ?
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
浙江螃蟹
思路可以这样:
1、先向C端进行远程线程注入;
2、这个线程再HOOK C端的数据发送函数;
3、这个线程还可以与S2进行通讯;
4、S2可以将要发送的数据发送给线程,然后线程中可以把数据发送 ...
谢谢!看来需要通过hook socket来达到目的。我先了解一下这块。
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
yegu
"借用S端的socket向C端发“,这个可以通过hook拿到S端已有的socket,然后就可以自己控制发送数据了。
多谢,hook socket这个思路,看来可行。请问能否找到这方面的例子?另外有个疑问,Hooker程序S2,与S1共享同一个socket,两者都接收数据的话,估计会坏事;但S2要发送数据的话,应该与S1的发送错开吧?同时发,怕是数据会搞乱了
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
zz77
WSADuplicateSocket ?
忘了还有这个函数~~~多谢提醒!
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
WSADuplicateSocket DuplicateHandle 应该都可以
|
能力值:
( LV3,RANK:30 )
|
-
-
9 楼
主要是找到初始化那段特征码,下面是以前某第三方UDP服务端中注入自己DLL的代码片段:
#define SOCKET_INF "\x8D\x4D\x08\x8D\x55\xEC\x51\x52\x6A\x00\x8D\x8D\x40\xF0\xFF\xFF\x68\xAA\x0F\x00\x00\x51\x50"
#define SOCKET_INF_BYTES sizeof(SOCKET_INF)-1
SOCKET m_GameSocket=0;
void *psocket_filter = NULL;
char* m_szPacket[128] = {0x00};
__declspec(naked)void socket_filter()
{
__asm
{
mov m_GameSocket,eax
jmp psocket_filter
}
}
// 发送消息
void SendMsg()
{
if(m_GameSocket)
{
sockaddr_in remoteAddr;
remoteAddr.sin_family = AF_INET;
remoteAddr.sin_addr.S_un.S_addr = pinet_addr("127.0.0.1");
remoteAddr.sin_port = phtons(9999);
sendto(m_GameSocket, (char*)&m_szPacket, sizeof(m_szPacket), 0, (sockaddr*)&remoteAddr, sizeof(remoteAddr));
}
}
// 开始安装勾子
void StartHook()
{
void *pAddress = NULL;
pAddress = (void*)GetModuleHandleA("xxxx.dll");
psocket_filter = FIND_MEMORY(pAddress,SOCKET_INF);
if(psocket_filter)
{
DetourTransactionBegin();
DetourAttach((void**)&psocket_filter,socket_filter);
DetourTransactionCommit();
}
else
{
printf("could not found the master socket pointer.");
}
}
|
|
|