Seite 1 von 1

Codeschnippsel mit Regex

Verfasst: Montag 5. Mai 2008, 01:06
von Basher
Hi erstmal an alle angehörigen des Boards ;-)

ich kenn mich leider mit Python nicht aus, würde aber gerne wissen was ein skript macht was ich gefunden habe. Habe bisher alles verstanden bis auf diesen Teil:

Code: Alles auswählen

pattern = re.compile('\\x00(.*)')
data = pattern.sub('','%s' %data)
data = unhexlify(''.join(data.split()))
data = data.splitlines()
links = []

for link in data:
    link = b64decode('%s' %link)
    link = aes_obj.decrypt('%s' %link)
    links.append(link.replace('Entschlüsselt: ',''))
data ist einfach nur ne textdatei die eingelesen wird

würde mich total freuen wenn ihr mir das erklären würdet

danke schonmal

Verfasst: Montag 5. Mai 2008, 07:08
von audax
Ich mag ja auch Formatstrings....aber das ist übertrieben:

Code: Alles auswählen

'%s' %link
/o\

Verfasst: Montag 5. Mai 2008, 07:20
von BlackJack
Einfach nur eine Textdatei ist es wohl eher nicht, weil dieser Quelltext davon ausgeht, dass Nullbytes darin vorkommen können. Das ist eher ungewöhnlich für Textdateien.

Der Reguläre Ausdruck passt auf ein Nullbyte gefolgt von irgend welchen Bytes bis zu einem Zeilenende, und der Code entfernt alle diese Treffer aus `data`.

Der Rest enthält anscheinend Bytes die als Text in einer Hexadezimalrepräsentation kodiert sind, die durch Leerzeichen bzw. "whitespace" getrennt sind. Diese Daten werden mit `unhexlify()` dekodiert. Danach scheint man Base64 kodierte Daten zu haben. Die vorher mit AES verschlüsselt wurden.

An der Stelle würde ich mich fragen was dieser ganze Blödsinn soll. AES ist eine gute Verschlüsselung und diese ganze Kodiererei sieht nach "Snake Oil" aus…

Verfasst: Montag 5. Mai 2008, 13:19
von Basher
ja natürlich ist es snake oil ;-)

ok also ist es ne textdatei aber in dieser sind die daten als Hex abgespeichert (voll bescheuert)
bsp.:696D6C5666374861

was macht er denn dann mit den nullbytes ?
entfernt er diese oder trennt er von nullbyte bis zu nullbyte den inhalt um es dann einzeln zu dechiffrieren?

und wofür steht denn das %s und das %data?

uff sind bissel viele fragen, hoffe ihr könnt mir dabei aber helfen :-)

Verfasst: Montag 5. Mai 2008, 13:53
von BlackJack
Von einem Nullbyte wird alles bis zu einem Zeilenende ─oder dem Ende der Daten, was auch immer früher kommt─ inklusive dem Nullbyte entfernt.

Das '%s' in einer Zeichenkette ist in Verbindung mit dem ``%``-Operator auf Zeichenketten eine Formatierungsanweisung, die das entsprechende Objekt in eine Zeichenkette umwandelt. Wie audax schon schrieb, ist das hier übertrieben bzw. umständlich, denn um ein Objekt einfach nur in eine Zeichenkette um zu wandeln würde man statt ``'%s' % obj`` eher das etwas offensichtlichere ``str(obj)`` schreiben.

Man sieht an dem Quelltextschnippsel nicht, was `data` am Anfang für einen Typ hat, also kann man nur für das erste Umwandeln in eine Zeichenkette nichts sagen, aber alle folgenden sind überflüssig. Wenn `data` von Anfang an eine Zeichenkette war, sind die alle überflüssig.

Verfasst: Montag 5. Mai 2008, 15:36
von Basher
mh ok, dankeschön :D
so langsam verstehe ich was der code macht ^^

die einzige frage die sich mir stellt ist, das ich nicht weiss nach welchen parametern er den text splittet und in das Array packt. Also von wo bis wohin spaltet er den string un packt es in einen array
oder hab ich das falsch verstanden ?

Verfasst: Montag 5. Mai 2008, 21:36
von BlackJack
Ich weiss nicht ob ich die Frage richtig verstehe. Was die `split()`-Methode von Zeichenketten macht, steht in der Dokumentation.

Verfasst: Dienstag 6. Mai 2008, 00:22
von Basher
ja ich schrieb bissel verwirrend, hab aber jetzt herausgefunden was ich wissen wollte

nochmals ein großes dankeschön für die hilfe :D