|
You last visited: Today at 12:13
Advertisement
Oder Verknüpfung Problem
Discussion on Oder Verknüpfung Problem within the C/C++ forum part of the Coders Den category.
03/25/2012, 12:41
|
#1
|
elite*gold: 0
Join Date: Apr 2009
Posts: 177
Received Thanks: 42
|
Oder Verknüpfung Problem
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
|
#2
|
elite*gold: 0
Join Date: Jul 2010
Posts: 388
Received Thanks: 196
|
Es ist eben kein logisches OR sondern ein bitweises OR. OR ist destruktiv und kann nicht umgedreht werden.
|
|
|
03/25/2012, 13:51
|
#3
|
elite*gold: 0
Join Date: Apr 2009
Posts: 177
Received Thanks: 42
|
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
|
#4
|
elite*gold: 0
Join Date: Jul 2010
Posts: 388
Received Thanks: 196
|
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
|
#5
|
elite*gold: 0
Join Date: Apr 2009
Posts: 177
Received Thanks: 42
|
Quote:
Originally Posted by SmackJew
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
|
#6
|
elite*gold: 0
Join Date: Jul 2010
Posts: 388
Received Thanks: 196
|
Quote:
Originally Posted by BrendonHomo
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
|
#7
|
elite*gold: 0
Join Date: Apr 2009
Posts: 177
Received Thanks: 42
|
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.
Code:
JLE 004AC7FC
MOV ESI,DWORD PTR SS:[LOCAL.5] ; Plain Packetstring kopiert nach ESI
CMP ESI,7E
JLE SHORT 004AC753
MOV ESI,7E
MOV EAX,DWORD PTR SS:[LOCAL.1]
CALL 004051A8 ; Sorgt für Speicher
MOV EDX,ESI ; Length bevor leerzeichen bei string wird nach EDX kopiert string bsp = test123 test1 test2 | test123 = Length 7
OR DL,80 ; OR Operation mit DL | 0x80 Ergebnis = 87 first byte beim Crypted Packet
MOV BYTE PTR DS:[EDI+EAX-1],DL ;
INC EDI
TEST ESI,ESI
JLE SHORT 004AC7E7
MOV EAX,DWORD PTR SS:[LOCAL.2] ; Pointer der aufs Plain Packetstring zeigt wird nach Eax kopiert
MOV EDX,DWORD PTR SS:[LOCAL.7] ; EDX = 0
MOV BL,BYTE PTR DS:[EDX+EAX] ; Packetbyte wird nach BL kopiert bei test123 (t)
INC DWORD PTR SS:[LOCAL.7]
MOV EAX,EBX ; AL hat nun den Wert von BL
ADD AL,0D0 ; AL += 0xD0
SUB AL,0A ; AL -= 0x0A
JNB SHORT 004AC785
ADD BL,4 ; BL += 0x4;
SUB BL,30 ; BL -= 0x30
JMP SHORT 004AC7AB
CMP BL,20 ; Switch Case
JNE SHORT 004AC78E
MOV BL,1
JMP SHORT 004AC7AB
CMP BL,2D
JNE SHORT 004AC797
MOV BL,2
JMP SHORT 004AC7AB
CMP BL,2E
JNE SHORT 004AC7A0
MOV BL,3
JMP SHORT 004AC7AB
CMP BL,0FF
JNE SHORT 004AC7A9
MOV BL,0E
JMP SHORT 004AC7AB
XOR EBX,EBX
CMP BYTE PTR SS:[LOCAL.6+3],0
JE SHORT 004AC7C6
MOV EAX,DWORD PTR SS:[LOCAL.1]
CALL 004051A8 ; String operation unwichtig
SHL EBX,4 ; Linksverschiebung BL 0x4
MOV BYTE PTR DS:[EDI+EAX-1],BL ; BL wert gesichert
MOV BYTE PTR SS:[LOCAL.6+3],0
JMP SHORT 004AC7E2
MOV EAX,DWORD PTR SS:[LOCAL.1]
CALL 004051A8 ; String operation unwichtig
MOV EDX,DWORD PTR SS:[LOCAL.1]
MOV EDX,DWORD PTR DS:[EDX]
MOV DL,BYTE PTR DS:[EDI+EDX-1] ; DL bekommt den gesicherten Wert
OR DL,BL ; DL wert mit aktuellen BL wert OR operation
MOV BYTE PTR DS:[EDI+EAX-1],DL ; DL zum Packet kopiert
INC EDI
MOV BYTE PTR SS:[LOCAL.6+3],1
DEC ESI
TEST ESI,ESI
JG SHORT 004AC769
CMP BYTE PTR SS:[LOCAL.6+3],0
JNE SHORT 004AC7EE
INC EDI
SUB DWORD PTR SS:[LOCAL.5],7E
JG 004AC746
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
|
#8
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
|
Quote:
Originally Posted by SmackJew
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
|
#9
|
elite*gold: 0
Join Date: Apr 2009
Posts: 177
Received Thanks: 42
|
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
|
|
|
Similar Threads
|
[PROBLEM] WIN7 ERKENNT ALLES ALS VERKNÜPFUNG
11/05/2011 - Main - 4 Replies
Hi,
ich habe ein großes problem mit meinen pc , er erkennt alle USB/Externe Festplatten und SD Karten nicht so wirklich .
Ich hab paar Pics gemacht da ich das nicht erklären kann was der pc hat .
Pics. :
Directupload.net - Dwdslogw6.png
|
All times are GMT +2. The time now is 12:13.
|
|