Entschlüsseln, wie?

hi,
hatte mich im Board eingelesen und erhoffte das ich eine Antwort finden könnte.. wie es aussieht habe ich keine gefunden ;). Umso mehr hoffe ich das ihr mir helfen könnt.

Es geht sich um Folgendes:

1. Vor ungefähr 14 Tagen hat sich eine Verschlüsselung einer Datei geändert, die bis dato so aussah (Ausschnitt eines Teils aus der Verschlüsselten Datei ):

Code:
  D0   C6   CD   DD    80  C6   DD   D6

function die das entschlüsselt

Code:
        // Hex-Werte   D0   C6   CD   DD    80  C6   DD   D6
	int Dezi[8] = {208, 198, 205, 221, 128, 198, 221, 214};	
	char Buchstabe;
	int p = 0xAA;

	for(int i = 0; i < 8; i++) {
		Buchstabe = char(Dezi[i] ^ (p & 0xFF));
		p += 1;
		
		cout << Buchstabe;
	}
	
	// Ausgabe zmap.img entschlüsselt

betrachten wir die Hex-Werte
alt: D0 C6 CD DD 80 C6 DD D6
neu: 46 68 F2 79 C8 3C 00 46

Schlage mich jetzt seit 3 Tagen mit dem mist rum, komme einfach nicht weiter.

Frage an euch:
1. da die Datei (regulär) während des ausführens die Daten entpackt, muss es doch in der exe eine bestimmte stellen geben die diese Daten entpackt.. sprich mit Assemble könnte man diese stelle finden?

2. wie hätte man sonst die Konstante 0xFF bekommen.

3. gibt es Programme die so was entschlüsseln könnten?


danke im voraus
 
Ist der Klartext der Datei gleich geblieben oder hat sich der auch verändert(kann man das vielleicht im Programm sehen)?
Wenn er gleich geblieben ist, kannst du versuchen deinen Algorithmus rückwärts anwenden, um zu sehen, ob sich vielleicht nur p geändert hat. Allerdings könnte es auch sein, dass der Algorithmus komplett verändert wurde.

Frage an euch:
1. da die Datei (regulär) während des ausführens die Daten entpackt, muss es doch in der exe eine bestimmte stellen geben die diese Daten entpackt.. sprich mit Assemble könnte man diese stelle finden?

Ja, das wäre die sicherste Methode. Ich empfehle dafür IDA(es gibt eine Freeware-Version) oder OllyDbg.

3. gibt es Programme die so was entschlüsseln könnten?

Völlig automatisiert ohne Informationen über den Algorithmus und die Daten ist sowas nicht möglich(OTP).
 
3 Sachen hierzu:

1.
Ja es ist mit Sicherheit möglich auf 0xFF zu schließen wenn ich mich beim Disasseblieren bemühe.

2.
Code:
 Buchstabe = char(Dezi[i] ^ (p & 0xFF));
muss das nicht so aussehen?
Code:
 Buchstabe += char(Dezi[i] ^ (p & 0xFF));
oder so:
Code:
 Buchstabe = Buchstabe + char(Dezi[i] ^ (p & 0xFF));
3. Was zum Teufel soll denn eine AND-Verknüpfung mit 0xFF bringen?

0xAA & 0xFF = 0xAA

11111111
10101010
&_______
10101010
 
Original von Easyrider
3. Was zum Teufel soll denn eine AND-Verknüpfung mit 0xFF bringen?

0xAA & 0xFF = 0xAA

11111111
10101010
&_______
10101010

Manche C-Compiler machen sonst Ärger, wegen der impliziten Konvertierung von char nach int: Wenn der char nicht unsigned ist und das erste Bit gesetzt ist, kann es passieren, dass dies als Vorzeichen gesehen wird und dann auf das int übertragen wird. Versuch in Assembly einfach mal movsx eax,al mit al=0xff auszuführen, das Ergebnis ist dann nämlich nicht eax=0x000000ff.
Als Umweg kann man entweder &0xff schreiben oder den char als unsigned deklarieren(dann müsste eigentlich movzx verwendet werden).
 
Zurück
Oben