|
Verfasser |
Nachricht |
HacKmaN
Ex-Developer
Beiträge: 2.423
Gruppe: User
Registriert seit: Oct 2009
Status:
Offline
Danke erhalten: 3319
|
RE: Homebrew vor Cheatern schützen
Aber könnte man es nicht so machen das im Prüfcode mehrer Sicherheitsvariablen und wenn der Code dann umgangen (oder sonst was) wird, dann wird erst das Menü von Spiel geladen und da wird überprüft ob diese Sicherheitsvariablen den Wert haben den sie haben sollen aber da der Prüfcode umgangen wurden ist sind diese nicht stimmend und das Spiel beendet sich einfach. Wäre doch so möglich und da die "Sicherheitsvariablen" im Menü überprüft werden kann man diese Überprüfung auch nich so leicht umgehen oder ?
Hier gibts sogar 2 Möglichkeiten (oder sogar mehr):
1. Das Überprüfen der Variablen überspringen (ist am einfachsten)
2. Den Variablen einfach vom Plugin aus nen anderen Wert geben
|
|
03.06.2011 16:57 |
|
Folgende User bedanken sich: |
|
Chaosduckman
Halbprofi
Beiträge: 170
Gruppe: User
Registriert seit: May 2010
Status:
Offline
Danke erhalten: 43
|
RE: Homebrew vor Cheatern schützen
Ich denke, das Thema kann man abhaken.
Es wird ein Katz und Maus Spiel. Ein Wettrüsten der Entwickler und Cheater.
Ich habe gelesen das man ein Spiel zu 100% sicher machen kann, wenn alle Berechnungen auf einem Server stattfinden und der Client wirklich nur ein Ding ist, was die Daten darstellt und nur Daten empfängt.
Da uns allen dazu die Ressourcen fehlen würden, ist es eher unwarscheinlich ein Spiel zu 100% sicher zu machen. Besonders wenn das Betriebssystem derart offen ist wie am PC oder der PSP.
Also kann man Client-Side Antihacks schnell vergessen.
Was man aber in Multiplayer Spielen tun kann ist:
- Vote Kick Recht von Spielern
- Kick Recht ohne Vote vom Host/Admin
- Spieler nur in Spielpausen, z.B. wenn eine Map geändert wird oder so, auf den Server lassen
- Paketfilter
- Verschlüsselung des Netzwerkverkehrs**
- Account Ban, sprich Spieler verliert alle seine Errungenschaften.
- IP Bans*
- MAC Bans*
- GUID Bans*
*Wobei man alle Daten leicht fälschen/ändern kann.
**Angreifbar duch Man-In-The-Middle Angriffe.
Wenn ihr ein Beispiel zur einer effizienten Einsetzung eines Paketfilters haben wollte, empfehle ich die Flyff Private Server Szene mit "Toms Antihack".
Dieser Beitrag wurde zuletzt bearbeitet: 03.06.2011 19:25 von Chaosduckman.
|
|
03.06.2011 18:33 |
|
|
|
ardi
Halbprofi
Beiträge: 114
Gruppe: User
Registriert seit: Feb 2011
Status:
Abwesend
Danke erhalten: 244
|
RE: Homebrew vor Cheatern schützen
Wie hier schon öffters beschrieben wurde, ist ein 100%iger Schutz nicht möglich. Du kannst es den Cheatern allerdings schwer machen.
Eine Möglichkeit ist selbst modifizierender Code. Was ist das?
Teile des Codes (z.B. der Body einer Function) werden verschlüsselt. Bevor die Function aufgerufen wird, muss sie decodiert werden. Und am besten nach Nutzung gleich wieder codieren. Eine doppelte Stromchiffre ist nicht schlecht, weil jedes veränderte Bit Einfluß auf das gesamte Ergebnis hat. Das gleiche kannst du auch mit dem Datenbereich machen, in dem z.B. die Anzahl der Leben, Schilde o.ä. (halt die Sachen auf die es die Cheater abgesehen haben) machen.
Wie gesagt nicht 100%ig aber normale Cheating-Tool sind dafür meist überfordert.
ardi
Dieser Beitrag wurde zuletzt bearbeitet: 07.06.2011 09:27 von ardi.
|
|
07.06.2011 06:34 |
|
Folgende User bedanken sich: |
|
Fixie
Hungrig und Stur
Beiträge: 3.740
Gruppe: Banned
Registriert seit: Feb 2009
Status:
Offline
Danke erhalten: 1558
|
RE: Homebrew vor Cheatern schützen
Dein Homebrew muss ja echt gut sein wenn du es so schützen willst..
Trotzdem ist deine Mühe umsonst die finden IMMER ein Weg..(siehe PS3 Jailbreak,PSP CFW,alle möglichen ONLINE GAMES)..
Aber wenn man wie bei CSPSP selbsternannter Admin vom eigenen Server ist,kann man sie ja verbannen
|
|
07.06.2011 08:45 |
|
|
|
~ferra~
Experte
Beiträge: 583
Gruppe: User
Registriert seit: Apr 2010
Status:
Offline
Danke erhalten: 461
|
RE: Homebrew vor Cheatern schützen
Trotzdem ist deine Mühe umsonst die finden IMMER ein Weg..
Das sieht aber anders aus, wenn sich der Code zur Laufzeit verändert. Sprich sich selbst erstellt.
Dann ist er zumindest vor dem decompilen sicher...
Wenn sich die Programme aber selber zur Laufzeit hin erstellen, ist es der Vorreiter zur künstlichen Intelligenz, und wer da Durchblick hat sollte lieber an eine Uni gehen und damit Geld verdienen, statt ein Homebrew zu "sichern".
MfG ferra
|
|
07.06.2011 12:14 |
|
Folgende User bedanken sich: |
|
reggie gakil
Experte
Beiträge: 864
Gruppe: User
Registriert seit: Mar 2011
Status:
Offline
Danke erhalten: 336
|
RE: Homebrew vor Cheatern schützen
guck ma in ftb2 da wird man sofort gebannt bei bestimmten codes, was man natürlich auch umgehen kann aber noobs haben da keine chance
|
|
07.06.2011 12:21 |
|
|
|
accounter79
Profi
Beiträge: 348
Gruppe: User
Registriert seit: Dec 2009
Status:
Offline
Danke erhalten: 79
|
RE: Homebrew vor Cheatern schützen
sorry bin unwissend weitgehends aber waere es aufwendig ne Code Engine zu schreiben die waehrend des betrieb ähnlich wie bei wpa2 staendig den Code neugeneriert
ginge das nicht ähnlich nachzumachen???
|
|
07.06.2011 12:28 |
|
|
|
accounter79
Profi
Beiträge: 348
Gruppe: User
Registriert seit: Dec 2009
Status:
Offline
Danke erhalten: 79
|
RE: Homebrew vor Cheatern schützen
guck ma in ftb2 da wird man sofort gebannt bei bestimmten codes, was man natürlich auch umgehen kann aber noobs haben da keine chance
aber ist das nicht bei ftb3 genauso möglich.
Oder ist das ein großer Unterschied weils nicht über den psn läuft.Was pssiert denn wenn man bei ftb3 Report statt vote drueckt.
Garnix???
Warum gibt's die Funktion denn überhaupt?!
Dieser Beitrag wurde zuletzt bearbeitet: 07.06.2011 12:34 von accounter79.
|
|
07.06.2011 12:32 |
|
|
|
Chaosduckman
Halbprofi
Beiträge: 170
Gruppe: User
Registriert seit: May 2010
Status:
Offline
Danke erhalten: 43
|
RE: Homebrew vor Cheatern schützen
@ardi: Das ist eine gute Idee. Aber wie willst du das Realisieren? Ich stehe zurzeit vor dem Problem, dass ich nicht weiß, wie groß die Funktion ist. Aber laut google ist das nicht zu 100% koscher...
Edit:
Gegen PRO Hacker und Cheater habe ich nichts, denn die haben für ihre Fähigkeiten gearbeitet. Wobei jeder auf Download klicken kann und sich ein Plugin auf die PSP schieben kann...
Dieser Beitrag wurde zuletzt bearbeitet: 07.06.2011 18:49 von Chaosduckman.
|
|
07.06.2011 18:42 |
|
|
|
ardi
Halbprofi
Beiträge: 114
Gruppe: User
Registriert seit: Feb 2011
Status:
Abwesend
Danke erhalten: 244
|
RE: Homebrew vor Cheatern schützen
@ardi: Das ist eine gute Idee. Aber wie willst du das Realisieren? Ich stehe zurzeit vor dem Problem, dass ich nicht weiß, wie groß die Funktion ist.
Ich habe nicht gesagt, dass das einfach wird
So. Habs jetzt nicht getestet, aber so könnte es funktionieren:
void decrypt(void *begin, void* end);
void encrypt(void *begin, void* end);
void geheim()
{
decrypt(_begin, _end);
_begin:
...
alles sehr geheim
...
_end:
encrypt(_begin, _end);
return;
}
Das setzt voraus, dass du nach dem Compilieren den Code im Binary suchst und encryptest. Wichtig: an die relocatables denken.
@ardi: Aber laut google ist das nicht zu 100% koscher...
Wenn du nach der Codeänderung auch immer den Cache leerst ist das alles kein Problem und 100% koscher (zumindest auf der PSP).
Unter z.B. Linux ist das Problematisch, wenn z.B. ein Programm 2x läuft. Da können sich die 2 Instanzen das gleiche text-Segment teilen und haben nur unterschiedliche data- und bss-Segmente. Oder das text-Segment ist nur Readonly.
ardi
|
|
08.06.2011 06:22 |
|
Folgende User bedanken sich: |
|
HacKmaN
Ex-Developer
Beiträge: 2.423
Gruppe: User
Registriert seit: Oct 2009
Status:
Offline
Danke erhalten: 3319
|
RE: Homebrew vor Cheatern schützen
@ardi: Das ist eine gute Idee. Aber wie willst du das Realisieren? Ich stehe zurzeit vor dem Problem, dass ich nicht weiß, wie groß die Funktion ist.
Ich habe nicht gesagt, dass das einfach wird
So. Habs jetzt nicht getestet, aber so könnte es funktionieren:
void decrypt(void *begin, void* end);
void encrypt(void *begin, void* end);
void geheim()
{
decrypt(_begin, _end);
_begin:
...
alles sehr geheim
...
_end:
encrypt(_begin, _end);
return;
}
Das setzt voraus, dass du nach dem Compilieren den Code im Binary suchst und encryptest. Wichtig: an die relocatables denken.
@ardi: Aber laut google ist das nicht zu 100% koscher...
Wenn du nach der Codeänderung auch immer den Cache leerst ist das alles kein Problem und 100% koscher (zumindest auf der PSP).
Unter z.B. Linux ist das Problematisch, wenn z.B. ein Programm 2x läuft. Da können sich die 2 Instanzen das gleiche text-Segment teilen und haben nur unterschiedliche data- und bss-Segmente. Oder das text-Segment ist nur Readonly.
ardi
Du vergisst eines. Man kann ohne Probleme decrypt hooken, um nach dem Entschlüsseln den entschlüsselten Code in eine Binärdatei zu speichern.
Verändern kann man dann den Code auch einfach: Decrypt hooken, Adressen in den Argumenten testen, falls es der gewünschte Abschnitt des Codes ist nach dem Decrypten den Code verändern und den encrypt und den decrypt Aufruf mit NOPs überschreiben.
Beispiel... sagen wir mal, die Geheim-Funktion ist sub_00000000 und schaut so aus (natürlich nicht in echt so):
0x00000000: addiu $sp, $sp, -4
0x00000004: sw $ra, 0($sp)
0x00000008: li $a0, 0x14
0x0000000C: jal decrypt
0x00000010: li $a1, 0x24
0x00000014 - 0x000000024: ; Geheim
0x00000028: li $a0, 0x14
0x0000002C: jal encrypt
0x00000030: li $a1, 0x24
0x00000034: lw $ra, 0($sp)
0x00000038: addiu $sp, $sp, 4
0x00000040: ; hier beginnt decrypt
Man könnte jetzt folgendes machen:
u32 text_addr;
void (* decrypt) (void *begin, void *end);
void decrypt_Patched(void *begin, void *end)
{
/* Argumente überprüfen */
if((begin == text_addr + 0x14) && (end == text_addr + 0x24))
{
/* Funktion decrypten */
decrypt(begin, end);
/* Datei zum dumpen öffnen, dies braucht man natürlich nur einmal machen */
SceUID fd = sceIoOpen("ms0:/dump.dmp", PSP_O_RDWR | PSP_O_CREAT | PSP_O_TRUNC, 0777);
if(fd >= 0)
{
/* Entschlüsselte Funktion in die Datei schreiben */
sceIoWrite(fd, begin, (end - begin));
sceIoClose(fd);
}
/* Hier die Funktion beliebig modifizieren (den geheimen Code kann man ja in der dump.dmp einsehen) */
/* Decrypt-Aufruf deaktivieren, wir wollen den Code ja nicht doppelt entschlüsseln */
_sw(0, text_addr + 0x0x000C);
/* Caches lehren */
ClearCaches();
}
return;
}
int OnModuleStart(SceModule2 *mod)
{
if(strcmp(mod->modname, "der_Modulname") == 0)
{
/* Text_addr speichern, damit wir nachher die Argumente testen können */
text_addr = mod->text_addr;
/* Originaladresse von decrypt speichern, brauchen wir ja nachher */
decrypt = (void *)text_addr + 0x0040;
/* Den decrypt-Aufruf auf decrypt_Patched umlenken */
MAKE_CALL(text_addr + 0x000C, decrypt_Patched);
/* Den encrypt-Aufruf deaktivieren */
_sw(0, text_addr + 0x002C);
/* Caches lehren */
ClearCaches();
}
return (prev ? prev(mod) : 0);
}
int module_start(int args, void *argp)
{
prev = sctrlHENSetStartModuleHandler(OnModuleStart);
return 0;
}
Diese Blockade ist also (wenn ich deine Idee richtig verstanden habe) ebenso leicht umgänglich wie alle anderen.
Geht auf zitieren und schaut euch den Code da an (kopiert in nen Editor)... im Forum werden einize Zeichen nicht korrekt angezeigt.
mfg
Dieser Beitrag wurde zuletzt bearbeitet: 08.06.2011 13:54 von HacKmaN.
|
|
08.06.2011 13:49 |
|
Folgende User bedanken sich: |
|
ardi
Halbprofi
Beiträge: 114
Gruppe: User
Registriert seit: Feb 2011
Status:
Abwesend
Danke erhalten: 244
|
RE: Homebrew vor Cheatern schützen
Diese Blockade ist also (wenn ich deine Idee richtig verstanden habe) ebenso leicht umgänglich wie alle anderen.
100% gibt es nicht. Das weiß ich schon. Es ging darum den Cheatern die Sache zu erschweren. Ein Standard-Cheating-Tool ist damit (denke ich) schon überfordert.
Und wenn die Sache noch geschachtelt wird, also im decryptetem Block liegt wieder ein encrypteter usw. wirds noch schwieriger.
Man kann auch noch mehr Aufwand betreiben ...
... muß das ein wahnsinniges Hombrew sein --- ich kann es kaum aushalten. Wan wird released???
ardi
|
|
08.06.2011 14:01 |
|
Folgende User bedanken sich: |
|
Jonny0815
King
Beiträge: 2.906
Gruppe: User
Registriert seit: Mar 2010
Status:
Offline
Danke erhalten: 1320
|
RE: Homebrew vor Cheatern schützen
also ein votekick/ban ist am aller effektivsten
und wieso sollte der mac-ban umgangen werden können ?
falls du meinst spoofer ? ... nene der ändert nur das was angezeigt wird wirklich ändern kann man die mac-adresse nicht die ist in der netzwerkkarte eingetragen (oder ? Ò_ó)
Jonny0815
|
|
08.06.2011 14:02 |
|
|
|
HacKmaN
Ex-Developer
Beiträge: 2.423
Gruppe: User
Registriert seit: Oct 2009
Status:
Offline
Danke erhalten: 3319
|
RE: Homebrew vor Cheatern schützen
Diese Blockade ist also (wenn ich deine Idee richtig verstanden habe) ebenso leicht umgänglich wie alle anderen.
100% gibt es nicht. Das weiß ich schon. Es ging darum den Cheatern die Sache zu erschweren. Ein Standard-Cheating-Tool ist damit (denke ich) schon überfordert.
Und wenn die Sache noch geschachtelt wird, also im decryptetem Block liegt wieder ein encrypteter usw. wirds noch schwieriger.
Dann führt man hier eben dasselbe durch... wiederum den Decrypt-Aufruf im entschlüsselten Block hooken und hier dasselbe machen. Mit Cheaten hab ich mich nie beschäftigt (Sony-Module sind m.M.n wesentlich interessanter xD), deshalb kann nicht nachvollziehen, wie kraftfvoll diese Cheating-Tools sind.
Aber normale Cheater, welche sich nicht wirklich mit der Materie auskennen und nur ein paar Tutorials auf Youtube angeschaut haben sind damit auf jedenfall überfordert, soviel ist klar
Insgesamt eine sehr gute Idee.
mfg
Dieser Beitrag wurde zuletzt bearbeitet: 08.06.2011 14:09 von HacKmaN.
|
|
08.06.2011 14:07 |
|
Folgende User bedanken sich: |
|
Chaosduckman
Halbprofi
Beiträge: 170
Gruppe: User
Registriert seit: May 2010
Status:
Offline
Danke erhalten: 43
|
RE: Homebrew vor Cheatern schützen
Oh, ob das Homebrew wirklich so gut ist weiß ich nicht :D
Ich arbeite nur schon 1 Jahr daran, und ich habe keine Lust, das es schon nach einem Tag den Bach runter geht ;-)
Ein Release Termin steht noch nicht fest, da meine Tester erhebliche Lücken gefunden haben *schäm* :D
Außerdem habe ich gerade eine super Seite fürs Anti-Cheating gefunden. Ihr könnt ja mal reinschauen ;-) Klick
@Jonny0815: Beim TCP/IP Protokoll kann man mit Hilfe einer "Man-In-The-Middle" Attacke und einem Raw Socket ohne Probleme die MAC-Adresse spoofen und für den Socket auf der anderen Seite ändern.
Natürlich könnte ich auch die MAC Adresse bei meinem Homebrew auslesen, aber wer schützt mich dort vor einem Hook mit falschen Informationen? :D
Also ich habe schon ein Votekick System in Arbeit. Trozdem sollte es nur eine Notlösung sein, da es echt nervt alle 5 Minuten, bei einem Mapchange oder so, die neuen Cheater zu kicken. Dann will das Gewinnerteam auch nicht den Cheater kicken usw. Vielleicht kennst du das Game Crossfire? :D Dort ist alles voller Hacker und es ist selbst mit Votekick nicht mehr schön ;-)
@ardi/HacKmaN: Wow, ihr macht euch ja richtig Gedanken =)
Finde ich super von euch, verteile gleich mal Thanks :D
Ich fand den Ansatz von ardi garnicht so schlecht. Das würde No0b Cheater abhalten mit ihren Memory Editoren in meinem Programm rumzupfuschen :D
PS: Was haltet ihr von Checksummen, die auf dem GameServer ausgewertet werden?
Man könnte dazu einfach in regelmäßigen Abständen eine Checksummen wichtiger Teile meines Programms erstellen und diese zum Server senden. Um das ganze für Cracker ein bisschen schwieriger zu machen könnte man vor jeder neuen Checksumme einen zufälligen Salt vom Server empfangen und damit dann die neue Checksumme bilden. Der Server erstellt synchron eine eigene Checksumme und gleicht dann beide ab. Sollten sie nicht übereinstimmen fliegt der Spieler vom Server.
Edit: Ich fasse mal zusammen was wir so haben, verliere nämlich langsam den Überblick :D
- Module Blackliste; Durch vergleichen aller geladenen Module mit einer Blackliste; Post & Post
- AntiHook; Durch überprüfen der Entry Tables des exportierenden Modules; Post
- "Verstreuen" des Codes; Programmcode an bestimmte Orte legen; Post
- Sicherheitsvariablen; Durch Überprüfen von bestimmten Werten; Post
- Vote Kick Recht von Spielern; Post
& Post
- Kick Recht ohne Vote vom Host/Admin; Post
- Spieler nur in Spielpausen, z.B. wenn eine Map geändert wird oder so, auf den Server lassen; Post
- Paketfilter; Post
- Verschlüsselung des Netzwerkverkehrs**; Post
- Account Ban, sprich Spieler verliert alle seine Errungenschaften; Post
- IP Bans*; Post
- MAC Bans*; Post
- GUID Bans*; Post
- Verschlüsselung von Teilen des Codes; Durch einen doppelte Stromchiffre; Post
*Wobei man alle Daten leicht fälschen/ändern kann.
**Angreifbar duch Man-In-The-Middle Angriffe.
Dieser Beitrag wurde zuletzt bearbeitet: 08.06.2011 15:07 von Chaosduckman.
|
|
08.06.2011 14:31 |
|
Folgende User bedanken sich: |
|
|