Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > AutoIt
You last visited: Today at 13:07

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Shadows Obfuscator (mit Sourcecode)

Discussion on Shadows Obfuscator (mit Sourcecode) within the AutoIt forum part of the Coders Den category.

Reply
 
Old 11/27/2012, 22:57   #211
 
Shadow992's Avatar
 
elite*gold: 77
Join Date: May 2008
Posts: 5,430
Received Thanks: 5,878
Quote:
Originally Posted by legend90 View Post
I tried, yeah, i see it will lose much security doing that, when do you think you will get time for making it being able to be used in a script, like being used from cmd ?
I do not know when exactly.
Shadow992 is offline  
Old 01/05/2013, 06:18   #212
 
elite*gold: 0
Join Date: Dec 2012
Posts: 87
Received Thanks: 31
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?
iZz0s is offline  
Old 01/07/2013, 21:09   #213
 
Shadow992's Avatar
 
elite*gold: 77
Join Date: May 2008
Posts: 5,430
Received Thanks: 5,878
Quote:
Originally Posted by iZz0s View Post
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?
Ich habe Themida noch nie zum Laufen gebracht, ich kenne nur viele Leute, die auf diesen Protector schwören.

Eine kostenlose Alternative ist Enigma Virtual Box, das benutze ich selbst sehr oft und da klappt das schützen einwandfrei.
Shadow992 is offline  
Old 01/08/2013, 12:55   #214
 
elite*gold: 0
Join Date: Oct 2012
Posts: 10
Received Thanks: 1
the obfuscated script is detected by many av's
legend90 is offline  
Old 01/08/2013, 14:47   #215
 
elite*gold: 0
Join Date: Dec 2012
Posts: 87
Received Thanks: 31
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.
iZz0s is offline  
Old 01/09/2013, 21:55   #216
 
Shadow992's Avatar
 
elite*gold: 77
Join Date: May 2008
Posts: 5,430
Received Thanks: 5,878
Quote:
Originally Posted by iZz0s View Post
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.
Normalerweise sollte das nicht möglich sein.
Ich mache das auch immer so und bisher konnte noch kein Decompiler es decompilen.

1. Obfuscator
2. Safe.exe
3. Enigma Virtual Box

P.S.
Theoretisch ist es möglich, praktisch wird es aber an dem Umbenennen der Funktionen und der Variablen scheitern.
Shadow992 is offline  
Old 01/10/2013, 15:22   #217
 
Achat's Avatar
 
elite*gold: 528
Join Date: Jan 2012
Posts: 2,127
Received Thanks: 2,403
Quote:
Originally Posted by iZz0s View Post
Ist es eig. möglich auch einzelne UDFs mit dem Obfuscator zu bearbeiten?
Quote:
Originally Posted by Shadow992 View Post
Theoretisch ist es möglich, praktisch wird es aber an dem Umbenennen der Funktionen und der Variablen scheitern.

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.

Quote:
Originally Posted by Shadow992 View Post
1. Obfuscator
2. Safe.exe
3. Enigma Virtual Box
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.

Habe hier einen Fehler gefunden:

Code:
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
wird zu

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
Da fehlt eine Klammer.

MfG

€dit:

Als Variablenname 0 und O zu benutzen ist echt eine gute Idee, das macht das Script noch unleserlicher.
Achat is offline  
Old 01/15/2013, 11:13   #218
 
Shadow992's Avatar
 
elite*gold: 77
Join Date: May 2008
Posts: 5,430
Received Thanks: 5,878
Quote:
Originally Posted by Achat View Post
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.

Habe hier einen Fehler gefunden:

Code:
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
wird zu

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
Da fehlt eine Klammer.

MfG

€dit:

Als Variablenname 0 und O zu benutzen ist echt eine gute Idee, das macht das Script noch unleserlicher.
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.

Ich kann aber in deinem Beispiel auch nicht erkennen, wo da eine Klammer fehlen soll.

Da das Ganze kein Hash ist, sondern eine systematische Generierung von Os und 0en, ist ein Zusammenfügen aus mehreren einzeln obfuscateten Skripten nicht möglich.

Will man also eine UDF obfuscaten, dann schaltet man entweder (momentan noch per direkte Quellcode-Änderung) das Obfuscaten von Funktionen/Variablen aus oder man fügt die UDF direkt am Anfang zum Skript manuell hinzu.
Shadow992 is offline  
Old 02/01/2013, 14:28   #219
 
Darkbanner's Avatar
 
elite*gold: 30
Join Date: May 2010
Posts: 486
Received Thanks: 161
Sieht so aus als bekäme der Obfuscator probleme bei 4000 zeilen code ^.^
Außerdem schleift er gut viel false-positives mit sich.
Darkbanner is offline  
Old 02/01/2013, 21:43   #220


 
Lawliet's Avatar
 
elite*gold: 2
Join Date: Jul 2009
Posts: 14,456
Received Thanks: 4,685
Quote:
Originally Posted by Darkbanner View Post
Sieht so aus als bekäme der Obfuscator probleme bei 4000 zeilen code ^.^
Außerdem schleift er gut viel false-positives mit sich.
Bei 4000 Zeilen Autoit Code, sollte man sich sowieso gedanken machen Ich wette du kannst 2000-3000 wegoptimieren.
Lawliet is offline  
Old 02/02/2013, 12:25   #221
 
Shadow992's Avatar
 
elite*gold: 77
Join Date: May 2008
Posts: 5,430
Received Thanks: 5,878
Quote:
Originally Posted by Lawliet! View Post
Bei 4000 Zeilen Autoit Code, sollte man sich sowieso gedanken machen Ich wette du kannst 2000-3000 wegoptimieren.
Die Skriptlänge hat nichts mit der Fehleranzahl zu tun.
Da ich auch einfach 4000x MsgBox machen kann und das geht einwandfrei.
Wäre also ganz gut wenn du mir zeigst wo genau es hängt bzw. welche Fehler entstehen. Solltest du den C++ Obfuscator benutzen ist die Chance etwas kaputt zu machen eh extrem gering. Ich konnte sogar den AutoIt-Obfuscator obfuscaten und er funktionierte danach noch einwandfrei.
Dabei besteht der AutoIT-Obfuscator logischerweise u.a. auch aus jedemenge Strings und Befehle, die potentielle Fehlerquellen sein können.

Abgesehen davon verursacht der Obfuscator genau 0 false/positiv Meldungen. Da der Obfuscator nur den AutoIt-Code verändert jedoch nicht die Exe-Datei an sich.

Irgendwas musst du also falsch gemacht haben bzw. verwechselt haben.
Shadow992 is offline  
Old 03/13/2013, 15:29   #222
 
Achat's Avatar
 
elite*gold: 528
Join Date: Jan 2012
Posts: 2,127
Received Thanks: 2,403
Fehler:
Code:
Assign('Shadow',992)
MsgBox(0,0,'Shadow'&$Shadow)
autoit3_x64.exe funktioniert nicht mehr.

Was machst du mit den DllCalls / DllStruct?
Würde mich interessieren.

MfG

€dit:

Eval() wird dann wohl auch Fehler machen.

MfG
Achat is offline  
Thanks
1 User
Old 03/13/2013, 21:52   #223
 
Shadow992's Avatar
 
elite*gold: 77
Join Date: May 2008
Posts: 5,430
Received Thanks: 5,878
Quote:
Originally Posted by Achat View Post
Fehler:
Code:
Assign('Shadow',992)
MsgBox(0,0,'Shadow'&$Shadow)
autoit3_x64.exe funktioniert nicht mehr.

Was machst du mit den DllCalls / DllStruct?
Würde mich interessieren.

MfG

€dit:

Eval() wird dann wohl auch Fehler machen.

MfG
Ich habe solche Fälle eigentlich extra abgefangen.
Und merke gerade, dass ich bei diesem Abfangen lediglich ein "temp_i=i" vergessen habe... Habe es jetzt unter Linux kompiliert per Wine und irgendwie mag AutoIt zwar trotzdem nicht so ganz, richtig obfuscatet werden die Befehle jetzt aber. Die neue Version ist sofort im ersten beitrag aufzufinden.

Ich hoffe einfach, dass AutoIt nicht mag, weil ich Wine benutze, testet es einfach.

Edit:
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?
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.
Shadow992 is offline  
Old 03/14/2013, 12:02   #224
 
Achat's Avatar
 
elite*gold: 528
Join Date: Jan 2012
Posts: 2,127
Received Thanks: 2,403
Quote:
Originally Posted by Shadow992 View Post
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?
OMG Nein!!!!
Bei der Geschwindigkeit von _StringEncrypt besteht Lebensgefahr!
Dann doch lieber richtig & schnell in AES mit


Quote:
Originally Posted by Shadow992 View Post
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.
Ja, das mit den DllCalls ist eine nette Idee.

Habe 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 .

MfG
Achat is offline  
Old 03/14/2013, 14:04   #225
 
Shadow992's Avatar
 
elite*gold: 77
Join Date: May 2008
Posts: 5,430
Received Thanks: 5,878
Quote:
Originally Posted by Achat View Post
OMG Nein!!!!
Bei der Geschwindigkeit von _StringEncrypt besteht Lebensgefahr!
Dann doch lieber richtig & schnell in AES mit




Ja, das mit den DllCalls ist eine nette Idee.

Habe 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 .

MfG
Meiner obfuscated so, dass die Fehleranzahl gegen 0 geht. Ich weiß nicht wie hoch die Menge an noch ausführbaren Skripts bei dir ist.
Aber wenn ich einmal Zeit habe werde ich diese Sachen auch noch ändern.
Denn Ifs/Whiles/Local usw. werden weitestgehend ignoriert vom Obfuscator um dort nicht ausversehen etwas zu zerstören. Mir fehlte bisher einfach die Lust das auch noch einmal zu untergliedern.

Wenn du aber auf einen Wettstreit hinaus willst, nur zu.
Lass mir doch einmal ein Skript von deinem Obfuscator zu kommen, dann setz ich mich hin und mach einen Deobfuscator, die selbe Aufgabe gilt dann für meinen.

Edit:
Die "IsDeclared"s sind absichtlich nicht obfuscatet, da das vom Obfuscator hinzugefügt wird und zusätzliche Verwirrung bringt.

Selbst die Zahlen, die du unterstrichen hast sind vom Obfuscator hinzugefügt worden und werden nicht in extra Variablen gespeichert um die Geschwindigkeit des auszuführenden Codes nicht negativ zu beeinflussen. Bei dir sieht das sehr so aus als würdest du alle Strings in Variablen speichern.
Das hat 2 Nachteile:

1. Die Variablen können einfach per C&P in andere SKripts kopiert werden.
2. Die Geschwindigkeit nimmt schnell ab obwohl die Sicherheit kaum gestiegen ist.

Edit2:
Ich setz mich mal an einen Deobfuscator, versuche den Deobfuscator aber allgemein auf viele Obfuscatoren anwendbar zu halten, werde aber trotzdem dein Kiwi-Projekt-Obfuscator als Hauptleitobfuscator nehmen. Ich wollte eh schon ewig einen allgemeinen Deobfuscator schreiben.

Achja meine Vermutung hatte sich beim Ansehen deines Sources bestätigt.
Shadow992 is offline  
Reply


Similar Threads Similar Threads
AutoIt Obfuscator - Verschlüsselung
09/06/2009 - AutoIt - 7 Replies
Hey, Bin dank einem guten Freund, der mich darauf hingewiesen hat, auf diesen nützlichen Tool gestoßen: AutoIt Obfuscator Was macht er: English: Obfuscator doesn't make your source safe!
Suche v1.0.24.14 vom Obfuscator von Autoit
09/17/2008 - Guild Wars - 2 Replies
Hi, hat die vielleicht noch jemand oder habt ihr auch alle nur die neue version ?? Falls jemand noch die alte hat würde ich mich freuen wenn man die hie hochladen oder mir schicken könnte Mfg emtec



All times are GMT +1. The time now is 13:08.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.