Sooooooo, erst einmal vorweg= Das meiste hier ist von just me...
Ehre wem Ehre gebührt.
Version 5 hier nun für Euch=
Wozu soll das Ganze gut sein: Hiermit können diverse Daten als Anhang versendet werden.
Weiterhin müssen keine Passwörter mehr im Klartext auf fremden Rechnern gespeichert werden. (Freunde, Bekannte, Kunden, etc.)
Außerdem läuft das Ganze im Hintergrund ohne den User zu belästigen.
Allerdings bietet das Ganze wohl keinen vollwertigen Schutz, aber immerhin. Denn der AHK Interpreter muss ja die Daten zuvor wieder entschlüsseln können.
Der Blat Mailer ist ein reines Kommandozeilentool, die entsprechenden Anweisungen müssen dem Programm übergeben werden. http://www.blat.net/
Die entsprechende Version von Blat muss geladen und in ein passendes Unterverzeichnis im Skriptverzeichnis, z.B. 001 oder auch direkt in das Skriptverzeichnis, gepackt werden.
(Falls es direkt verwendet werden soll, müssen natürlich die Pfade angepasst werden.)
Wenn ihr das Ganze auf einem 64 Bit System verwenden wollt, macht es Sinn, das Skript auch als Unicode 64 bit zu kompilieren. (AHK to Exe)
Dies ist notwendig wenn ihr=
SetWorkingDir %A_ScriptDir% ; Setzt das Ausfuehrungsverzeichnis auf das Verzeichnis des Scriptes - Der letzte umgekehrte Schrägstrich wird weggelassen (auch bei Stammverzeichnissen).
verwenden wollt, ohne totale Pfade anzugeben!
Ich hatte es als ANSI 32 Bit auf einem Windows 10 PC mit 64 Bit System kompiliert und hatte seeeeehr viel Spaß den Fehler zu finden...
Zunächst einmal müssen alle Daten in die obfuscator--5---just-me---and---best-code-in-use.ahk eingetragen werden.
Dieser erzeugt dann die function.ini Weiterhin macht es ebenfalls Sinn das Ganze mal unverschlüsselt zu testen!!!!
#NoEnv ; Nicht nachsehen, ob leere Varibalen evtl. Umgebungsvariablen sind, beschleunigt die Laufzeit
SetWorkingDir %A_ScriptDir% ; Setzt das Ausfuehrungsverzeichnis auf das Verzeichnis des Scriptes
/*
Version 5 - Thanks to just me for this great work
Forum Link= https://autohotkey.com/boards/viewtopic.php?f=9&t=24006
Blat muss sich in diesem Beispiel im Unter-Verzeichnis 001 befinden, inkl. dll und Co!!
Aus Gruenden der Abwaertskompatibilitaet empfehle ich die 32 Bit Version!
Download hier: https://sourceforge.net/projects/blat/files/Blat%20Full%20Version/
Blat Syntax (https://www.administrator.de/frage/mail-blat-versenden-batch-261852.html)=
%directory%\%mailclient% -body "%mailbody%" -subject "%mailsubject%" -attacht
"%logfile%" -to "%mailto%" -f "%mailcompany% %computername% <%mailfrom%>" -server
"%mailserver%" -port "%mailport%" -u "%mailuser%" -pw "%mailpassword%"
-subject <subj> : Betreff Zeile, am Besten mit Unterstrichen verbinden (auch -s)
-bodyF <file> : Sorgt dafuer das eine Textdatei im Body als Text ausgegeben wird!!!
-cc <recipient> : Kopieempfaenger (also -c) (Komma getrennt)
-attach <file> : attach binary file(s) to message (filenames comma separated)
*/
; ------------ Variablen fuer den Mailversand - immer an den Anfang eines Scriptes -----------------------------------
; ------------ Die Bezeichnungen duerfen keine Bindestriche enthalten ------------------------------------------------
; --------------------------------------------------------------------------------------------------------------------
Blat_Exe_Datei := "001/blat.exe" ; der Name und Pfad der Blat exe Datei, in Relation zum Skriptverzeichnis
Empfaenger := "[email protected]" ; -to
Absender_Mail_Adresse := "[email protected]" ; -f Absender E-Mail, Domainendung MUSS korrekt sein!!! (aus -to)
Benutzername := "[email protected]" ; -u
Passwort := "YourSecretPassword" ; -pw
Server := "deinedomain.org" ; -server
Serverport := "587" ; -port (TLS/STARTTLS Port 587)
E_Mail_von := "Horst_Beispiel" ; -i E-Mail-von (Name des Absenders)
Betreff_der_Mail := "Logdaten_von_PC5" ; -subject = Betreff muss mit Binde- oder Unterstrichen verbunden sein!!!!!
Body_und_Anhang := "logdat_pc5.txt" ; -attacht (Textdatei) -bodyF = Textdatei steht als Text im Body
; Kopieempfaenger := "" ; -cc (Kopieempfaenger - mehrere Empfaenger - Komma getrennt)
; ---------------------------------------------------------------------------------------------------------------------
/*
Die echte Syntax=
RunWait, %Blat_Exe_Datei% -to "%Empfaenger%" -f "%Absender_Mail_Adresse%" -server "%Server%" -port "%Serverport%" -u "%Benutzername%" -pw "%Passwort%" -subject "%Betreff_der_Mail%" -i "%E_Mail_von%" -bodyF "%Body_und_Anhang%" -attacht "%Body_und_Anhang%", , Hide
*/
; Ab hier bitte nichts mehr aendern...
IniFile := A_ScriptDir . "\function.ini"
IniSection := "function1"
IniDelete, %IniFile%, %IniSection%
P := Blat_Exe_Datei
. " -to " . Empfaenger ; -to
. " -f " . Absender_Mail_Adresse ; -f Absender E-Mail, Domainendung MUSS korrekt sein!!! (aus -to)
. " -u " . Benutzername ; -u Benutzername
. " -pw " . Passwort ; -pw
. " -server " . Server
. " -port " . Serverport ; -port
. " -i " . E_Mail_von ; -i E-Mail-von (Name des Absenders)
. " -subject " . Betreff_der_Mail ; Betreff
. " -bodyF " . Body_und_Anhang ; -bodyF = sorgt dafür das eine Textdatei auch als Text im Body steht
. " -attacht " . Body_und_Anhang ; -attacht (nur Textdatei)
; . " -cc " . Kopieempfaenger ; -cc (Kopieempfaenger - mehrere Empfaenger - Komma getrennt)
L := (StrLen(P) << !!A_IsUnicode)
VarSetCapacity(M, L + 8, 0)
M := P
C := HashData(P)
I := 0
Section := "0=" . C
While (I <= L) {
Section .= "`n" . A_Index . "=" . (NumGet(M, I, "Int64") ^ C)
I += 8
}
; MsgBox, 0, Section, %Section% ; Anzeige der Daten, wer es moechte kann es wieder sichtbar schalten...
IniWrite, %Section%, %IniFile%, %IniSection%
ExitApp
HashData(Str) {
VarSetCapacity(Hash, 8, 0)
If !(Result := DllCall("Shlwapi.dll\HashData", "Ptr", &Str, "UInt", StrLen(Str) << !!A_IsUnicode, "Ptr", &Hash, "UInt", 8))
Return NumGet(Hash, "UInt64")
Return !(ErrorLevel := Result)
}
Wenn soweit alles funktioniert, wird eine Datei namens function.ini erzeugt, diese enthält nun die Daten!
Selbstverständlich darf der Obfuscator sich später dann nicht im gleichen Verzeichnis befinden, wenn ihr das Skript auf einem anderen Rechner verwenden wollt!!!
Andernfalls wäre die gesamte Verschlüsselung sinnfrei! Hierzu benötigt ihr dann nur noch die erzeugte function.ini + function.ahk + Blat-Mailer http://www.blat.net/ mit allen Dateien in einem Unterverzeichnis= z.B.= 001
; #NoTrayIcon ; Das AHK Symbol wird nicht angezeigt
#NoEnv ; Nicht nachsehen, ob leere Varibalen evtl. Umgebungsvariablen sind, beschleunigt die Laufzeit
#SingleInstance force ; Bei Neustart des Scriptes die alte Instanz ohne Nachfrage ersetzen
SetWorkingDir %A_ScriptDir% ; Setzt das Ausfuehrungsverzeichnis auf das Verzeichnis des Scriptes - Der letzte umgekehrte Schrägstrich wird weggelassen (auch bei Stammverzeichnissen).
IniFile := A_ScriptDir . "\function.ini"
IniSection := "function1"
Run, % I2A(IniFile, IniSection), ,Hide
ExitApp
; Ini to function
I2A(IniFile, IniSection) {
IniRead, S, %IniFile%, %IniSection%
L := StrSplit(S, "`n", "`r")
If !IsObject(L) || (L.Length() < 2)
Throw Exception("Invalid section [" . IniSection . "] in " . IniFile . "!", -1)
X := SubStr(L.RemoveAt(1), 3)
VarSetCapacity(A, L.Length() * 8, 0)
P := &A
For I, V In L
P := NumPut(SubStr(V, StrLen(I) + 2) ^ X, P + 0, "Int64")
VarSetCapacity(A, -1)
Return A
}
Für wiederkehrende Wartungsaufgaben kann das Ganze dann noch per Aufgabenplanung eingebunden werden...
Falls ihr Fehler findet, würde ich mich über einen entsprechenden Hinweis hier freuen, Danke...