[Tutorial] AutoIt Scripts Deobfuscaten

08/03/2012 00:44 Shadow992#16
Mein erster Post seit langem mal wieder und ich mach mich gleich unbeliebt bei der Moderation dieser Section, aber ich hoffe die (ehemaligen) Kollegen können drüber hinwegsehen. :)

@Tutorial
Was genau bringt das jetzt?
Ich stell mir gerade vor wie du das bei einem 500 Zeilen langen Skript machst, welches der Obfuscator wohl auf rund 2000-4000 erweitert. Willst du da wirklich alle Zeilen per Hand eingeben? Na dann wünsche ich dir dabei viel Spaß und vor allem viel Kaffee.

Und selbst wenn man die BinaryToStrings durch die richtigen Befehle ersetzt hat, bleiben immer noch die Variablen und wenn man rund 200 verschiedene Texte hat und die entsprechenden Variablen auch noch per Hand einfügen muss, wird wohl jeder die Maus gegen die Wand werfen und sich eine sinnvollere Beschäftigung suchen.
Vorausgesetzt das geschützte Skript ists nichts außergewöhnliches.

Das Tutorial erscheint mir also irgendwie sinnlos und hilft wirklich nur den Skript-Kiddies, die dann aber wiederum nichts mit dem entstandenen Code anfangen können, weil sie nicht einmal wussten wie man Deobfuscated.

Das ganze per Programm zu deobfuscaten fände ich hingegen interessanter und soweit ich weiß (ich war schon lange nicht mehr aktiv aber meine Google-Arbeit hat keine Ergebnisse gebracht), gibt es einen derartigen Deobfucator noch nicht.
12/24/2012 03:41 Crack-wtf#17
Quote:
Originally Posted by Shadow992 View Post
Mein erster Post seit langem mal wieder und ich mach mich gleich unbeliebt bei der Moderation dieser Section, aber ich hoffe die (ehemaligen) Kollegen können drüber hinwegsehen. :)

@Tutorial
Was genau bringt das jetzt?
Ich stell mir gerade vor wie du das bei einem 500 Zeilen langen Skript machst, welches der Obfuscator wohl auf rund 2000-4000 erweitert. Willst du da wirklich alle Zeilen per Hand eingeben? Na dann wünsche ich dir dabei viel Spaß und vor allem viel Kaffee.

Und selbst wenn man die BinaryToStrings durch die richtigen Befehle ersetzt hat, bleiben immer noch die Variablen und wenn man rund 200 verschiedene Texte hat und die entsprechenden Variablen auch noch per Hand einfügen muss, wird wohl jeder die Maus gegen die Wand werfen und sich eine sinnvollere Beschäftigung suchen.
Vorausgesetzt das geschützte Skript ists nichts außergewöhnliches.

Das Tutorial erscheint mir also irgendwie sinnlos und hilft wirklich nur den Skript-Kiddies, die dann aber wiederum nichts mit dem entstandenen Code anfangen können, weil sie nicht einmal wussten wie man Deobfuscated.

Das ganze per Programm zu deobfuscaten fände ich hingegen interessanter und soweit ich weiß (ich war schon lange nicht mehr aktiv aber meine Google-Arbeit hat keine Ergebnisse gebracht), gibt es einen derartigen Deobfucator noch nicht.
Sorry für den Push ^^

Habe diese Deobfuscation's Methode schon seit langem gepostet, ist also nichts neues, und jedem erfahrenem User bekannt.

Meiner Meinung nach wirklich nur ein Schrei nach beachtung.

PHP Code:
#include <File.au3>

$CurrentClip ClipGet()
$Final ""
$file FileOpenDialog("Select an Autoit Script", @ScriptDir """Autoit Script (*.au3)"4)
$ofile FileOpen($file0)

For 
$i 1 to _FileCountLines($file)+1
    ToolTip
($i,0,0)
    If 
StringInStr(FileReadLine($ofile,$i), "Execute(BinaryToString("Then
        Execute
(StringReplace (FileReadLine($ofile,$i), "Execute(BinaryToString(""Clipput(BinaryToString("1))
        
        If 
StringLeft(ClipGet(),2) = "0x" Then
            $Final 
&= BinaryToString(ClipGet()) & @CRLF
        
Else
            
$Final &= ClipGet() & @CRLF
        
EndIf
    Else
        
$Final &= FileReadLine($ofile,$i) & @CRLF
    
EndIf
Next
ClipPut
($CurrentClip)
FileWrite("test.au3",$Final
In 5 Minuten geschrieben.
Sollte funktionieren.
12/24/2012 13:41 DasRequi#18
Ich weiß nicht, ob es geht, aber ich empfehle lieber dieses Script:
Code:
#include <File.au3>

$CurrentClip = ClipGet()
$Final = ""
$file = FileOpenDialog("Select an Autoit Script", @ScriptDir & "", "Autoit Script (*.au3)", 1 + 4)
$ofile = FileOpen($file, 0)

For $i = 1 to _FileCountLines($file)+1
    ToolTip($i,0,0)
    If StringInStr(FileReadLine($ofile,$i), "Execute(BinaryToString(") Then
        Execute(StringReplace (FileReadLine($ofile,$i), "Execute(BinaryToString(", "Clipput(BinaryToString(", 1))

        If StringLeft(ClipGet(),2) = "0x" Then
            $Final &= BinaryToString(ClipGet()) & @CRLF
        Else
            $Final &= ClipGet() & @CRLF
        EndIf
    Else
        $Final &= FileReadLine($ofile,$i) & @CRLF
    EndIf
Next
ClipPut($CurrentClip)
FileWrite(StringReplace($file, ".au3", "_deobfuscated.au3"), $Final)
Da es den alten Dateinamen behält, mit einem "_deobfuscated" dahinter xD
12/24/2012 15:49 Shadow992#19
Quote:
Originally Posted by Crack-wtf View Post
Sorry für den Push ^^

Habe diese Deobfuscation's Methode schon seit langem gepostet, ist also nichts neues, und jedem erfahrenem User bekannt.

Meiner Meinung nach wirklich nur ein Schrei nach beachtung.

PHP Code:
#include <File.au3>

$CurrentClip ClipGet()
$Final ""
$file FileOpenDialog("Select an Autoit Script", @ScriptDir """Autoit Script (*.au3)"4)
$ofile FileOpen($file0)

For 
$i 1 to _FileCountLines($file)+1
    ToolTip
($i,0,0)
    If 
StringInStr(FileReadLine($ofile,$i), "Execute(BinaryToString("Then
        Execute
(StringReplace (FileReadLine($ofile,$i), "Execute(BinaryToString(""Clipput(BinaryToString("1))
        
        If 
StringLeft(ClipGet(),2) = "0x" Then
            $Final 
&= BinaryToString(ClipGet()) & @CRLF
        
Else
            
$Final &= ClipGet() & @CRLF
        
EndIf
    Else
        
$Final &= FileReadLine($ofile,$i) & @CRLF
    
EndIf
Next
ClipPut
($CurrentClip)
FileWrite("test.au3",$Final
In 5 Minuten geschrieben.
Sollte funktionieren.
Quote:
Originally Posted by DasRequi View Post
Ich weiß nicht, ob es geht, aber ich empfehle lieber dieses Script:
Code:
#include <File.au3>

$CurrentClip = ClipGet()
$Final = ""
$file = FileOpenDialog("Select an Autoit Script", @ScriptDir & "", "Autoit Script (*.au3)", 1 + 4)
$ofile = FileOpen($file, 0)

For $i = 1 to _FileCountLines($file)+1
    ToolTip($i,0,0)
    If StringInStr(FileReadLine($ofile,$i), "Execute(BinaryToString(") Then
        Execute(StringReplace (FileReadLine($ofile,$i), "Execute(BinaryToString(", "Clipput(BinaryToString(", 1))

        If StringLeft(ClipGet(),2) = "0x" Then
            $Final &= BinaryToString(ClipGet()) & @CRLF
        Else
            $Final &= ClipGet() & @CRLF
        EndIf
    Else
        $Final &= FileReadLine($ofile,$i) & @CRLF
    EndIf
Next
ClipPut($CurrentClip)
FileWrite(StringReplace($file, ".au3", "_deobfuscated.au3"), $Final)
Da es den alten Dateinamen behält, mit einem "_deobfuscated" dahinter xD
Das funktioniert aber bei der C++ Version vom Obfuscator nicht (mehr). ;)

Edit:
Und ob das bei der AutoIt-Version funktioniert frag ich mich auch.

Edit2:
Etwas derartiges dürfte noch nie bei meinen Obfuscatoren funktioniert haben, denn beide Versionen von meinen Obfuscatoren setzen auf selbsterstellte Funktionen, um eben ein derartiges deobfuscaten von Außen zu verhindern. Man müsste schon das ursprüngliche Skript ausführen und dort dann Zeile für Zeile kopieren, aber auf diese Art und Weise von Außen sollte das nicht möglich sein.
Ihr dürft mich aber gerne vom Gegenteil überzeugen.
12/26/2012 21:37 Crack-wtf#20
Naja manuell ist dein C++ Deobfuscator auch kein Problem.
Bei kleinen sources schreibt er den Source direkt nur mit Execute rein, und bei größeren in ein Array.

Aber Automatisch fällt mir auf anhieb keine möglichkeit ein :Q
12/26/2012 22:17 Shadow992#21
Quote:
Originally Posted by Crack-wtf View Post
Naja manuell ist dein C++ Deobfuscator auch kein Problem.
Bei kleinen sources schreibt er den Source direkt nur mit Execute rein, und bei größeren in ein Array.

Aber Automatisch fällt mir auf anhieb keine möglichkeit ein :Q
Wobei es selbst manuell ein paar Problemchen beim C++ Obfuscator gibt. ;)
12/27/2012 06:55 Crack-wtf#22
Meinst du die ganzen Random Funktionen?
Nah wenn man weiß was das Script machen soll kann man sich da vorran tasten.
Außerdem werden deine Fake Funktionen nich gecallt also kann man das gleich erkennen.
12/29/2012 16:44 *-Elsword_Hacker-*#23
Ich würde sagen 90% aller user hier kapieren nicht mal den Anfang mich eingeschlossen mach ein ordendliches video tut oder beschreibe jeden kleinen Teil den man machen muss!

#vote 4 close!
12/29/2012 17:17 -STORM-#24
Du willst, dass ein Thread geschlossen wird, weil du ihn nicht verstehst?
Das ist halt kein Anfänger Tutorial.
Wer es nicht versteht, kann nachher mit dem deobfuscateten Source auch recht wenig anfangen, da ändert ein Videotutorial nichts dran.
12/29/2012 21:17 Shadow992#25
Quote:
Originally Posted by Crack-wtf View Post
Meinst du die ganzen Random Funktionen?
Nah wenn man weiß was das Script machen soll kann man sich da vorran tasten.
Außerdem werden deine Fake Funktionen nich gecallt also kann man das gleich erkennen.
Das mein ich gar nicht.
Sondern eher die Funktionen, die auf Grund von dem Execute nicht ausgeführt werden, wenn sie aber ohne Execute im Skript stehen problemlos ausgeführt werden.

Wenn man weiß wie sind diese natürlich sehr leicht zu enttarnen.
Aber bitte vergesst nicht die Tatsache, dass ein derartiges Tutorial für Anfänger gedacht sein muss.
Von daher denke ich, ist das ganze Anfängern gegenüber relativ sicher. :D