Ich habe Themida noch nie zum Laufen gebracht, ich kenne nur viele Leute, die auf diesen Protector schwören.Quote:
Hallo!
Nun hab ich bereits zig Seiten durch bezügl. Scriptschutz und bin auf folgende Dinge gestoßen -> Shadows Obfuscator aus diesem Thread hier (Für die Lesbarkeit) + Safe (in Verbindung mit sample Scripten) sowie Themida.
Letzteres, also Themida kannte ich schon von einem Kollegen. Er entwickelt hier und da mal eine kleine Software und hat dafür sogar eine originale Lizenz.
Daraufhin hab ich ihn mal gefragt ob er mir Testweise ein Script protecten kann, was er getan hat. Es war nach diesem Vorgang fast doppelt so groß.
Leider lies sich es mit jedem simplen Decompiler wieder genauso herstellen, wie vor dem Vorgang.
Ich ging davon aus, das Themida zumindest diesen einfachen Schritt irgendwie protecten kann.
Meine Frage nun: Mach ich bei Themida grundsätzlich was falsch oder ist es einfach nicht möglich, das Script zu "verstecken" für den simplesten Decompiler?
Normalerweise sollte das nicht möglich sein.Quote:
Hi Shadow,
Enigma Virtual Box hat ich mal probiert - jedoch kam auch da der Compiler auf direktem Wege zum Source (wie bei Themida). Gibts da spezielle Einstellungen? Tipps dazu nehm ich auch gern per PN :)
Ist es eig. möglich auch einzelne UDFs mit dem Obfuscator zu bearbeiten? Da beim compilen ja die obfuscator_file vorausgesetzt wird.
Quote:
Ist es eig. möglich auch einzelne UDFs mit dem Obfuscator zu bearbeiten?
Quote:
Theoretisch ist es möglich, praktisch wird es aber an dem Umbenennen der Funktionen und der Variablen scheitern.
Alles was über das Umbenennen von Variablen&Funktionen hinausgeht, kann einige Funktionen unbrauchbar machen oder das Script sogar ganz zerstören. Zudem wird alles langsamer. Mein 1,4k Zeilen großes Script funktioniert zum Beispiel nicht mehr, wenn es mit Shadow's Obfuscator obfuscated wurde.Quote:
1. Obfuscator
2. Safe.exe
3. Enigma Virtual Box
Func _MSToTime($iTicks)
Local $iDays, $iHours, $iMins, $iSecs = Int($iTicks / 1000)
$iDays = Int($iSecs / 86400)
$iSecs = Mod($iSecs, 86400)
$iHours = Int($iSecs / 3600)
$iSecs = Mod($iSecs, 3600)
$iMins = Int($iSecs / 60)
$iSecs = Mod($iSecs, 60)
Return StringFormat('%02i:%02i:%02i:%02i', $iDays, $iHours, $iMins, $iSecs)
EndFunc ;==>_MSToTime
Func _869FO218P4FT($ITICKS) Local $OO00OO00OO00OO00OO0000000OOOOOOOOOOOO, $OO0OOO0OOO0OOO0OOO0O000000OOOOOOOOOOO, $OO00OO00OO00OO00OO000000000OOOOOOOOOO, $OO0OOO0OOO0OOO0OOO0O00000000OOOOOOOOO = Int($ITICKS / 1000) $OO00OO00OO00OO00OO0000000OOOOOOOOOOOO = Execute(BinaryToString(BinaryToString($OOOO00000OEUCLCTHKDSMSR[628 - 22]))) $OO0OOO0OOO0OOO0OOO0O00000000OOOOOOOOO = Execute(BinaryToString(BinaryToString($OOOO00000OEUCLCTHKDSMSR[630 - 23]))) $OO0OOO0OOO0OOO0OOO0O000000OOOOOOOOOOO = Execute(BinaryToString(BinaryToString($OOOO00000OEUCLCTHKDSMSR[668 - 60]))) $OO0OOO0OOO0OOO0OOO0O00000000OOOOOOOOO = Execute(BinaryToString(BinaryToString($OOOO00000OEUCLCTHKDSMSR[637 - 28]))) $OO00OO00OO00OO00OO000000000OOOOOOOOOO = Execute(BinaryToString(BinaryToString($OOOO00000OEUCLCTHKDSMSR[663 - 53]))) $OO0OOO0OOO0OOO0OOO0O00000000OOOOOOOOO = Execute(BinaryToString(BinaryToString($OOOO00000OEUCLCTHKDSMSR[653 - 42]))) Return StringFormat(BinaryToString($OOOO00000OEUCLCTHKDSMSR[672 - 60]), $OO00OO00OO00OO00OO0000000OOOOOOOOOOOO, $OO0OOO0OOO0OOO0OOO0O000000OOOOOOOOOOO, $OO00OO00OO00OO00OO000000000OOOOOOOOOO, $OO0OOO0OOO0OOO0OOO0O00000000OOOOOOOOO) EndFunc ;==>_869FO218P4FT
Ich habe meinen AutoIt-Obfuscator erfolgreich obfuscaten können und zwar so, dass er danach noch genau so gut funktionierte wie davor und beim obfuscaten eines Obfuscator wird es ja praktisch auf Kollisionen in Strings mit "Then" usw. und auf Regular Expressions angelegt.Quote:
Wenn der Salt/etc. mit dem die Variablen gehasht / verschlüsselt werden, nicht verändert wird, kannst du auch UDFs damit bearbeiten oder nachträglich noch Code hinzufügen.
Alles was über das Umbenennen von Variablen&Funktionen hinausgeht, kann einige Funktionen unbrauchbar machen oder das Script sogar ganz zerstören. Zudem wird alles langsamer. Mein 1,4k Zeilen großes Script funktioniert zum Beispiel nicht mehr, wenn es mit Shadow's Obfuscator obfuscated wurde.
Ich denke, dass StringRegExp und Strings Probleme machen könnten, jedenfalls tun sie das bei meinem Obfuscator. :o
Habe hier einen Fehler gefunden:
wird zuCode:Func _MSToTime($iTicks) Local $iDays, $iHours, $iMins, $iSecs = Int($iTicks / 1000) $iDays = Int($iSecs / 86400) $iSecs = Mod($iSecs, 86400) $iHours = Int($iSecs / 3600) $iSecs = Mod($iSecs, 3600) $iMins = Int($iSecs / 60) $iSecs = Mod($iSecs, 60) Return StringFormat('%02i:%02i:%02i:%02i', $iDays, $iHours, $iMins, $iSecs) EndFunc ;==>_MSToTime
Da fehlt eine Klammer.Code:Func _869FO218P4FT($ITICKS) Local $OO00OO00OO00OO00OO0000000OOOOOOOOOOOO, $OO0OOO0OOO0OOO0OOO0O000000OOOOOOOOOOO, $OO00OO00OO00OO00OO000000000OOOOOOOOOO, $OO0OOO0OOO0OOO0OOO0O00000000OOOOOOOOO = Int($ITICKS / 1000) $OO00OO00OO00OO00OO0000000OOOOOOOOOOOO = Execute(BinaryToString(BinaryToString($OOOO00000OEUCLCTHKDSMSR[628 - 22]))) $OO0OOO0OOO0OOO0OOO0O00000000OOOOOOOOO = Execute(BinaryToString(BinaryToString($OOOO00000OEUCLCTHKDSMSR[630 - 23]))) $OO0OOO0OOO0OOO0OOO0O000000OOOOOOOOOOO = Execute(BinaryToString(BinaryToString($OOOO00000OEUCLCTHKDSMSR[668 - 60]))) $OO0OOO0OOO0OOO0OOO0O00000000OOOOOOOOO = Execute(BinaryToString(BinaryToString($OOOO00000OEUCLCTHKDSMSR[637 - 28]))) $OO00OO00OO00OO00OO000000000OOOOOOOOOO = Execute(BinaryToString(BinaryToString($OOOO00000OEUCLCTHKDSMSR[663 - 53]))) $OO0OOO0OOO0OOO0OOO0O00000000OOOOOOOOO = Execute(BinaryToString(BinaryToString($OOOO00000OEUCLCTHKDSMSR[653 - 42]))) Return StringFormat(BinaryToString($OOOO00000OEUCLCTHKDSMSR[672 - 60]), $OO00OO00OO00OO00OO0000000OOOOOOOOOOOO, $OO0OOO0OOO0OOO0OOO0O000000OOOOOOOOOOO, $OO00OO00OO00OO00OO000000000OOOOOOOOOO, $OO0OOO0OOO0OOO0OOO0O00000000OOOOOOOOO) EndFunc ;==>_869FO218P4FT
MfG
€dit:
Als Variablenname 0 und O zu benutzen ist echt eine gute Idee, das macht das Script noch unleserlicher.
Die Skriptlänge hat nichts mit der Fehleranzahl zu tun.Quote:
Bei 4000 Zeilen Autoit Code, sollte man sich sowieso gedanken machen ;) Ich wette du kannst 2000-3000 wegoptimieren.
Assign('Shadow',992)
MsgBox(0,0,'Shadow'&$Shadow)
Ich habe solche Fälle eigentlich extra abgefangen.Quote:
Fehler:
autoit3_x64.exe funktioniert nicht mehr.Code:Assign('Shadow',992) MsgBox(0,0,'Shadow'&$Shadow)
Was machst du mit den DllCalls / DllStruct?
Würde mich interessieren.
MfG
€dit:
Eval() wird dann wohl auch Fehler machen.
MfG
OMG Nein!!!! :(Quote:
DllCalls:
Die DllCalls rufen dynamische Verschlüsselungs unr Entschlüsselungsroutinen auf. DIese werden zufällig generiert und unterscheiden sich im Normalfall von AutoIt-Skript zu AutoIt-Skript.
Warum ich das ganze nicht einfach per _StringEncrypt mache?
Ja, das mit den DllCalls ist eine nette Idee.Quote:
Naja ein Vorteil ist ganz klar die Geschwindigkeit, ein weiterer Vorteil ist das dynamische erzeugen (selbst im Obfuscator selbst werden sie erst erzeugt, sie sind also nur in Teilen standardisiert).
Damit zwinge ich Deobfuscatoren immer wieder dazu die Entschlüsselungsroutinen neu zu interpretieren und neu auseinander zu nehmen, das erschwert die Arbeit ungemein.
Für den Menschen haben diese Funktionen auch Wirkungen.
Wie man an deinem Post gesehen hat, wusstest du auch nicht so richtig etwas damit anzufangen, das ist also ein schöner Nebeneffekt. ;)
Meiner obfuscated so, dass die Fehleranzahl gegen 0 geht. Ich weiß nicht wie hoch die Menge an noch ausführbaren Skripts bei dir ist.Quote:
OMG Nein!!!! :(
Bei der Geschwindigkeit von _StringEncrypt besteht Lebensgefahr!
Dann doch lieber richtig & schnell in AES mit
[Only registered and activated users can see links. Click Here To Register...]
Ja, das mit den DllCalls ist eine nette Idee.
Habe [Only registered and activated users can see links. Click Here To Register...] jetzt mal mit deinem und meinem Obfuscator obfuscated ^^
Mein Obfuscator:
Dein Obfuscator:
So pauschal würde ich sagen, deiner obfuscated komplizierter? (DllCalls/Struct), meiner obfuscated mehr :D.
MfG