
IDA-Python-Skripte, um Strings aus KPOT zu entschlüsseln und diese als Kommentare zu setzen.
IDA-Python-Skripte zum Entschlüsseln der Strings des KPOT-Stealers und zum Setzen dieser als Kommentare neben die Variable, die sie zur Laufzeit empfangen würde. Es funktioniert wie folgt:
Ruft den Offset ab, der über eax an eine der beiden Entschlüsselungsfunktionen übergeben wird (es gibt zwei, weshalb dieses Repository zwei Skripte enthält), entweder mithilfe von mov oder pop eax.
Entschlüsselt den String in einem Array, indem es die zugehörige Größe und den XOR-Schlüssel ausliest.
Gibt den entschlüsselten String und den Offset, an dem er als Kommentar gesetzt wurde, sowie alle Strings aus, die nicht entschlüsselt werden konnten (siehe Wichtige Hinweise unten).
Es gibt einige Stellen im Code, an denen die Malware eine andere Methode verwendet als die, die in den Skripten berücksichtigt werden. Sie finden diese Fälle, indem Sie den Adressen mit der Meldung Could not decrypt xref: folgen und diese entschlüsseln, indem Sie den Offset manuell an die relevanten Funktionen übergeben.
Das Skript konvertiert das entschlüsselte Array mithilfe von decode() in einen String. Meiner Erfahrung nach gibt es drei Byte-Arrays, die von KPOT entschlüsselt werden und keine Strings sind, was zum Absturz des Skripts führt. Dies sind die Offsets, die in kpot-string-decrypter-pt1.py ignoriert werden.
Die zugehörigen Offsets können sich zwischen Samples ändern (ich habe das nicht überprüft). Wenn das passiert, kann das Hinzufügen einer Zeile zu search_offset(), die die aktuelle Adresse ausgibt, helfen herauszufinden, wo das Skript abstürzt.
Um diese Strings manuell zu entschlüsseln, müssen Sie lediglich den Rückgabewert von decrypt_str() in return(newarray.hex()) ändern.
Um zu wissen, welches der beiden Skripte verwendet werden soll, prüfen Sie die Entschlüsselungsroutine - pt1 ist für die Subroutine gedacht, die nur ein Byte-XOR durchführt, während pt2 für diejenige gedacht ist, die nach dem XOR AND 0xFF durchführt.