Packet sending

01/24/2012 21:54 D4rk_Sasuke#1
Hey,

I have manged to hook, wsasend()/wsarecv()... But why is the sent data different to the data I logg with a packeteditor?

How I mange it to send a packet?

--------------

Ich habe es geschafft die wsasend()/wsarecv Funktionen zu hooken. Aber warum sind die Daten die ich dort abfange anders, als die die ich mit wpe pro sniffe?

Und wie bekomme ich es hin nun Packete zu senden?

greets
D4rk_Sasuke
01/24/2012 22:47 MoepMeep#2
wpe hookt auch nur send/recv bzw wsasend/wsarecv. Wenn du da etwas anderes raus hast, musst du was falsch gemacht haben ;)
Kann natürlich auch dadran liegen, dass die Verschlüsselung, falls vorhanden, dynamisch ist ;)
01/24/2012 23:06 D4rk_Sasuke#3
Also die Daten die ich gesnifft habe sind unverschlüsselt und statisch... Habe nun den lpBuffer in lpBuffer->buf und lpBuffer->len aufgeteilt nun habe ich auchd ie richtigen Daten, nur das hängt bei buf noch mehr hinten drann?? Also über die length von der angegebenen lpBuffer->len hinweg?
01/24/2012 23:10 MoepMeep#4
Poste einfach mal deinen Code, dann kann dir eher geholfen werden.
01/25/2012 06:43 D4rk_Sasuke#5
PHP Code:
// dllmain.cpp : Definiert den Einstiegspunkt für die DLL-Anwendung.
#include "stdafx.h"
#include <Windows.h>
#include <cstring>
#include "detours.h"
#include <winsock2.h>
#include <fstream>

using namespace std;

#pragma comment(lib,"detours.lib") 
typedef int (WINAPI *SendFunc)(SOCKET, const char*, intint);
typedef int (WINAPIt_WSASend)(SOCKET,LPWSABUF,DWORD,LPDWORD,DWORD,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE );

int count 0;
int count1 0;
t_WSASend o_WSASend NULL;
SendFunc o_Send NULL;

int WINAPI hook_WSASend(SOCKET s,LPWSABUF lpBuffers,DWORD dwBufferCount,LPDWORD lpNumberOfBytesSent,DWORD dwFlags,LPWSAOVERLAPPED lpOverlapped,LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)
{
    
        
fstream datei;
        
datei.open("WSASend.txt"ios::out ios::ate ios::app);
        
count++;


        
datei << count << ". " << << " " << lpBuffers << " " << lpBuffers->buf << " " <<  lpBuffers->len << " " << dwBufferCount << " " << lpNumberOfBytesSent << " " << dwFlags << " " << lpOverlapped <<  " " << lpCompletionRoutine << "\n" << endl;
        
datei.close();
    
    return 
o_WSASend(s,lpBuffers,dwBufferCount,lpNumberOfBytesSent,dwFlags,lpOverlapped,lpCompletionRoutine);
}

int WINAPI hook_Send(SOCKET s, const charbufint lenint flags)
{
            
fstream datei;
        
        
datei.open("SendPackets.txt"ios::out ios::ate ios::app);
        
count1++;
        
datei << count1 << ". " << << " " <<  buf << " " << len << " " << flags << "\n" << endl;
        
datei.close();

    return 
o_Send(sbuflenflags);
}


BOOL APIENTRY DllMainHMODULE hModule,
                       
DWORD  ul_reason_for_call,
                       
LPVOID lpReserved
                     
)
{
    switch (
ul_reason_for_call)
    {
    case 
DLL_PROCESS_ATTACH:
        
o_WSASend = (t_WSASend)DetourFunction((PBYTE)&WSASend,(PBYTE)&hook_WSASend);
        
o_Send = (SendFunc)DetourFunction((PBYTE)send,(PBYTE)hook_Send);
        break;
    case 
DLL_THREAD_ATTACH:
    case 
DLL_THREAD_DETACH:
    case 
DLL_PROCESS_DETACH:
        break;
    }
    return 
TRUE;

01/25/2012 11:22 MoepMeep#6
Dazu dann bitte noch deinen output und den output von WPE.
01/25/2012 11:50 xNopex#7
Code:
fstream datei;
        datei.open("WSASend.txt", ios::out | ios::ate | ios::app);
        count++;


        datei << count << ". " << s << " " << lpBuffers << " " << lpBuffers->buf << " " <<  lpBuffers->len << " " << dwBufferCount << " " << lpNumberOfBytesSent << " " << dwFlags << " " << lpOverlapped <<  " " << lpCompletionRoutine << "\n" << endl;
        datei.close();
Datei mit std::ios::binary öffnen und mit .write() reinschreiben.
01/25/2012 15:29 D4rk_Sasuke#8
So nun habe ich die richtigen Daten.

Wie sende ich denn aber nun ein Packet? Also von einem anderen Programm aus?
01/26/2012 19:37 xNopex#9
Quote:
Wie sende ich denn aber nun ein Packet? Also von einem anderen Programm aus?
Nja im externen Programm einfach mit dem Server verbinden und dann senden?
01/26/2012 20:29 D4rk_Sasuke#10
Also so connecten... Wobei sock der geloggte socket ist.

PHP Code:
   addr.sin_family=AF_INET;

   
addr.sin_port=htons(12345); // server port

  
addr.sin_addr.s_addr=inet_addr("127.0.0.1"); //server ip



  
rc=connect(sock ,(SOCKADDR*)&addr,sizeof(SOCKADDR)); 
ICh bekomme Fehler code 10038

Quote:
WSAENOTSOCK
10038
Socket operation on nonsocket.
An operation was attempted on something that is not a socket. Either the socket handle parameter did not reference a valid socket, or for select, a member of an fd_set was not valid.
Oder sollte ich den Game connect sicherheitshalber auch hooken?