Brauche Hilfe^^

09/24/2010 17:23 b0147#1
Halli hallo liebe E*pvp community,

ich habe mal zum Zeitvertreib ein kleines Projekt gestartet um ein wenig mehr Übung in Java zu bekommen. Um weiter machen zu können, muss ich die folgenden Zeilen in Java übersetzt kriegen.


Decrypt.cpp
Code:
#include "Decrypt.h"

unsigned char DecryptTable[] = {
	0xD9, 0x79, 0xB0, 0x75, 0xBE, 0x4D, 0x99, 0xBD,
	0x66, 0x9A, 0x21, 0x16, 0xCC, 0x58, 0x5D, 0x43,
	0xE2, 0x7D, 0xF7, 0x95, 0xC8, 0x7C, 0x2A, 0xB1,
	0x9D, 0xC6, 0x2F, 0x35, 0x91, 0xF8, 0x9E, 0x4B,
	0xD8, 0x69, 0x59, 0xA3, 0x24, 0x78, 0x27, 0x88, 
	0xB8, [.... usw....]

};

long decrypt(unsigned long index, unsigned char *buf, unsigned long len)
{
	if(!buf || !len)
		return -1;

	index &= 0x3F;
	index <<= 8;

	while (len--)
		buf[len] = DecryptTable[index + buf[len]];

	return 0;
}

Eine Methode aus dem Hauptteil:

Code:
void CClient::WorkOnPacket(char* data,int size)
{
#ifdef STUPID_KEY_SEARCHER
	char _tdata[1024];
	for (int i = 0;i<63;i++)
	{
		memcpy(_tdata,data,1024);
		decrypt(i,(unsigned char*)_tdata,size);
		if (_tdata[1]=='t')
		{
			//0 1 2 => type , 3 => t für "test"
			printf("Found 't'... with key %d /ke sent by server: %d\n",i,DecKey);
			OutputMemoryDump(_tdata,size);
			//break;
		}
	}
#endif

	decrypt(DecKey,(unsigned char*)data,size);
	//increase key
	DecKey=(DecKey+1)%64; 
	
	data[size]=0; //<- anit "s" overflow.. ;)

	if (PacketList[(unsigned char)(data[0])]==0) 
	{
		#ifdef _DEBUG
			printf("UNKNOW PACKET ! KEY=%d\n",DecKey);
			
			OutputMemoryDump(data,size);
			printf("\n");
		#endif
	}
}
Wie oben schon erwähnt möchte ich das Decrypten gerne in java übersetzen, nur leider habe ich keine Ahnung was genau zum entschlüsseln passiert.
Ich würde mich über hilfe in jeglicher form freuen.

mfg

b0147

PS: Credits an Bloodx und ZeroTen, weil das ein teil von ihrem veröffentlichten Werk ist
09/24/2010 18:21 ms​#2
Zuerst wird der Decryption-Key durch 64 geteilt und der Rest davon genommen. Der Rest wird dann wiederrum mit 256 multipliziert.
Dann wird jeweils für jedes Byte im Packet dieser Wert dazuaddiert und durch das Byte an der Stelle im DecryptTable-Array ersetzt.
09/24/2010 18:25 b0147#3
vielen dank für die schnelle und ausführliche antwort <3

mfg
09/24/2010 18:28 ms​#4
Kann nur noch hinzufügen, dass nach jedem Packet der Schlüssel um 1 erhöht wird.