[Release] Packetlogger - By Doktor.

06/19/2014 21:57 IceTrailer#31
Quote:
Originally Posted by hivg View Post
wie soll ich das denn starten bei mir kommt nur winra und da steht ich kanns nicht öfnnen o,o
mit einem DLL Injector starten.
07/05/2014 17:58 Xqlusiv#32
Wo geb ich denn eig zb c_mode 00000 1 15 7 0 ein verstehe es nicht so genau bitte help :(( skype addy lucas.inga aus dresden kann bildschirmübertragung machen falls nötig
10/11/2014 21:12 lemon250#33
I create .dll using Doktor packet logger source code, but when i inject it to NosTale and move my character i get an error, on NosTale i have black screen:

[Only registered and activated users can see links. Click Here To Register...]

Can someone help me?
11/06/2014 21:07 erh4n#34
wie lade ich mir den packetlogger runter wie aufm bild?
11/06/2014 22:31 SX-Trader#35
Quote:
Originally Posted by erh4n View Post
wie lade ich mir den packetlogger runter wie aufm bild?
Du musst wenn du das Bild am Anfang des Threads siehst, Alt + F4 drücken, der download startet dann automatisch.
11/06/2014 23:19 erh4n#36
Dann schließt sich nur mein internet-.-
12/02/2014 16:45 Maiong1#37
Mal so eine Frage wie fange ich genau die Packete ab und verwandle in meine? kann mir das einer genauer erklären???
12/10/2014 07:32 aiimsh0ckz#38
Quote:
Originally Posted by erh4n
Dann schließt sich nur mein internet-.-
Dann versuchs mal mit Windows+M, Alt+F4, Enter. :rtfm:

Manche Menschen sind echt keine Leuchten.

@Doktor.:


Wad meint der damit?

Ahja, Strukturierung ist dir auch ein Fremdwort? Ebenso wie DEKLARATION der Funktionen? Soll jetzt kein Werturteil sein :D Mich hat's nur gewundert.

Btw - irgendwie so - C++?

Code:
/* 
 * Coded by: Doktor.
 * Language: C / ASM
 * -----------------
 * Reworked by: aiimsh0ckz
 * Language: C++ / ASM
 * Added declarations,
 * attached some {}'s to have a clean text
 */

/* Shut compilers mouth .. */
#define _CRT_SECURE_NO_WARNINGS 

#include <Windows.h>
#include <iostream>

bool DetourFunc(BYTE *, BYTE *, DWORD);
bool DetourFunc(BYTE *oldFunc, BYTE *newFunc, DWORD len)
{
	BYTE *newMem4base = NULL;
	DWORD dwOld;

	newMem4base = (BYTE *)malloc(5 + len);

	if (newMem4base == NULL) {
		return (false);
	}

	for (DWORD i = 0; i < (len + 5); ++i) {
		newMem4base[i] = 0x90;
	}

	VirtualProtect(oldFunc, len, PAGE_READWRITE, &dwOld);

	memcpy(newMem4base, oldFunc, len);
	oldFunc[0] = 0xE8;
	* (DWORD *)(oldFunc + 0x01) = DWORD(newFunc - oldFunc - 5);
	oldFunc[5] = 0xE9;
	* (DWORD *)(oldFunc + 0x06) = DWORD(newMem4base - (oldFunc + 0x5) - 5);
	newMem4base += len;
	newMem4base[0] = 0xE9;
	* (DWORD *)(newMem4base + 0x01) = DWORD((oldFunc + 10) - newMem4base - 5);

	for (DWORD i = 10; i < len; ++i) {
		oldFunc[i] = 0x90;
	}

	return (true);
}

bool bDataCompare(const unsigned char *, const unsigned char *, const char *);
bool bDataCompare(const unsigned char *pData, const unsigned char *bMask, const char *szMask)
{
	for (; *szMask; ++szMask, ++pData, ++bMask) {
		if (*szMask == 'x' && *pData != *bMask) {
			return (false);
		}

		return ((*szMask) == 0);
	}
}

DWORD dwFindPattern(BYTE *, char *);
DWORD dwFindPattern(BYTE *bMask, char *szMask)
{
	DWORD dw_Address = 0x00400000;
	DWORD dw_Len = 0x00436000;

	for (DWORD i = 0; i < dw_Len; ++i) {
		if (bDataCompare((unsigned char *)(dw_Address + i), bMask, szMask)) {
			return ((DWORD)(dw_Address + i));
		}
	}
	return (0);
}

void hkSend(void);
void hkSend(void)
{
	char *packet;

	_asm
	{
		pushad
		pushfd
		MOV packet, EDX
	}

	std::cout << "Send: " << packet << std::endl;

	_asm
	{
		popfd
		popad
	}
}

void hkRecv(void);
void hkRecv(void)
{
	char *packet;

	_asm
	{
		pushad
		pushfd
		MOV packet, EDX
	}

	std::cout << "Recv: " << packet << std::endl;

	_asm
	{
		popfd
		popad
	}
}

DWORD WINAPI tThread(LPVOID);
DWORD WINAPI tThread(LPVOID param)
{
	AllocConsole();
	freopen("CONIN$", "r", stdin);
	freopen("CONOUT$", "w", stdout);
	freopen("CONOUT$", "w", stderr);

	/* Send */
	BYTE s_bPatter[] = { 0x53, 0x56, 0x8B, 0xF2, 0x8B, 0xD8, 0xEB, 0x04 };
	char *s_cPatter = "xxxxxxxx";
	DWORD dSend = dwFindPattern(s_bPatter, s_cPatter);

	/* Recv */
	BYTE r_bPatter[] = { 0x55, 0x8B, 0xEC, 0x83, 0xC4, 0xF4, 0x53, 0x56, 
						 0x57, 0x33, 0xC9, 0x89, 0x4D, 0xF4, 0x89, 0x55, 
						 0xFC, 0x8B, 0xD8, 0x8B, 0x45, 0xFC };
	char *r_cPatter = "xxxxxxxxxxxxxxxxxxxxxx";
	DWORD dRecv = dwFindPattern(r_bPatter, r_cPatter);

	DetourFunc((BYTE *)dSend, (BYTE *)&hkSend, 14);
	DetourFunc((BYTE *)dRecv, (BYTE *)&hkRecv, 11);
	return (0x0);
}

BOOL APIENTRY DllMain(HMODULE, DWORD, LPVOID);
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
	switch (ul_reason_for_call)
	{
	case DLL_PROCESS_ATTACH:
		CreateThread(nullptr, 0, tThread, nullptr, 0, nullptr);
		DisableThreadLibraryCalls(hModule);
		break;
	}
	return (TRUE);
}
12/10/2014 12:19 BladeTiger12#39
Quote:
Originally Posted by aiimsh0ckz
Ahja, Strukturierung ist dir auch ein Fremdwort? Ebenso wie DEKLARATION der Funktionen? Soll jetzt kein Werturteil sein Mich hat's nur gewundert.

Btw - irgendwie so - C++?
Das war ihm wohl ein Fremdwort zu dieser Zeit.


Was der Fehler bedeutet?
Das heißt du hast keine Funktion namens _main.
Was wieder rum vielleicht heißt, das du kein Dll-Projekt erstellt hast.

Probier einfach mal diesen Code einzufügen:

Code:
void _main();
void _main() {

}
12/10/2014 12:23 aiimsh0ckz#40
Quote:
Originally Posted by BladeTiger12
Was wieder rum vielleicht heißt, das du kein Dll-Projekt erstellt hast.
Ohh shit, danke für den Tipp! Is'ne Win32-Application.

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

EDIT:


Projekt is'ne DLL jetzt. Fehler gefunden. :

Code:
bool bDataCompare(const unsigned char *pData, const unsigned char *bMask, const char *szMask)
{
	for (; *szMask; ++szMask, ++pData, ++bMask) {
		if (*szMask == 'x' && *pData != *bMask) {
			return (false);
		}
	} // <-- Hier die Schleife zu machen
		return ((*szMask) == 0);
// } <-- ... und nicht hier
}
NUR WEGEN DIR DOK. NUR WEGEN DIIIR! :D
Direkt am Anfang schleifen setzen.

Jammert halt noch rum.. Aber sonst passts jetzt c:
[Only registered and activated users can see links. Click Here To Register...]
.. was natürlich klar ist, weil .dll's ja keine .exe'n sind..

Kanns ma jmd. testen, ob sich vonner Funktionsweise was geändert hat? Kann hier in der Arbeit (also eig. Schule) schlecht Nos anschmeißen. :D

[Only registered and activated users can see links. Click Here To Register...]

Natürlich VT-Link:

Gruß, aiimsh0ckz. / Topschii

Der Thanksbutton funzt bei mir. Und bei Doktor. auch! :D
12/10/2014 17:36 Doktor.#41
Funktionen so zu deklarieren hat auch wenig Sinn, da kann man die gleich definieren.
Oder man macht es halt so und deklariert sie ganz oben:
Hoffe ich bringe deklarieren und definieren mal wieder nicht durcheinander...

Code:
#define _CRT_SECURE_NO_WARNINGS 

#include <Windows.h>
#include <iostream>

bool DetourFunc(BYTE *, BYTE *, DWORD);
bool bDataCompare(const unsigned char *, const unsigned char *, const char *);
DWORD dwFindPattern(BYTE *, char *);
void hkSend(void);
void hkRecv(void);
DWORD WINAPI tThread(LPVOID);
BOOL APIENTRY DllMain(HMODULE, DWORD, LPVOID);

bool DetourFunc(BYTE *oldFunc, BYTE *newFunc, DWORD len)
{
	BYTE *newMem4base = NULL;
	DWORD dwOld;

	newMem4base = (BYTE *)malloc(5 + len);

	if (newMem4base == NULL) {
		return (false);
	}

	for (DWORD i = 0; i < (len + 5); ++i) {
		newMem4base[i] = 0x90;
	}

	VirtualProtect(oldFunc, len, PAGE_READWRITE, &dwOld);

	memcpy(newMem4base, oldFunc, len);
	oldFunc[0] = 0xE8;
	* (DWORD *)(oldFunc + 0x01) = DWORD(newFunc - oldFunc - 5);
	oldFunc[5] = 0xE9;
	* (DWORD *)(oldFunc + 0x06) = DWORD(newMem4base - (oldFunc + 0x5) - 5);
	newMem4base += len;
	newMem4base[0] = 0xE9;
	* (DWORD *)(newMem4base + 0x01) = DWORD((oldFunc + 10) - newMem4base - 5);

	for (DWORD i = 10; i < len; ++i) {
		oldFunc[i] = 0x90;
	}

	return (true);
}

bool bDataCompare(const unsigned char *pData, const unsigned char *bMask, const char *szMask)
{
	for (; *szMask; ++szMask, ++pData, ++bMask) {
		if (*szMask == 'x' && *pData != *bMask) {
			return (false);
		}

		return ((*szMask) == 0);
	}
}

DWORD dwFindPattern(BYTE *bMask, char *szMask)
{
	DWORD dw_Address = 0x00400000;
	DWORD dw_Len = 0x00436000;

	for (DWORD i = 0; i < dw_Len; ++i) {
		if (bDataCompare((unsigned char *)(dw_Address + i), bMask, szMask)) {
			return ((DWORD)(dw_Address + i));
		}
	}
	return (0);
}

void hkSend(void)
{
	char *packet;

	_asm
	{
		pushad
		pushfd
		MOV packet, EDX
	}

	std::cout << "Send: " << packet << std::endl;

	_asm
	{
		popfd
		popad
	}
}

void hkRecv(void)
{
	char *packet;

	_asm
	{
		pushad
		pushfd
		MOV packet, EDX
	}

	std::cout << "Recv: " << packet << std::endl;

	_asm
	{
		popfd
		popad
	}
}

DWORD WINAPI tThread(LPVOID param)
{
	AllocConsole();
	freopen("CONIN$", "r", stdin);
	freopen("CONOUT$", "w", stdout);
	freopen("CONOUT$", "w", stderr);

	/* Send */
	BYTE s_bPatter[] = { 0x53, 0x56, 0x8B, 0xF2, 0x8B, 0xD8, 0xEB, 0x04 };
	char *s_cPatter = "xxxxxxxx";
	DWORD dSend = dwFindPattern(s_bPatter, s_cPatter);

	/* Recv */
	BYTE r_bPatter[] = { 0x55, 0x8B, 0xEC, 0x83, 0xC4, 0xF4, 0x53, 0x56, 
						 0x57, 0x33, 0xC9, 0x89, 0x4D, 0xF4, 0x89, 0x55, 
						 0xFC, 0x8B, 0xD8, 0x8B, 0x45, 0xFC };
	char *r_cPatter = "xxxxxxxxxxxxxxxxxxxxxx";
	DWORD dRecv = dwFindPattern(r_bPatter, r_cPatter);

	DetourFunc((BYTE *)dSend, (BYTE *)&hkSend, 14);
	DetourFunc((BYTE *)dRecv, (BYTE *)&hkRecv, 11);
	return (0x0);
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
	switch (ul_reason_for_call)
	{
	case DLL_PROCESS_ATTACH:
		CreateThread(nullptr, 0, tThread, nullptr, 0, nullptr);
		DisableThreadLibraryCalls(hModule);
		break;
	}
	return (TRUE);
}
Soweit ich weis ist der Pattern für Recv outdated, also möglich das er nicht funktioniert, außer du hast die in deinem Code geupdated. :D

Mfg.
Doktor.
12/10/2014 20:16 aiimsh0ckz#42
Quote:
Originally Posted by Doktor.
Funktionen so zu deklarieren hat auch wenig Sinn, da kann man die gleich definieren.
Oder man macht es halt so und deklariert sie ganz oben:
Hoffe ich bringe deklarieren und definieren mal wieder nicht durcheinander...

/* CODE */

Soweit ich weis ist der Pattern für Recv outdated, also möglich das er nicht funktioniert, außer du hast die in deinem Code geupdated. :D

Mfg.
Doktor.
Ich mach's öfters so ...vor der Funktion die Deklaration. :o

Also ich hab da zwei einfache Wörter für - da kannste nix durcheinander bringen.

Code:
unsigned int myFunkt(unsigned int); // Deklaration

/* Implementation */
unsigned int myFunkt(unsigned int para) { 
...
return(rgw_watever);
}
Irgendwie so xDD

---

Und nee, hab die Patterns noch ned geupdated. Teach me, Master! :D
12/10/2014 20:33 Doktor.#43
Dadurch hast du aber halt keine weiteren Vorteile, außer wenn du die Funktion weiter oben deklarierst und dann eine andere Funktion schreibst kann du dort die vorher deklarierte Funktion schon nutzen.

z.B.:

Code:
void dieFunk(int,int);

void dieAndereFunk(int x, int y) {
       
       dieFunk(x,y); // <--- Funktion kann hier schon aufgerufen werden
}

void dieFunk(int x, int y) {
    // Do something....
}
Was bei deiner Variante nicht möglich wäre:

Code:
void dieAndereFunk(int x, int y);
void dieAndereFunk(int x, int y) {
       
       dieFunk(x,y); // <--- Funktion kann hier NICHT aufgerufen werden
}

void dieFunk(int x,int y);
void dieFunk(int x, int y) {
    // Do something....
}
12/10/2014 23:21 aiimsh0ckz#44
Quote:
Originally Posted by Doktor. View Post
Dadurch hast du aber halt keine weiteren Vorteile, außer wenn du die Funktion weiter oben deklarierst und dann eine andere Funktion schreibst kann du dort die vorher deklarierte Funktion schon nutzen.

z.B.:

Code:
void dieFunk(int,int);

void dieAndereFunk(int x, int y) {
       
       dieFunk(x,y); // <--- Funktion kann hier schon aufgerufen werden
}

void dieFunk(int x, int y) {
    // Do something....
}
Was bei deiner Variante nicht möglich wäre:

Code:
void dieAndereFunk(int x, int y);
void dieAndereFunk(int x, int y) {
       
       dieFunk(x,y); // <--- Funktion kann hier NICHT aufgerufen werden
}

void dieFunk(int x,int y);
void dieFunk(int x, int y) {
    // Do something....
}
Jaa is ja klar. C-Basics.
Auch "deutsches Schulsystem" genannt.
Vom Programm verlangen etwas auszuführen,
was dem Programm noch nicht nahegelegt wurde. :D
12/19/2014 16:24 spark100#45
Darf ich fragen wozu so ein Packetlogger dient?