• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Applescript mit activation code

Kernelpanik

Maren Nissen
Registriert
05.03.04
Beiträge
2.303
Hallo Leute,
ich wollte mal fragen ob es möglich ist einem Applescript einen activation code zu geben. Ich habe das mal gesehen bei krpanotools. Kann mir zwar nicht vorstellen wie das gehen soll, lasse mich aber gern eines Besseren belehren.
 

sedna

Galloway Pepping
Registriert
22.10.08
Beiträge
1.359
Hallo,

der Wert einer property wird auch nach dem Beenden eines Skriptes nicht zurückgesetzt (jedoch beim neu kompilieren) :
Wenn der Wert der property "Aktivierung" false ist, frage nach Aktivierungs Code. Wenn richtig eingegeben, setze den Wert auf true (und frage somit nie mehr nach)

Gruß
 
  • Like
Reaktionen: Kernelpanik

sedna

Galloway Pepping
Registriert
22.10.08
Beiträge
1.359
Ja :cool:

... allerdings kann man das einem potentiellen Knacker auch erschweren... z.B. mit einem MD5 Hashwert: statt den Aktivierungs Code in das Skript zu schreiben, diesen vorher x mal mit dem shell Befehl md5 verschlüsseln, das gleiche dann im Skript mit dem eingegebenen Wert tun und die Hashwerte vergleichen.

Gruß
 
  • Like
Reaktionen: Kernelpanik

Kernelpanik

Maren Nissen
Registriert
05.03.04
Beiträge
2.303
Hmm... kannst Du ein Beispiel dazu geben oder einen Link wie ich da vorgehen muss. Das ist für mich Neuland.
 

Kernelpanik

Maren Nissen
Registriert
05.03.04
Beiträge
2.303
Ja :cool:

... allerdings kann man das einem potentiellen Knacker auch erschweren... z.B. mit einem MD5 Hashwert: statt den Aktivierungs Code in das Skript zu schreiben, diesen vorher x mal mit dem shell Befehl md5 verschlüsseln, das gleiche dann im Skript mit dem eingegebenen Wert tun und die Hashwerte vergleichen.

Gruß
Got it! Coole Sache. Allerdings mehrere male mit md5 verschlüsseln weiss ich nicht wie das geschickt gehen soll. Einfach das Ergebnis in eine neue Variable schreiben und dann den md5 Befehl "do shell script" mit dieser Variablen wiederholen? Sieht halt ziemlich amateurhaft aus. Gibts da einen cleveren handler?
 
Zuletzt bearbeitet:

Pill

Adams Parmäne
Registriert
07.07.12
Beiträge
1.310
Egal wie oft gehasht wird, das ist immer ziemlich unsicher. Hier mal ein Code-Beispiel:

Code:
property activated : false
set keys to {"e2b764068994715ed3bc13c21ac3ad79", "8d36b8e73a1f7e1b28a433270679fc59", "3d64f650b77b597ed1c124c54c402d07"}

repeat until activated
    if md5(text returned of (display dialog "Geben Sie den Aktivierungscode ein:" default answer ""), 1) is in keys then
        set activated to true
    end if
end repeat

display dialog "" giving up after 2

on md5(theString, n)
    repeat n times
        set theString to (do shell script "md5 -qs " & quoted form of theString)
    end repeat
    return theString
end md5

Schaut man sich den als nur ausführbar gespeicherten Code in einem Hex-Editor an, dann findet man folgendes:

Bildschirmfoto 2015-06-10 um 13.41.56.png

Die einfachste Möglichkeit ist es einfach boovfals in boovtrue zu ändern. Egal wie kompliziert die Passwörter verschlüsselt sind, damit lässt sich die Aktivierung immer umgehen. Alternativ kann natürlich auch ein Hashwert, der ja im Klartext lesbar ist, einfach durch einen bekannten Wert abgeändert werden. Bei mehrfachem Hashen muss lediglich mehrfach probiert werden, was die Sache immer noch zu einfach macht.

Wirklich sicher ist das also nie. Besser wäre es wahrscheinlich, die Variable activated nicht als boolean, sondern z.B. als 0 oder 1 zu setzen. Das Problem bleibt aber, dass Text immer als Klartext lesbar ist.

krpanotools löst das übrigens nicht in AppleScript.
 
  • Like
Reaktionen: sedna und Kernelpanik

sedna

Galloway Pepping
Registriert
22.10.08
Beiträge
1.359
Edit: Upps, zwischenzeitlich hat Pill noch geantwortet und schon einen Handler geliefert...
Und ja klar, knacken kann man das immer noch mit meiner vorgeschlagenen Methode

- - - - - -
Antwort zu #6:

Sowas in dieser Art

Code:
--activationcode: eingegebener Wert
--hashvalue : Hashwert

if (hashme(activationcode) is hashvalue) then
set activation to true
--usw

--und als Handler:
on hashme(var)
repeat 10 times
set var to (do shell script "echo -n " & quoted form of var & " | md5")
end repeat
end hashme
 
  • Like
Reaktionen: Kernelpanik

Kernelpanik

Maren Nissen
Registriert
05.03.04
Beiträge
2.303
Den Code von Pill verstehe ich nicht wirklich, das dauert noch ein paar Tage bis ich den verstanden habe. :rolleyes:
Sedna's Code werde ich heute noch testen. Meine eigene Kreation sieht so aus:

Code:
property bonbon : ""

--example
on doIt()
    display dialog "OK"
end doIt

--hash appeal
if bonbon is "d0e0a5aa5a3d654c2f623e9ce5331321" then
    doIt()
else
    set serial to text returned of (display dialog "Enter activation code:" default answer "" hidden answer no with title "ActivationCode")
    try
        set bonbon to (do shell script "md5 -qs " & serial)
    end try
    if bonbon is "d0e0a5aa5a3d654c2f623e9ce5331321" then
        doIt()
    else
        display alert "Activation code verification error!" message "Check your activation code and internet connection." as warning
    end if
end if

Ich habe das Gefühl mein Code ist echt clever aber Gefühle können täuschen, zumindest kann ich sagen: Selbst gemacht. :p Ich habe danach das Skript (read only) mit TextEdit geöffnet, mit dem Terminal ein neues Hash Paar erzeugt und die betreffende Stelle im Skript damit geändert. Geht nicht. Das Skript lässt sich nicht mehr ausführen. Erfolg auf der ganzen Linie? a:t
 
Zuletzt bearbeitet:

Pill

Adams Parmäne
Registriert
07.07.12
Beiträge
1.310
Nein, das Problem besteht immer noch. TextEdit kann wahrscheinlich mit der Zeichencodierung nichts anfangen und zerschießt dann die Datei. Mit dem richtigen Editor ist das aber kein Problem.
 

Kernelpanik

Maren Nissen
Registriert
05.03.04
Beiträge
2.303
Ich habe mit 0xED versucht einen neuen md5 code von welchem ich das Gegenstück habe einzusetzen. 0xED zeigt, das der Code zwischen jeder Ziffer einen Punkt hat. Ich habe also das gleiche mit dem neuen gemacht und... juhu es hat nicht funktioniert.
 

Pill

Adams Parmäne
Registriert
07.07.12
Beiträge
1.310
Das liegt daran, weil der Punkt kein Punkt ist, sondern ein Steuerzeichen.
 
  • Like
Reaktionen: Kernelpanik

Kernelpanik

Maren Nissen
Registriert
05.03.04
Beiträge
2.303
Hmm.. habe es geschafft mein Programm zu knacken. ෴ ⚡ Aber der Angreifer muss erstmal darauf kommen, dass das Passwort md5 gekrypted ist. Ich versuche jetzt mal ein mehrfache md5 Verschlüsselung. Da bei meiner Variante jedesmal der Schlüssel verglichen wird und nicht eine property boolean "yes" geschaltet wird, sollte das dann schon echt schwer sein zu knackinzken.
 
Zuletzt bearbeitet:

rootie

Filippas Apfel
Registriert
30.06.11
Beiträge
8.848
Ist es nicht 5 Minuten im Disassembler und es ist geknackt.
 

Marcel Bresink

Hadelner Sommerprinz
Registriert
28.05.04
Beiträge
8.560
Auch ohne Disassembler wird man schon durch Beobachten der Aktivitätsanzeige leicht herausfinden können, dass das Skript das externe Programm "md5" aufruft. Ein Angreifer braucht nur md5 gegen ein eigenes Programm auszutauschen und kann dann alle Aufrufe und Schlüssel als "Man in the Middle" mitlesen. Hier ist das sogar ganz besonders einfach, da der Aufruf von md5 ohne richtige Pfadangabe erfolgt.
 

sedna

Galloway Pepping
Registriert
22.10.08
Beiträge
1.359
Hallo,

na da habe ich ja was losgetreten. Dank an Pill für die Infos!

Man kann ein Passwort/Aktivierungscode natürlich auch mit einem selbst gebastelten, ganz persönlichen "Code Generator" verschlüsseln. Das kann man mit dem entsprechenden Aufwand zwar bestimmt auch knacken ... aber...
An einigen Stellen abgeändert/erweitert z.B. nach dieser Methode wird es schon schwierig!

Gruß
 
Zuletzt bearbeitet:

Pill

Adams Parmäne
Registriert
07.07.12
Beiträge
1.310
Das Passwort ist (@_@) ;)

Ein Verschlüsselungsverfahren ist nur sinnvoll, wenn nur der Schlüssel, aber nicht das Verfahren geheim ist.

Edit: Ups, da wurde wohl was editiert
 

sedna

Galloway Pepping
Registriert
22.10.08
Beiträge
1.359
Ja, da warst du aber schnell ... habe das schon wieder rausgenommen und den Beitrag editiert. Trotzdem: Chapeau!
Und recht hast du auch mit deiner Aussage! :)

Gruß
 

Pill

Adams Parmäne
Registriert
07.07.12
Beiträge
1.310
Eine Lösung für dieses Problem wäre es eventuell das Passwort in binären Listen zu speichern. Hier mal ein Ansatz:

Code:
property pass : {{1, 0, 1, 0, 0, 0, 0}, {1, 1, 0, 0, 0, 0, 1}, {1, 1, 1, 0, 0, 1, 1}, {1, 1, 1, 0, 0, 1, 1}, {1, 1, 1, 0, 1, 1, 1}, {1, 1, 0, 1, 1, 1, 1}, {1, 1, 1, 0, 0, 1, 0}, {1, 1, 1, 0, 1, 0, 0}, {1, 1, 0, 0, 0, 1}}

repeat
    set theAnswer to text returned of (display dialog "Passwort:" default answer "")
    if isValid(theAnswer) then
        display dialog "richtig"
        exit repeat
    end if
end repeat

on isValid(theKey)
    textToBin(theKey) is pass
end isValid

on textToBin(theText)
    set theBins to {}
    repeat with anId in id of theText
        set end of theBins to decToBin(anId)
    end repeat
    return theBins
end textToBin

on decToBin(num)
    set digits to 0
    set n to num
    repeat
        set digits to digits + 1
        set n to n / 2
        if n < 1 then
            exit repeat
        end if
    end repeat
    set binary to {}
    set n to num
    repeat with x from digits to 1 by -1
        set exponent to 2 ^ (x - 1)
        if (n / exponent) ≥ 1 then
            set binary to binary & 1
            set n to n - exponent
        else
            set binary to binary & 0
        end if
    end repeat
    return binary
end decToBin

Das Passwort in diesem Beispiel ist Passwort1.

Interessanterweise reicht es nicht das Passwort als Integer-Liste mit den ASCII-Werten zu speichern.
 

Kernelpanik

Maren Nissen
Registriert
05.03.04
Beiträge
2.303
Gibt es kein kryptographisches Verfahren, welches etwas stärker ist als Unicode Addierung? Lasst uns zusammen eine Kryptoverfahren entwickeln!

Eine Lösung für dieses Problem wäre es eventuell das Passwort in binären Listen zu speichern. Hier mal ein Ansatz:

Code:
property pass : {{1, 0, 1, 0, 0, 0, 0}, {1, 1, 0, 0, 0, 0, 1}, {1, 1, 1, 0, 0, 1, 1}, {1, 1, 1, 0, 0, 1, 1}, {1, 1, 1, 0, 1, 1, 1}, {1, 1, 0, 1, 1, 1, 1}, {1, 1, 1, 0, 0, 1, 0}, {1, 1, 1, 0, 1, 0, 0}, {1, 1, 0, 0, 0, 1}}

repeat
    set theAnswer to text returned of (display dialog "Passwort:" default answer "")
    if isValid(theAnswer) then
        display dialog "richtig"
        exit repeat
    end if
end repeat

on isValid(theKey)
    textToBin(theKey) is pass
end isValid

on textToBin(theText)
    set theBins to {}
    repeat with anId in id of theText
        set end of theBins to decToBin(anId)
    end repeat
    return theBins
end textToBin

on decToBin(num)
    set digits to 0
    set n to num
    repeat
        set digits to digits + 1
        set n to n / 2
        if n < 1 then
            exit repeat
        end if
    end repeat
    set binary to {}
    set n to num
    repeat with x from digits to 1 by -1
        set exponent to 2 ^ (x - 1)
        if (n / exponent) ≥ 1 then
            set binary to binary & 1
            set n to n - exponent
        else
            set binary to binary & 0
        end if
    end repeat
    return binary
end decToBin

Das Passwort in diesem Beispiel ist Passwort1.

Interessanterweise reicht es nicht das Passwort als Integer-Liste mit den ASCII-Werten zu speichern.

Ist schon etwas hart zu verstehen für mich.
 
Zuletzt bearbeitet: