Beim Obfuscaten eines Scripts in autoit, werden die meisten funktionen, je nach einstellungen auf bestimmte art und weise verschlüsselt.
Dabei wird z.B. für den Befehl "Exit" der text per Execute und BinarytoString im Script Entschlüsselt.
Wenn man nun in einem Decompilierten Script, an einer bestimmten stelle platz macht, und diese verschlüsselten zeilen nach und nach einfügt, und execute mit clipput ersetzt, und dahinter ein exit setzt, wird nach ausführen des scripts die entsprechende zeile entschlüsselt, ins clipboard gesetzt, und das script beendet sich, und man kann weiter machen mit dem entschlüsseln.
Ich bin gerade dabei zu versuchen, das ganze zu automatisieren, und wollte fragen ob jemand mit genügend kenntnissen lust hätte mitzumachen.
Bevor jetzt das geflame anfängt, ich sei ein Leecher, und hätte es nötig fremde Programme zu entschlüsseln etc, solltet ihr ernsthaft über euch nachdenken.
Ich habe mal ein wenig rumprobiert und wenn man "Execute(" durch "clipput(Clipget()&@CRLF&" ersetzt und das Script anschließend ausführt, hat man schonmal einen aufgeräumteren SourceCode.
Jedoch sind die Variablen ja mit keinem Execute versehen und somit noch obfuscated.
Variablen, werden ja obfuscated, z.B. wir aus "_Hello()" "T_T0x34563734565".
VariablenNamen kann man sich einfach selbst aussuchen.
Man kann ja in der Funktion sehen was sie macht, und sich dann einfach eigene namen dafür aussuchen, und überall abändern.
Naja ich habe es mir so Vorgestellt.
1. Ein Entsprechendes Script wird geöffnet.
2. Es wird nach dem 2. Execute( im script, Freiraum von 5 Zeilen gesetzt.
3. In dieser Zeile wird jedes Execute Entschlüsselt, und in Clipput Gesetzt.
4. Die Entschlüsselten Strings, werden in einer TextDatei Zeile für Zeile eingefügt.
5. Beim OrginalScript, wird das erste Execute( gesucht, und aus der Textdatei der code ausgelesen, und dadurch ersetzt.
Du solltest zuerst einmal klären um welchen Obfuscator es geht, sonst wird sich wohl keiner so schnell melden.
Und danach solltest du dein Anliegen etwas konkreter fassen.
Willst du einen kompletten Deobfuscator oder willst du "nur" das Execute wieder "normal" machen?
Denn ein kompletter Deobfuscator würde auch noch Variablen umbenennen und auch konstante Variablen, deren Werte meist irgendwie verschlüsselt sind deobfuscaten usw.
Ich glaube, ich habe verstanden, was du genau möchtest.
Ich setze mich heute Abend mal ran.
Habe dafür schon eine Idee
Ich habe mich mal grob rangesetzt.
Von der Theorie her funktioniert es.
Der Code wird auf jeden Fall leichter lesbar, jedoch nicht ausführbar.
Ihr könnt gerne weiter daran arbeiten.
Auch finde ich die Variante mit Clipput nicht so schön, aber was solls
Code:
#include <file.au3>
Global $array[1]
_FileReadToArray("obfuscated.au3", $array)
For $i = 1 To $array[0]
If StringInStr($array[$i], "Execute") Then
$new = StringReplace($array[$i], 'Execute(', 'Clipput(') ;Execute mit Clipput für die entsprechende Zeile ersetzen
$var = 0
If StringInStr($new, "=Clipput") Then ;Schauen, ob vor dem Execute eine Deklaration einer Variable ist
$split = StringSplit($new, "=")
$dec = $split[1]
$var = 1
EndIf
Execute($new) ;Das modifizierte Execute ausführen
Sleep(300)
$get = ClipGet() ;Das sich nun im Zwischenspeicher befindende Codeschnipsel auslesen
If $var = 1 Then
FileWriteLine("New.txt", $dec & "=" & $get) ;Und entsprechend in eine neue Datei schreiben (Mit Deklaration)
Else
FileWriteLine("New.txt", $get) ;Ohne Deklaration aber mit Execute
EndIf
Else
FileWriteLine("New.txt", $array[$i]) ;Zeile, die kein Execute enthielt
EndIf
Next