[Hack-Competition] Make a Hack for my Program

03/01/2011 16:33 Mi4uric3#61
Quote:
Originally Posted by Kaktusfresser View Post
Da dein Programm laut Changelog früher bei einem Wert unter 1 abgeschmiert ist, wäre es nur logisch, wenn eine Multiplikation/Division in der Rechnung zum Verstecken stattfindet.
Gut kombiniert :p

Quote:
Originally Posted by Kaktusfresser View Post
Zu den Sicherungsvalues:
Wenn ich nur eine ändere, sagt dein Programm Hack detected und verschwindet im RAM-Nirvana. Besonders nervig dabei: alle Adressen futsch :p
Okay das läuft so, wie ich das will
Jedoch:
Quote:
Originally Posted by Kaktusfresser View Post
Wenn ich beide so ändere, dass die Abstände stimmen (100 und 16384), dann läuft das Programm weiter. Der angezeigte Wert bleibt trotzdem gleich. Increasen/Decreasen ändert weiterhin nur um 1...
An dieser Stelle sollte es eigentlich AUCH "Hack detected" sagen.. oO

Quote:
Originally Posted by Kaktusfresser View Post
Außerdem hab ich so das Gefühl, dass iwas mit der angezeigten Value=2 speziell ist, weil dann eine Sicherungsvalue auf 1337 steht -> Easteregg?Tipp? xD
Random shit
Krass was in dem Programm so alles drin ist was nicht beabsichtigt war :awesome:
03/01/2011 16:43 Kaktusfresser#62
Hmmmm....
Ich kann das mit den 2 values ändern->kein hack detected nicht mehr reproduzieren... Wahrscheinlich hab ich irgendwas geNOPed und vergessen...sry^^
Edit: kann mich wahrscheinlich leider erst am Wochenende wieder ausführlich mit dem Programm beschäftigen, die Analyse muss also bis dann warten.
03/01/2011 17:02 Mi4uric3#63
Quote:
Originally Posted by Kaktusfresser View Post
Hmmmm....
Ich kann das mit den 2 values ändern->kein hack detected nicht mehr reproduzieren... Wahrscheinlich hab ich irgendwas geNOPed und vergessen...sry^^
Edit: kann mich wahrscheinlich leider erst am Wochenende wieder ausführlich mit dem Programm beschäftigen, die Analyse muss also bis dann warten.
Ja das mag sein..
Klausurphase?
03/01/2011 19:19 Kaktusfresser#64
Quote:
Originally Posted by Mi4uric3 View Post
Klausurphase?
Jop >.<
Übrigens: nen Scrambler zu nutzen find ich gaaanz pöse von dir! xD

Und aus der Timersache kommst du nimmer raus:
Da ich ein wenig C# kann, versuch ich mich mal bei Gelegenheit da ranzusetzen...
03/01/2011 19:40 P-a-i-n#65
Jetzt haste aber die Buttonnamen und kannste sie nehmen denke mal das die verschlüsselung immer gleich ist und nicht zur laufzeit sich ändert, werd mich nachher nochmal dransetzen und schauen.
03/01/2011 20:39 Kaktusfresser#66
Also wenn du die Codeverschlüsselung meinst, ich glaub das ist nur Zufallsdreck ums unlesbar zu machen...
Mein Decompiler failt bei der meiner Meinung nach wichtigsten Prozedur! -.-
Allerdings: Ich denke, die Value liegt verschlüsselt im Speicher...aber viel Spaß beim knacken bei ner Rijndael-Verschlüsselung >.<
Habe aber noch nen Hinweis auf Key und IV gefunden, aber das geht wirklich über mein Wissen hinaus:
Das darf jetzt irgendeiner mit Ahnung vom Stack, Pointern und dem Speicher generell lösen^^
03/01/2011 22:12 .Infinite#67
Eig müsste Hashen doch ziemlich sicher sein oder? Wäre sowas hier angreifbar?

PHP Code:
#include <Crypt.au3>

$GUI=GUICreate("test"200150, -1, -1)
$label=GUICtrlCreateLabel(""80202215)
$button_up=GUICtrlCreateButton("Up"75803022)
GUISetState()

$var=100
$factor
=Random(10000999991)
$hash=_Crypt_HashData($var*$factor$CALG_MD5)
GUICtrlSetData($label$var)

While 
1
    
If GUIGetMsg()=$button_up Then
        $var
+=1
        $factor
=Random(1009991)
        
$hash=_Crypt_HashData($var*$factor$CALG_MD5)
        
GUICtrlSetData($label$var)
    EndIf
    If 
_Crypt_HashData($var*$factor$CALG_MD5) <> $hash Then
        MsgBox
(0"ERROR""Hack detected")
        Exit
    EndIf
WEnd 
03/02/2011 20:32 Kaktusfresser#68
Problem:
Wenn man nen Breakpoint vor dem hashen setzt, kann man die unverschlüsselte Variable $var nach belieben ändern....
03/02/2011 22:36 .Infinite#69
Hmm. So könnte man aber mit so gut wie jedem Programm verfahren... Gegen CE, MLE, etc. hilfts aber ;)
03/02/2011 22:46 lolkop#70
nur das normale menschen immer versuchen würden jede unnötige operaton zu vermeiden, anstatt durch unnötige verschlüsselungsalgorythmen den ressourcen-aufwand exponentiell ansteigen zu lassen...

für so ein kleines crack me mag das ja zu keinerlei problemen führen, für größere programme, die werte viele hundert bis tausend male pro sekunde aktualiusieren müssen, ist eine verschlüsselung dieser werte quasi der tod jedes programms.
03/03/2011 17:46 Kaktusfresser#71
Ich gebs endgültig auf. .NetReactor verkrüppelt den armen IL-Code zu einer kompletten Shellcode-IL Soße, da crasht jeder decompiler...und mein Hirn, wenn ich versuche den Shellcode einfach zu ignorieren... Hunderte Aufrufe von Funktionen wie RToojW9CA3mDUF7bJ6,dessen Inhalt ein einfaches return true; ist...Dann ein jump if true...Das ist unlesbar.
Per CE ist imho nix zu machen, Viel Spaß beim Rijndael Brute-Forcen! oder beim Filtern des Keys und IVs aus der IL-Soße, da hat man die Wahl...
03/04/2011 11:02 MrSm!th#72
Quote:
Originally Posted by .Infinite View Post
Ich denke irgendeinen Weg wird es immer geben, sonst würde es ja Firmen wie die Hersteller von Programmen wie Hackshield etc. garnicht mehr geben und niemand würde mehr Hacken...

Man kann einfach kein absolut sicheres Programm machen. Wobei der sicherste (aber auch aufwendigste Schutz) auch in die Richtung eines zweiten Prozesses geht, der permanent alle auf dem Rechner ausgeführten Programme und den Spielprozess überwacht. Kombiniert mit einer Art geupdateten Blacklist auf nem FTP hätte man schonmal ne ziemlich hohe Sicherheit.

Zudem sollte man sich auch mal fragen, wozu man diesen Schutz überhaupt benötigt. Auch wenn mir klar ist, dass das vom TE genannte Programm nur als Beispiel dient... Warum dieser Aufwand, um eine höchstwahrscheinlich selbst programmiertes mini-Spiel o.Ä mit einem Hackerschutz zu versehen. Wenn jemand mit CE hackt, raubt er sich damit doch selbst den Spielspaß.

Sinn machen solche Anwendungen nur bei Online-Spielen, wo man sich anderen Spielern durch Hacken ungerechte Vorteile verschaffen kann. Aber da würden dir die Tipps die du hier im Forum bekommst nicht weiterhelfen, weil sie einfach zu leicht zu durchschauen sind.

Wenn es dir hierbei nur um eine Herausforderung und Spass an der Freude geht, auch ok ;) Ich werde mir für den Fall nochmal was nettes überlegen.
Blödsinn.
1. Ein zweiter Prozess ist überhaupt nicht das sicherste
2. Programme wie HS sind sicher nicht das sicherste
3. FTP erst recht nicht, wenn dann http

Ein guter Schutz wäre es, alle wichtigen Dinge vom Server verwalten zu lassen, fertig.
Nix HS, nix blacklist.

Zu der Kritik meiner Methode von wegen decreased value:
Nö, der random wert wird ja jedes mal neu berechnet.

Zu der Idee, Zahlen in hex zu konvertieren:
Wtf, hex ist nur ne andere darstellungsform, da gibts nix zu konvertieren.

@pain:
Schonmal dran gedacht, dass sie ganzen Änderungen durch .net zustande kommen?
Meines wissens ist olly kein .net debugger und .net liegt nunmal im bytecode vor, also wie stellst du dir das vor, mit olly den code zu disassemblieren? O.o
03/04/2011 15:05 .Infinite#73
Quote:
Ein guter Schutz wäre es, alle wichtigen Dinge vom Server verwalten zu lassen, fertig.
Nix HS, nix blacklist.
Die Kommmunikation mit dem Server lässt sich genauso leicht abfangen und manipulieren...


Quote:
Zu der Idee, Zahlen in hex zu konvertieren:
Wtf, hex ist nur ne andere darstellungsform, da gibts nix zu konvertieren.
Sicher, aber die Zahlen lassen sich nicht mehr so leicht mit CE finden.


Quote:
Die Prozentanzeige würde man dann direkt in der Funktion berechnen, die das Label aktualisiert (sodass sie nirgendwo zwischengespeichert werden muss).
Aber wird die Variable nicht innerhalb der Funktion irgendwo gespeichert? Ich meine, auch wenn sie nur als Parameter übergeben wird, steht sie ja noch irgendwo im Speicher oder?
03/04/2011 16:24 xNopex#74
Quote:
Die Kommmunikation mit dem Server lässt sich genauso leicht abfangen und manipulieren...
Wenn der Server gut programmiert ist, verarbeitet er verfälschte Datenpackete nicht und haut dich gleich mal raus.

Quote:
Sicher, aber die Zahlen lassen sich nicht mehr so leicht mit CE finden.
Absoluter Blödsinn und falsch. Eine Zahl ist immer dieselbe Zahl, egal ob du sie dir in der Basis 2,10,16,... anzeigen lässt. Das ist Schnurzpieppopegal. Wenn du nach 0x0A suchst findest du eben auch 10 oder L0L0.
03/04/2011 17:15 .Infinite#75
Quote:
Absoluter Blödsinn und falsch. Eine Zahl ist immer dieselbe Zahl, egal ob du sie dir in der Basis 2,10,16,... anzeigen lässt. Das ist Schnurzpieppopegal. Wenn du nach 0x0A suchst findest du eben auch 10 oder L0L0.
Aber wenn man den Quellcode nicht kennt, weis man nicht, wie die Zahl jetzt gespeichert ist. Und wenn in der Variable die Zahl in Hex steht und im Label in Dezimal, dann weiß der potentielle Hacker ja garnicht, wonach er suchen soll, weil er die Dezimalzahl im CE ja nicht findet.

Aber es geht ja garnicht um Hex oder nicht, sondern ums Prinzip. Also, dass man den Wert der Variable in irgendeiner anderen Form abspeichert, ob als Hex, Hash oder sonst irgendwie verschlüsselt.