Codeschnippsel mit Regex

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Basher
User
Beiträge: 4
Registriert: Montag 5. Mai 2008, 01:00

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
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Ich mag ja auch Formatstrings....aber das ist übertrieben:

Code: Alles auswählen

'%s' %link
/o\
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…
Basher
User
Beiträge: 4
Registriert: Montag 5. Mai 2008, 01:00

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 :-)
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.
Basher
User
Beiträge: 4
Registriert: Montag 5. Mai 2008, 01:00

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 ?
BlackJack

Ich weiss nicht ob ich die Frage richtig verstehe. Was die `split()`-Methode von Zeichenketten macht, steht in der Dokumentation.
Basher
User
Beiträge: 4
Registriert: Montag 5. Mai 2008, 01:00

ja ich schrieb bissel verwirrend, hab aber jetzt herausgefunden was ich wissen wollte

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