Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding
You last visited: Today at 19:32

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Packete Decrypten und Entcrypten

Discussion on Packete Decrypten und Entcrypten within the General Coding forum part of the Coders Den category.

Reply
 
Old 08/18/2010, 01:40   #16
 
Lazeboy's Avatar
 
elite*gold: 0
Join Date: Jun 2008
Posts: 451
Received Thanks: 410
Hey ich hab das mal mit inline versucht ;D bitte nicht lachen


Code:
DetourFunction((PBYTE)Crypt,(PBYTE)MyCrypt);

Code:
void MyCrypt()
{
	DWORD PacketLength = 0;
	BYTE XorCrypt = 0;
	
	__asm
	{
		MOV PacketLength,ESI
		MOV ECX,EAX
		AND ECX,0x3
		MOV DL,BYTE PTR DS:[EBX+ECX+0x1054]
		MOV XorCrypt,DL
		ADD EAX,0x1
		CMP EAX,ESI
		JL 0x00608220
	}

	char buffer[100];
	sprintf(buffer,"%d    %d",XorCrypt,PacketLength);
	MessageBox(0,buffer,0,0);
}




was haltet ihr davon ?


packetLength stimmt aber das game schliesst direkt danach ka wieso
aller anfang ist schwer




ich habs nochmal überarbeitet ^^
es zeig die länge an und die erst XOR encryption aber dan crashed es QQ

Code:
bool MyCrypt()
{
	DWORD PacketLength = 0;
	BYTE XorCrypt = 0;
	DWORD Count = 0;
	

	do
	{
		__asm
		{
		
		MOV PacketLength,ESI
		MOV Count,EAX
		MOV ECX,EAX
		AND ECX,0x3
		MOV DL,BYTE PTR DS:[EBX+ECX+0x1054]
		MOV XorCrypt,DL
		ADD EAX,0x1
		CMP EAX,ESI


		}


	}while(PacketLength < Count);

		
		


	char buffer[100];
	sprintf(buffer,"%d    %d",XorCrypt,PacketLength);
	MessageBox(0,buffer,0,0);

	return 1;
}
Lazeboy is offline  
Old 08/18/2010, 02:50   #17


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
da ich grad lust dazu habe und heute guter dinge bin:

Code:
CPU Disasm
Address   Hex dump          Command                                  Comments
006081B0  |> /8B4424 0C     MOV EAX,DWORD PTR SS:[ESP+0C]
006081B4  |. |53            PUSH EBX
006081B5  |. |55            PUSH EBP
006081B6  |. |66:8B6C24 18  MOV BP,WORD PTR SS:[ARG.4]
006081BB  |. |8BD9          MOV EBX,ECX
006081BD  |. |0FB748 06     MOVZX ECX,WORD PTR DS:[EAX+6]
006081C1  |. |56            PUSH ESI
006081C2  |. |57            PUSH EDI
006081C3  |. |0FBFF9        MOVSX EDI,CX
006081C6  |. |0FBFF5        MOVSX ESI,BP
006081C9  |. |8D4F 08       LEA ECX,[EDI+8]
006081CC  |. |3BCE          CMP ECX,ESI
006081CE  |. |74 3B         JE SHORT 0060820B
006081D0  |. |0FB770 04     MOVZX ESI,WORD PTR DS:[EAX+4]
006081D4  |. |68 A0CE6F00   PUSH OFFSET 006FCEA0                     ; UNICODE "ERROR CPacketCoder::Encrypt Source Packet Not Match Body Size
"
006081D9  |. |E8 F2AEFFFF   CALL 006030D0
006081DE  |. |50            PUSH EAX
006081DF  |. |E8 1CAFFFFF   CALL 00603100
006081E4  |. |83C4 08       ADD ESP,8
006081E7  |. |0FBFD6        MOVSX EDX,SI
006081EA  |. |57            PUSH EDI
006081EB  |. |52            PUSH EDX
006081EC  |. |68 70CE6F00   PUSH OFFSET 006FCE70                     ; UNICODE "Command:%d BodySize:%d
"
006081F1  |. |E8 DAAEFFFF   CALL 006030D0
006081F6  |. |50            PUSH EAX
006081F7  |. |E8 04AFFFFF   CALL 00603100
006081FC  |. |83C4 10       ADD ESP,10
006081FF  |. |5F            POP EDI
00608200  |. |5E            POP ESI
00608201  |. |5D            POP EBP
00608202  |. |B8 FEFFFFFF   MOV EAX,-2
00608207  |. |5B            POP EBX
00608208  |. |C2 1000       RETN 10
0060820B  |> |8B7C24 14     MOV EDI,DWORD PTR SS:[ARG.1]
0060820F  |. |56            PUSH ESI                                 ; /Arg3
00608210  |. |50            PUSH EAX                                 ; |Arg2
00608211  |. |57            PUSH EDI                                 ; |Arg1
00608212  |. |E8 29FE0700   CALL 00688040                            ; \FT_Client.00688040
00608217  |. |83C4 0C       ADD ESP,0C
0060821A  |. |33C0          XOR EAX,EAX
0060821C  |. |85F6          TEST ESI,ESI
0060821E  |. |7E 16         JLE SHORT 00608236
00608220  |> |8BC8          /MOV ECX,EAX
00608222  |. |83E1 03       |AND ECX,00000003
00608225  |. |8A9419 541000 |MOV DL,BYTE PTR DS:[EBX+ECX+1054]
0060822C  |. |301438        |XOR BYTE PTR DS:[EDI+EAX],DL
0060822F  |. |83C0 01       |ADD EAX,1
00608232  |. |3BC6          |CMP EAX,ESI
00608234  |.^|7C EA         \JL SHORT 00608220
00608236  |> |8B4424 18     MOV EAX,DWORD PTR SS:[ARG.2]
0060823A  |. |5F            POP EDI
0060823B  |. |5E            POP ESI
0060823C  |. |66:8928       MOV WORD PTR DS:[EAX],BP
0060823F  |. |5D            POP EBP
00608240  |. |B8 01000000   MOV EAX,1
00608245  |. |5B            POP EBX
00608246  |. |C2 1000       RETN 10
|
v

Code:
class CPacketCoder
{
	BYTE UNKNOWN[1053];
	BYTE Key[unknownSize];
};

struct UnknownStruct
{
	WORD BytesCrypted;
	BYTE UNKNOWN[4];
	WORD BodySize;
};

int CPacketCoder::Encrypt(BYTE *Data,UnknownStruct *UKS, DWORD UNKNOWN,WORD size)
{
	if(UKS->BodySize +8 == size)
	{
		for(int i = 0; i < size; i++)
		{
			int tmp = i&3;
			Data[i] ^= this->Key[tmp];
		}
		UKS->BytesCrypted = size;
		return 1;
	}
	//Fehlerbehandlungscode...
	return -2;
}
Hierzu muss ich aber sagen:

Ich bin mir nicht sicher, ob der 2. Parameter wirklich die Unknown Struct ist.
Das vermute ich, wegen dem Stackzugriff auf ESP+0C am Anfang, was ja eigentlich Parameter 2 sein müsste.
Mich wundert eben nur, dass Olly es nicht als diesen Anzeigt.
Evtl hast du nicht die ganze Funktion eingefügt?

Naja eigentlich auch wayne, so habe ich eben ein wenig geholfen, ohne es gleich zu copypasta zu machen.
Schon alleine, weil es so niemals gehen wird, dafür fehlt noch der Fehlerbehandlungscode und für die weitere Verarbeitung sicher noch mehr Member in den beiden Klassen/Structs.
Aber wie gesagt, es war ein kleiner Denkanstoß und hoffentlich ein Ansporn, endlich ASM zu lernen.

Für die Kritiker wie SmackJew:

Euch steht frei, den Code zu kritisieren und/oder fehlerhafte Übersetzungen zu korrigieren.
Das habe ich eben schnell aus Langeweile gemacht und der beste im ASM->C(++) Übersetzen bin ich nicht.
MrSm!th is offline  
Thanks
1 User
Old 08/18/2010, 11:47   #18
 
Lazeboy's Avatar
 
elite*gold: 0
Join Date: Jun 2008
Posts: 451
Received Thanks: 410
cool danke aber ne andere frage wird das überhaupt mit nem hook gemaht ?
also as decrypten

mal ganz im ernst ich glaube ich bin noch nicht weit genug um mit soetwas zu arbeiten das über fordert mich echt mal.

Code:
class CPacketCoder
{
	BYTE UNKNOWN[1053];
	BYTE Key[unknownSize];
};
was das ist versteh ich gar nicht



Code:
struct UnknownStruct
{
	WORD BytesCrypted;
	BYTE UNKNOWN[4];
	WORD BodySize;
};
ich weiss auch ehrlich gesagt kaum was das sein soll

Code:
int CPacketCoder::Encrypt(BYTE *Data,UnknownStruct *UKS, DWORD UNKNOWN,WORD size)
{
	if(UKS->BodySize +8 == size)
	{
		for(int i = 0; i < size; i++)
		{
			int tmp = i&3;
			Data[i] ^= this->Key[tmp];
		}
		UKS->BytesCrypted = size;
		return 1;
	}
	//Fehlerbehandlungscode...
	return -2;
}

wieso wird die size denn plus 8 genommen ich hab in olly schon gesehen das die size um 8 addiert wird jedoch wenn ich von der gehooken send funktion lengh übergebe brauch ich doch nicht mehr plus 8.

ich glaube
AND ECX,00000003

das ist das int tmp = i&3; ist ja logisch


und hier
Data[i] ^= this->Key[tmp];

hat data glaube ich die stelle im packet und wird gesxored aber das versteh ich auch noch nicht richtig.

MOV DL,BYTE PTR DS:[EBX+ECX+1054]
das ist das glaub ich


Das problem sind ja nicht die c++ bfehle die versteh ich ja aber ich habe vorher noch nie was mit packets gemacht und ich versteh einfach komplett nicht wie man packet in c++ macht deswegen verstehe ich kaum dein source.

Danke trotzdem
Lazeboy is offline  
Old 08/18/2010, 15:49   #19


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
[quote=Lazeboy;6451668]cool danke aber ne andere frage wird das überhaupt mit nem hook gemaht ?
also as decrypten
[/code]
ja, aber hookt man send! und im send decryptet man es, schreibts auf und sendet dann trotzdem die verschlüsselten bytes
Quote:

mal ganz im ernst ich glaube ich bin noch nicht weit genug um mit soetwas zu arbeiten das über fordert mich echt mal.
sag ich ja, das ist noch ein bisschen zu hoch wenn du kein asm kannst
Quote:
Code:
class CPacketCoder
{
	BYTE UNKNOWN[1053];
	BYTE Key[unknownSize];
};
was das ist versteh ich gar nicht
das ist eine klasse.
solltest du kennen. im verschlüsselungscode wird auf einen pointer zugegriffen und dann wird an stelle 1054 der key verwendet.
durch analyse kommt man darauf, dass es der this pointer ist (solltest du auch kennen).
also muss dieser key in der eigenen klasse sein. dass es ne member funktion ist, sieht man sowieso am anfang; das register ecx wird als parameter genutzt, was, so wie das hier abläuft, auf eine member funktion und nicht auf eine fastcall funktion hinweist.
und aufgrund des strings der in der fehlerbehandlung ist, habe ich mal den namen gewählt, der ist aber egal.
wichtig ist, dass an offset 1054 der key ist und die funktion ne memberfunktion.
den rest vor dem key kenne ich nicht, also unknown.
Quote:


Code:
struct UnknownStruct
{
	WORD BytesCrypted;
	BYTE UNKNOWN[4];
	WORD BodySize;
};
ich weiss auch ehrlich gesagt kaum was das sein soll
eben der zweite parameter.
an offset 0 wird am ende die größe geschrieben, die man angegeben hat.
ist wohl sowas wie der parameter LPDWORD BytesWritten bei WriteFile.
das passt allerdings nicht ganz, da nur die size reingeschrieben wird, egal wie viel nun eigentlich gecrypted wurde und im fehlerbehandlungscode sehe ich nix, was da dann ne 0 reinschreibt oder so.
aber um es genau zu identifizieren habe ich zu wenig material.
an offset 6 ist die größe des packet bodys. der packet header ist wohl 8 bytes groß.
also muss die bodysize + 8 genau so groß sein, wie die size, die man angegeben hat.
zwischen den beiden bekannten dingen liegen eben 4 unknown bytes
Quote:
Code:
int CPacketCoder::Encrypt(BYTE *Data,UnknownStruct *UKS, DWORD UNKNOWN,WORD size)
{
	if(UKS->BodySize +8 == size)
	{
		for(int i = 0; i < size; i++)
		{
			int tmp = i&3;
			Data[i] ^= this->Key[tmp];
		}
		UKS->BytesCrypted = size;
		return 1;
	}
	//Fehlerbehandlungscode...
	return -2;
}

wieso wird die size denn plus 8 genommen ich hab in olly schon gesehen das die size um 8 addiert wird jedoch wenn ich von der gehooken send funktion lengh übergebe brauch ich doch nicht mehr plus 8.
s.o.
Quote:
ich glaube
AND ECX,00000003

das ist das int tmp = i&3; ist ja logisch
fast, der befehl davor auch. das wäre nur das tmp &= 3; vorher wird ja noch i in tmp kopiert, was ich aber zu einem befehl gemacht habe.
Quote:
und hier
Data[i] ^= this->Key[tmp];

hat data glaube ich die stelle im packet und wird gesxored aber das versteh ich auch noch nicht richtig.

MOV DL,BYTE PTR DS:[EBX+ECX+1054]
das ist das glaub ich
[/code]
EBX ist der this pointer, ECX ist tmp und 1054 das offset vom key.
tmp wird als index für den key genutzt.
Quote:


Das problem sind ja nicht die c++ bfehle die versteh ich ja aber ich habe vorher noch nie was mit packets gemacht und ich versteh einfach komplett nicht wie man packet in c++ macht deswegen verstehe ich kaum dein source.

Danke trotzdem
das hat rein gar nichts damit zutun, dass du noch nie was mit packets gemacht hast.
packets sind nicht das einzige, was klassenanalyse voraussetzt.
das gehört generell zum reverse engineering und damit scheinst du nicht so vertraut zu sein.
also lern asm und mach am besten die tutorials von lena151 falls du sie noch nicht hast
MrSm!th is offline  
Old 08/18/2010, 23:08   #20
 
Lazeboy's Avatar
 
elite*gold: 0
Join Date: Jun 2008
Posts: 451
Received Thanks: 410
Hi Smith
also mit deinen 2 klassen/strukturen muss ihc mich noch näher veschäftigen


Code:
BYTE MyDecrypt(BYTE *Data,WORD size)
{
     int tmp;
     DWORD Pointer = EBX Register; 
     ofstream dec("Dec.txt");
     char buffer[100];

     for (int i = 0;i < size;i++)
     {
        tmp = i&3;
        Pointer += tmp;
		Pointer += 0x1054;
	        Pointer = *(DWORD*)Pointer;
        Data[i] ^= (BYTE)Pointer;

		dec << Data[i] << " ";
        return Data[i];
    }     
     
     return 1;
     
}

ich wollte mal fragen wie du das findest ich habe nur 2 probleme ich weiß nicht wie ich die data stelle berechnen / benutzen soll und das EBX register enthält eine value die ich zum berechnen des xor key brauche wie ich darauf komme weiß ich auch nicht sry wenn es dich langsm nervt
Lazeboy is offline  
Old 08/18/2010, 23:24   #21


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
1. du hast zu wenig parameter! es sind 4
2. du musst da nichts berechnen, die werden als parameter angegeben. EBX wird nicht benötigt, dafür ist ja die klasse, die du nicht angegeben hast

lern asm bevor du weiter machst
MrSm!th is offline  
Reply


Similar Threads Similar Threads
[How To]CShell.dll dumpen/decrypten
09/14/2010 - CrossFire - 9 Replies
Hi, nach meinem Tut wie man LT-Pointer findet noch wie man die gedumpte CShell.dll überhaupt bekommt. :D Einfache Version: Ladet euch die Dateien aus dem Anhang runterund verschiebt "DLLLoader.exe" in das Verzeichnis in dem CShell.dll liegt. Und "pedumper.dll" kommt ins OllyDbg-Verzeichniss. Dann startet ihr "DLLLoader.exe" (als Admin!) und wartet kurz bis es so aussieht: http://img836.imageshack.us/img836/3816/35932622. png Dann gebt ihr CShell.dll ein und drückt Enter. Nun öffnet ihr...
decrypten und encrypten
05/11/2009 - Kal Online - 0 Replies
ich brauche hilfe wie kan ich eine config.pk von einem server encrypten und wider decrypte ich hab in der sufu schon gegugt aber ich finde dort nix danke schonmal
R3volutioN entcrypten ??
10/08/2008 - Kal Online - 0 Replies
hi leute hab mich mal hier schon drunter und drüber gesucht nach ner möglichkeit von R3volutioN da ne skill liste zu bekommen das pk paswort hab ich schon selbst rausbekommen aber wie les ich die jobsystem-e so das ich value von gewissen skills bekomme hab schon einige programme ausgeteste aber es heist ja es wurde ne neue wariante rausgebracht die was einfacher wäre es zu verschlüsseln wäre net wen mir einer bischen helfen könnte danke schon mal jetzt
Wer ahnung hat vom decrypten
03/08/2005 - Off Topic - 6 Replies
....kthx ^^



All times are GMT +1. The time now is 19:33.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.