Oder Verknüpfung Problem

03/25/2012 12:41 BrendonHomo#1
Hi leuts,

ich stehe vor einem Problem undzwar,
ich habe 2 Random (Unbekannte Bytes) bsp. 0x80 & 0x04 bei einer logischen Oder Verknüpfung ergibt das 0x84.
Nun weiß ich nicht wie ich aus der 0x84 wieder die 0x80 & 0x04 bekomme, hoffe mir mag wer helfen.
03/25/2012 13:40 SmackJew#2
Es ist eben kein logisches OR sondern ein bitweises OR. OR ist destruktiv und kann nicht umgedreht werden.
03/25/2012 13:51 BrendonHomo#3
Hm, blöd.
Brauche aber die Bytes um ein Packet zu entschlüsseln was so gebaut wird,
beispiel der string ist 13346.
1 in hex (0x31) wird mit 0x14 addiert und - 0x2 genommen,
der zweite buchstabe/zahl wird mit 0xD0 und - 0x4 genommen,
danach werden die 2 ergebnisse mit OR verknüpft.
Deswegen wollte ich die OR Operation rückgängig machen um den Packetstring wiederherzustellen.
Wie soll ich nun an die 2 Bytes kommen, hast du vll eine idee?
03/25/2012 14:06 SmackJew#4
Du weißt also wie die Encryption funktioniert, aber nicht wie die Decryption funktioniert? Klingt etwas unwahrscheinlich. Ich bezweifle sehr, dass das Paket so verschlüsselt wird, denn wie gesagt, OR bedeutet Datenverlust.
03/25/2012 14:09 BrendonHomo#5
Quote:
Originally Posted by SmackJew View Post
Du weißt also wie die Encryption funktioniert, aber nicht wie die Decryption funktioniert? Klingt etwas unwahrscheinlich. Ich bezweifle sehr, dass das Paket so verschlüsselt wird, denn wie gesagt, OR bedeutet Datenverlust.
Encrypten kann ich das Packet ohne Probleme,
aber decrypten wegen dem OR nicht, das ist ja das problem.

PS: Das ist das Packet was vom Clienten zum Server gesendet wird.
Bzw, möglich muss das ja irgendwie sein, der Server muss das Packet ja wieder entschlüsseln.
03/25/2012 14:14 SmackJew#6
Quote:
Originally Posted by BrendonHomo View Post
Bzw, möglich muss das ja irgendwie sein, der Server muss das Packet ja wieder entschlüsseln.
Richtig, und solange nicht extra Informationen mitgesendet werden ist das nicht möglich, Schlussfolgerung: a) Du bist nicht an der Encryption, b) Du verstehst die Encryption nicht oder c) der Server möchte überhaupt nicht den Originalstring wiederherstellen.

Wenn du dir so sicher bist es ist die Encryption schau dir die Decryption an.
03/25/2012 14:34 BrendonHomo#7
Hab was übersehen, konnte das problem nun lösen, dennoch danke für den versuch zu helfen :)

Hier kann nun zu.

Edit: Doch nicht zu, hab mich geeirrt ich poste einfach mal die routine, falls die euch so was bringt was ich eher bezweifel.


Wiegesagt Encrypten alles kein Problem,
decrypten aufgrund der OR operation schon und im Packet selbst ist sonst nichtsmehr angegeben.

Packet sieht so aus:
0x87 0x9D 0x59 0x91 0x40 0xFF

Währe als Plaintext so:

59168 0

0x87 ^ 0x80 = 7 länge des packets
0xFF kennzeichnet das Ende
und die 4 Bytes in der mitte sind immer das Ergebnis der OR operation.
03/25/2012 22:15 MrSm!th#8
Quote:
Originally Posted by SmackJew View Post
Du weißt also wie die Encryption funktioniert, aber nicht wie die Decryption funktioniert? Klingt etwas unwahrscheinlich. Ich bezweifle sehr, dass das Paket so verschlüsselt wird, denn wie gesagt, OR bedeutet Datenverlust.
Nicht zwingend, die Restruktion ist nur nicht so offensichtlich bzw. in komplizierteren Gleichungen verwendet geht es schon:

Code:
bool decryptX4(DWORD size, BYTE* data) 
{		
        DWORD i = 0;
	while ( i < size )
	{
		*data = ((signed int)*data >> 1) & 0x7F | (unsigned __int8)(((*data & 1) << 7) & 0x80);
		*data++ ^= Key[i++ % 40];
	}
	return true;
}

bool encryptX4(DWORD size, BYTE* data)
 {
	DWORD i = 0;
		
	while ( i < size )
	{
		*(BYTE *)data ^= Key[i % 40];
		*(BYTE *)data = (unsigned __int8)(2 * *(BYTE *)data & 0xFE) | ((*(BYTE *)data & 0x80) >> 7) & 1;
		++data;
		++i;
	}
	return true;
}
Fällt mir da spontan ein (ein alter Sourcecode zum Entschlüsseln der Resource Dateien von S4 von Asiro).
Leute, die sich solche Verfahren ausdenken, haben oftmals viel Ahnung von bitweisen Operationen und wissen, zu welcher Funktion welche die Gegenfunktion ist. Die Operation OR alleine mag destruktiv sein, mit den richtigen Operanden verwendet geht es aber, wie man sieht.
[/klugscheiß]
03/26/2012 12:38 BrendonHomo#9
Tatsache, hab durch probieren ne Formel rausgefunden die einwandfrei funktioniert, beim Byte einmal <<4 und >> 4 und dann das ergebnis *0x10 und das andere / 0x10 kriege dann die 2 Bytes raus ;p ( funktioniert einwandfrei )
Vielen dank für die hilfe :)