Thread Crypt::CBC .ods-Datei entschlüsseln (8 answers)
Opened by payx at 2022-02-12 20:47

payx
 2022-02-12 20:47
#194271 #194271
User since
2006-05-04
564 Artikel
BenutzerIn

user image
Hallo allerseits,

nach längerem bin ich mal wieder hier und freue mich, dass es das Forum noch gibt!

Ich versuche, eine mit Libre-/OpenOffice-Bordmitteln verschlüsselte Calc-Datei (.ods) zu entschlüsseln.

http://docs.oasis-open.org/office/v1.2/csprd03/Ope...

Ich habe eine Beispieldatei mit Passwort pwd123.

Die verschlüsselte Datei lässt sich wie gewohnt als .zip-Datei öffnen. Nicht die ganze Datei, sondern erst die Inhaltsdateien sind verschlüsselt. Mich interessiert nur content.xml.

In META-INF/manifest.xml sind diverse Informationen zur Verschlüsselung enthalten, die ich in meinem Skript zu verarbeiten versucht habe.

Code: (dl )
1
2
3
4
5
6
7
 <manifest:file-entry manifest:full-path="content.xml" manifest:media-type="text/xml" manifest:size="5451">
<manifest:encryption-data manifest:checksum-type="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0#sha256-1k" manifest:checksum="sf+SmkxOGrFYbK2wexrYQaML3M3JTKcQ/KsfS2eAmHQ=">
<manifest:algorithm manifest:algorithm-name="http://www.w3.org/2001/04/xmlenc#aes256-cbc" manifest:initialisation-vector="b6PjQ7EG+uWyhk/z29dJJQ=="/>
<manifest:start-key-generation manifest:start-key-generation-name="http://www.w3.org/2000/09/xmldsig#sha256" manifest:key-size="32"/>
<manifest:key-derivation manifest:key-derivation-name="PBKDF2" manifest:key-size="32" manifest:iteration-count="100000" manifest:salt="tHaDznWSd1OYCyWzFGx1YA=="/>
</manifest:encryption-data>
</manifest:file-entry>

Hier mein Skript:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/usr/bin/perl

use strict;
use warnings;

use File::Slurp;
use Crypt::CBC;
use MIME::Base64;

my $xml_encr = read_file('content.xml');

my $iv = "b6PjQ7EG+uWyhk/z29dJJQ==";
$iv = decode_base64($iv);

my $salt = "tHaDznWSd1OYCyWzFGx1YA==";
$salt = decode_base64($salt);
#$salt = substr($salt,0,8);

my $cipher = Crypt::CBC->new(
    -pass => 'pwd123'
    , -cipher => 'Cipher::AES'
    , -keysize => 32
    , -chain_mode => 'cbc'
    , -pbkdf => 'pbkdf2'
    , -iter => 100000
    #, -hasher => 
    #, -header => 'salt'
    , -header => 'none'
    , -iv => $iv
    , -salt => $salt
    #, -padding =>
);

my $xml_decr = $cipher->decrypt($xml_encr);
print $xml_decr;

Hier kommt die Fehlermeldung Argument to -salt must be exactly 8 bytes long at ... line 19.

Das ist blöd, denn lt. der oben zitierten Doku ist der Salt 16 Bytes lang.

Wenn ich in Zeile 17 den Salt auf acht Zeichen kürze, läuft das Programm durch, liefert aber natürlich keinen sinnvollen Output.

Wenn ich statt Zeile 27 Zeile 28 auskommentiere, kommt die Fehlermeldung Ciphertext does not begin with a valid header for 'salt' header mode at ... line 35. Das ist möglicherweise nur ein Folgefehler des ersten Fehlers.

Die META-INF/manifest.xml habe ich hier angehängt.

Die content.xml darf ich hier nicht hochladen, daher habe ich sie hier bereitgestellt:
https://magentacloud.de/s/PSpAFxtC9mSddjZ

Und hier liegt die ganze ods-Datei:
https://magentacloud.de/s/sYJa45tPrDwcTBB

Schon jetzt vielen Dank für sachdienliche Hinweise – übrigens gern auch auf mögliche ganz andere Vorgehensweisen.

Viele Grüße
payx
Anhänge
application/xml
manifest.xml

Last edited: 2022-02-12 22:42:44 +0100 (CET)

View full thread Crypt::CBC .ods-Datei entschlüsseln