[Help]Packet Sniffer in c++

08/16/2010 20:40 Lazeboy#1
Hey leute,
sry wenn ich einen neuen thread mit der selben frage die schon einmal vorgekommen ist eröffne aber ich habe sufu nichts gefunden :)
Ich habe in Memory Hacking viel gelernt und einige hacks in c++ geschrieben (d3d hooks,dialog menü usw..), aber ich glaube der kern beim hacken von online games ist die kommunikation zwischen server und clienten zu beeinflussen. Ich habe schon viel gegoogelt jedoch kam ich da nie auf ein richtiges ergebnis.
Ich programiere alles in c++.
Ich würde mich freuen wenn mir einer weiter helfen könnte
mfg lazeboy
08/16/2010 22:32 MrSm!th#2
Hol dir nen Packetsniffer wie WPE.
Wenn die Packets crypted sind, musste mit nem Debugger ran und die Entschlüsselung in nen eigenen Packetsniffer einbauen, dann kannste den Packet Verkehr mitschneiden.
Man kann auch direkt im Debugger bleiben, aber ich find das persönlich besser :>

Eigenen Packetsniffer -> die nötigen Winsock Funktionen hooken. kommt eben drauf an, welche version das game nutzt

Entschlüsseln -> Reversing Erfahrung
08/16/2010 23:11 Lazeboy#3
jo ich hab reversing erfahrung und ich hab schon per dll die send funktionen gehooked, aber es gibt doch noch ne andere möglichkeit für nen sniffer denn mit dem hook komm ich nicht weit und das klappt auch nicht so richtig ^^
08/16/2010 23:21 mydoom#4
Wireshark?
08/16/2010 23:39 Lazeboy#5
ich möchte gerne mit einem eigenen programm packets sniffen nicht tools wie wireshark oder wpe nehmen und wenn ich mit wireshark welche gefunden habe kann ich sie nicht senden weil ich nicht weiß wie man das mmit c++ macht
08/16/2010 23:48 MrSm!th#6
send, sendto, recv, recvfrom
WSASend, WSASendto, WSARecv, WSARecvfrom

und dann wäre da noch das UDP protokoll

nein, ohne hooks kannst du den netzwerkverkehr nicht loggen.
jeder sniffer arbeitet so.
man könnte zwar alle anfragen auf nen eigenen host umleiten und dann an die server weiter, aber selbst das kann man indirekt nen hook nennen, auch wenn man dafür nichtmal programmieren muss.
08/16/2010 23:53 Lazeboy#7
ok dann werde ich mal die befehle hooken ^^ danke für die hilfe
08/17/2010 00:06 SmackJew#8
Quote:
Originally Posted by MrSm!th View Post
nein, ohne hooks kannst du den netzwerkverkehr nicht loggen.
jeder sniffer arbeitet so.
Falsch.
08/17/2010 00:10 Lazeboy#9
siehste es geht doch auch über tcp sockets oder sowas hab ich schon gelesen in google
08/17/2010 00:52 Lazeboy#10
Code:
#include <Windows.h>
#include <detours.h>
#include <iostream>
#include <fstream>

	using namespace std;

#pragma comment (lib,"detours.lib")

int (__stdcall *recv_o)(SOCKET s,char *buf,int len,int flags);


void WriteLog(char *text)
{
	ofstream file("LogFile.txt");

	if(file)
	{

		file << text;
		
	}

}

int __stdcall recv(SOCKET s,char *buf,int len,int flags)
{
	MessageBox(0,0,0,0);
	WriteLog(buf);
	return recv_o(s,buf,len,flags);

}


int WINAPI DllMain(HINSTANCE hInst,DWORD Grund,LPVOID lpRecive)
{
	switch(Grund)
	{
	case DLL_PROCESS_ATTACH:
		{
	recv_o = (int(__stdcall*)(SOCKET,char*,int,int))DetourFunction((PBYTE)"recv",(PBYTE)&recv);

		}break;

	case DLL_PROCESS_DETACH:
		{

			DetourRemove((PBYTE)0x00608010,(PBYTE)&recv);

		}break;


	}

	return true;

}





so das ss habe ich zustande gebracht jedoch funktioniert das nicht und ich weiß nicht warum
08/17/2010 01:12 SmackJew#11
Du hast ganz offensichtlich kein wirkliches Verständnis der Programmiersprache.
08/17/2010 01:13 Lazeboy#12
lol gut zu wissen
08/17/2010 01:36 千代子#13
PHP Code:
#pragma comment(lib,"ws2_32.lib")//ws2_32 recv function

int (__stdcall *RealRecv)(SOCKET Socketchar *Bufferint Lengthint Flags); // RealRecv...

RealRecv = (int (__stdcall *)(SOCKETchar *, intint))DetourFunction((PBYTE)recv, (PBYTE)MyRecv); // Detour recv -> Our Function. 
PHP Code:
int WINAPI __stdcall MyRecv(SOCKET SocketcharszBufferint iLenint iFlags){
//....
    
return RealRecv(Socket,szBuffer,iLen,iFlags);

08/17/2010 02:09 MrSm!th#14
Quote:
Originally Posted by SmackJew View Post
Falsch.
Dann korrigiere mich ;)
Wie willst du sonst noch Loggen, ohne den Netzwerkverkehr zu dir zuleiten?
Ich sagte bereits, ich zähle in diesem Falle auch Tricks, wie Netzwerkverkehr auf Localhost Umleiten dazu, also nicht nur Hooks in Form eines Jumps in der Funktion ;)

Mir ist keine andere Technik bekannt, soweit ich weiß, enthält die API keine Funktion, um die letzten 1000 gesendeten Pakete auszulesen o.Ä.

Quote:
siehste es geht doch auch über tcp sockets oder sowas hab ich schon gelesen in google
Dir ist aber schon klar, dass ich genau das geschrieben habe, was du da geposted hast? :facepalm:
Was ist denn das für ne Aussage "es geht über tcp sockets"...du meinst wohl eher, man kann es erreichen, indem man TCP Socket APIs hookt, was dein Code ja auch tut (zumindest so halbwegs) und genau das habe ich geschrieben.

Quote:
Originally Posted by 千代子 View Post
PHP Code:
#pragma comment(lib,"ws2_32.lib")//ws2_32 recv function

int (__stdcall *RealRecv)(SOCKET Socketchar *Bufferint Lengthint Flags); // RealRecv...

RealRecv = (int (__stdcall *)(SOCKETchar *, intint))DetourFunction((PBYTE)recv, (PBYTE)MyRecv); // Detour recv -> Our Function. 
PHP Code:
int WINAPI __stdcall MyRecv(SOCKET SocketcharszBufferint iLenint iFlags){
//....
    
return RealRecv(Socket,szBuffer,iLen,iFlags);

WINAPI is a macro for __stdcall
WINAPI __stdcall doesnt make sense
08/17/2010 08:59 Lazeboy#15
Ich habe alles super hin bekommen danke für die hilfe.
ihr könnt den jetzt closen :)
achja es tut mir leid wenn ich dir zu nah getreten bin Mr Sm!th :)