You last visited: Today at 16:30
Advertisement
Passwort Verschlüsselung bei Regi + Login !?
Discussion on Passwort Verschlüsselung bei Regi + Login !? within the General Coding forum part of the Coders Den category.
09/22/2011, 20:45
#1
elite*gold: 6
Join Date: Jul 2009
Posts: 88
Received Thanks: 9
Passwort Verschlüsselung bei Regi + Login !?
Hey elitepvpers,
ich habe folgendes Regi script gemach:
register.php
PHP Code:
<?php // Check if he wants to register: if (!empty( $_POST [ email ])) { // Check if passwords match. if ( $_POST [ password ] != $_POST [ password2 ]) exit( "Error - Passwärter stimmen nicht überrein. Bitte versuche es noch einmal." ); // Assign some variables. $ip = $_SERVER [ REMOTE_ADDR ]; $password = md5 ( $_POST [ 'password' ]); require_once( "connect.php" ); // Register him. $query = mysql_query ( "INSERT INTO user (email, displayName, name, password, bday) VALUES (' $_POST [ email ] ',' $_POST [ displayName ] ',' $_POST [ name ] ',' $password ',' $bday ')" ) or die ( "Error - Registrieren fehlgeschlagen." ); $query = mysql_query ( "SELECT * FROM 'user' WHERE email = ' $email '" ); if ( mysql_fetch_row ( $query )) { echo "Bitte andere Username" ; } else echo "Welcome $_POST [ username ] ! You've been successfully reigstered!<br /><br /> Please login <a href='login.php'><b>here</b></a>." ; exit(); } ?> <html> <head> <title>Registrieren</title> </head> <body> <form action="register.php" method="post"> <table width="75%" border="1" align="center" cellpadding="3" cellspacing="1"> <tr> <td width="100%"><h5>Registration</h5></td> </tr> <tr> <td width="100%"><label>Email: <input type="text" name="email" size="25" value="<? echo $_POST [ email ]; ?> "></label></td> </tr> <tr> <td width="100%"><label>Anzeige-Name: <input type="text" name="displayName" size="25" value="<? echo $_POST [ displayName ]; ?> "></label></td> </tr> <tr> <td width="100%"><label>Name: <input type="text" name="name" size="25" value="<? echo $_POST [ name ]; ?> "></label></td> </tr> <tr> <td width="100%"><label>Passwort: <input type="password" name="password" size="16" value="<? $password = md5 ( $_POST [ 'password' ]); ?> "></label></td> </tr> <tr> <td width="100%"><label>Passwort wiederholen: <input type="password" name="password2" size="16" value=""></label></td> </tr> <tr> <td width="100%"><input type="submit" value="Registrieren!"></td> </tr> </table> </form> </body> </html>
Die Login.tpl sieht so aus:
PHP Code:
<?xml version = "1.0" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Language" content="en" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>{$_title}</title> <link rel="stylesheet" type="text/css" href="{$_tpl}css/tpl_login.css" /> </head> <body> <div id="pg_center"> <div id="pg_pageframe"> <form action="index.php" method="post"> <input type="hidden" name="trytologin" value="true" /> <div id="header">Mein Projekt</div> <div id="loginTitle">{lng k='login'}</div><br/> <div id="login_area"> {if $error eq 'true'} <center><i>{lng k='login_failed'}</i></center> {/if} <table cellpadding="2" cellspacing="0" border="0"> <tr> <td style="width: 100px;"><label for="f1">{lng k='email'}:</label></td> <td><input type="text" id="f1" name="email" style="width: 251px;" /></td> </tr> <tr> <td><label for="f2">{lng k='password'}:</label></td> <td><input type="password" id="f2" name="pass" style="width: 251px;" /></td> </tr> <tr><td></td><td> <input type="checkbox" name="saveLogin" id="f3" value="true" /> <label for="f3">{lng k='login_remember'}</label> </td></tr> <tr><td></td><td style="text-align: left;"> <input type="submit" style="font-size: 10px;" value="{lng k='submit'}" /> <input type="reset" style="font-size: 10px;" value="{lng k='reset'}" /> </td></tr> </table> <div id="rights">{$_copy}</div> </div> </form> </div> </div> </body> </html>
Mein Admin-Register sieht so aus:
PHP Code:
if( $_GET [ 'action' ] == 'create' ) { if(isset( $_GET [ 'save' ]) && $_GET [ 'save' ]!= "" ) { $db = _new ( "db" ); $pw = substr ( rand (),- 4 ); $f = array( "displayName" , "name" , "password" , "email" , "notify" ); $v = array( $_POST [ 'name' ], $_POST [ 'name' ], md5 ( $pw . PASSWORDUNIQUESTRING ), $_POST [ 'email' ], 62 ); $db -> insert ( "user" , $f , $v ); $s = _new ( "session" ); $s -> changedUser (); $parser -> assign ( "title" , lang ( "creausertitle" , "mod" )); $parser -> assign ( "text" , lang ( "creausertext" , "mod" ). $pw ); $parser -> setContent ( "ls/success.tpl" ); } else $parser -> setContent ( "ls/ucreate.tpl" ); }
Nun ist mein Problem, dass wenn ich mich Registriere, wird das passwort per MD5 auf meiner Datenbank gespeichert (Login unmöglich). Wenn ich mich allerdings mit dem Admin-Script installiere, habe ich einen anderen Hash (Login möglich), ich möchte, dass man sich mit der register.php auch so installieren kann, dass der Login möglich ist.
MfG nicileie
Edit #1:
auf der Index.php wird die Datei init.php included...
In der finde ich zum Login nur folgendes:
PHP Code:
$_prefs [ 'user' ] = _new ( "user" ); $login_return = false ; if(isset( $_POST [ 'trytologin' ]) && $_POST [ 'trytologin' ] == 'true' ) { if( $_POST [ 'email' ] == "" ) $_POST [ 'email' ] = "wrong" ; if( $_POST [ 'pass' ] == "" ) $_POST [ 'pass' ] = "wrong" ; if(isset( $_POST [ 'saveLogin' ]) && $_POST [ 'saveLogin' ] == 'true' ) { $login_return = $_prefs [ 'user' ]-> login ( $_POST [ 'email' ], $_POST [ 'pass' ], true ); } else { $login_return = $_prefs [ 'user' ]-> login ( $_POST [ 'email' ], $_POST [ 'pass' ]); } define ( "LOGINSITE" , TRUE ); } else { $_prefs [ 'user' ]-> login (); } if( $_prefs [ 'user' ]-> logged ()) { define ( "UID" , $_prefs [ 'user' ]-> logged ()); } else { define ( "UID" , false ); if(! defined ( "LOGINSITE" )) define ( "LOGINSITE" , TRUE ); } if(! NOLASTACTREFRESH && UID ) { $db = _new ( "db" ); $db -> update ( "user" ,array( "lastAct" ), array( time ()), "WHERE `ID` = '" . UID . "'" ); }
und
PHP Code:
if(! defined ( "LOGINSITE" )) define ( "LOGINSITE" , false ); if(! PICFASTRENDER ) { if( LOGINSITE && ( $login_return == LOGIN_SUCCESS || $login_return == LOGIN_CKSUCCESS )) { $parser = _new ( "parser" ); if( $login_return == LOGIN_SUCCESS ) { $parser -> assign ( "cookie" , "false" ); } else { $parser -> assign ( "cookie" , "true" ); } $parser -> display ( "sites/login_success.tpl" ); exit(); } elseif( LOGINSITE && $login_return == LOGIN_FAILED ) { $parser = _new ( "parser" ); $parser -> assign ( "error" , true ); $parser -> display ( "sites/login.tpl" ); exit(); } elseif( LOGINSITE && $login_return === FALSE ) { $parser = _new ( "parser" ); $parser -> assign ( "error" , false ); $parser -> display ( "sites/login.tpl" ); exit(); } } else { if( LOGINSITE ) { echo "error no permission" ; } }
#Edit2:
Habe iregndwo gelesen, dass das in index.php gepostet wird.
Hier meine Index.php:
PHP Code:
include( "./lib/init.php" ); $parser = _new ( "parser" ); if(!(isset( $_GET [ 'action' ]) && $_GET [ 'action' ] != "" )) { $_GET [ 'action' ] = "index" ; } if( $_GET [ 'action' ] == 'index' ) { $parser -> assign ( "delresult" , "0" ); $parser -> setNav ( lang ( "changelogArchive" ), "index.php?action=archive" ); $parser -> setNav ( lang ( "chatArchive" ), "index.php?action=chatarchive" ); $parser -> setNav ( lang ( "myProfil" ), "profile.php?uid=" . UID ); $parser -> setNav ( lang ( "myAcc" , "nav" ), "myAccount.php" ); $parser -> setContent ( "ls/index.tpl" ); $parser -> display ( "index.tpl" ); } if( $_GET [ 'action' ] == 'rss' ) { $rss = _new ( "rss" , lang ( "title" , "rss" ), HTTP_ROOT , lang ( "desc" , "rss" )); $db = _new ( "db" ); $db -> saveQry ( "SELECT * FROM `#_changelog` WHERE `visible` = '0' OR `visible` = ? ORDER BY `time` DESC LIMIT 0," . eppRss , UID ); while( $row = $db -> fetch_assoc ()) { $txt = lang ( $row [ 'key' ], 'rss' ); if( $txt != '' ) { $txt = lang ( $row [ 'key' ], 'rss' ); $search =array( "%BY%" , "%NAME%" , "%REL%" , "%VAL%" ); $replace = array( $row [ 'by' ], userInfo ( $row [ 'by' ], "displayName" ), $row [ 'related' ], $row [ 'value' ]); $row [ 'value' ] = str_replace ( $search , $replace , $txt ); } $title = $row [ 'value' ]; $link = HTTP_ROOT ; switch( $row [ 'key' ]) { case CLOG_LINK : $title = lang ( "link" ). ": " . http ( urldecode ( $row [ 'value' ])); $link = http ( urldecode ( $row [ 'value' ]));break; case CLOG_PM : $link = HTTP_ROOT . "pm.php?action=read&id=" . $row [ 'related' ];break; case CLOG_GALLERY : $link = HTTP_ROOT . "gallery.php?action=view&gid=" . $row [ 'related' ];break; case CLOG_THREAD : $link = HTTP_ROOT . "board.php?action=thread&tid=" . $row [ 'related' ]. "#last" ;break; case CLOG_POST : $link = HTTP_ROOT . "board.php?action=thread&tid=" . $row [ 'related' ]. "#last" ;break; case CLOG_PROFILE : $link = HTTP_ROOT . "profile.php?uid=" . $row [ 'by' ]. "&show=profs" ;break; case CLOG_QUOTE : $link = HTTP_ROOT . "quotes.php" ;break; } $rss -> addItem ( html ( $title ), html ( $link ), $row [ 'time' ]); } $rss -> output (); } if( $_GET [ 'action' ] == 'archive' ) { $page = 1 ; $epp = eppClogArchiv ; if(isset( $_GET [ 'page' ])) { $page = (int) $_GET [ 'page' ]; } $start = ( $epp * $page )- $epp ; $cl = _new ( "changelog" ); $res = $cl -> read ( $epp , $start ); $db = _new ( "db" ); $db -> saveQry ( "SELECT COUNT(*) as `datasets` FROM `#_changelog` WHERE `visible` = '0' OR `visible` = ?" , UID ); $count = $db -> fetch_assoc (); $db -> free (); $parser -> assign ( "p_act" , $page ); $parser -> assign ( "p_epp" , $epp ); $parser -> assign ( "p_url" , "./index.php?action=archive" ); $parser -> assign ( "p_cou" , $count [ 'datasets' ]); $parser -> assign ( "log" , $res ); $parser -> setNav ( lang ( "changelogArchive" ), "index.php?action=archive" ); $parser -> setNav ( lang ( "chatArchive" ), "index.php?action=chatarchive" ); $parser -> setNav ( lang ( "myProfil" ), "profile.php?uid=" . UID ); $parser -> setNav ( lang ( "myAcc" , "nav" ), "myAccount.php" ); $parser -> setContent ( "ls/index.clog.tpl" ); $parser -> display ( "index.tpl" ); } if( $_GET [ 'action' ] == 'changeTemplate' ) { $sess = _new ( "session" ); if( $_GET [ 'tpl' ] != "" ) $sess -> changeTemplate ( $_GET [ 'tpl' ]); else $sess -> changeTemplate (); $parser -> display ( "sites/template.tpl" ); } if( $_GET [ 'action' ] == 'chatarchive' ) { $page = 1 ; $epp = eppSboxArchiv ; if(isset( $_GET [ 'page' ])) { $page = (int) $_GET [ 'page' ]; } $start = ( $epp * $page )- $epp ; $db = _new ( "db" ); $db -> saveQry ( "SELECT * FROM `#_sbox` ORDER BY `ID` DESC LIMIT " . $start . "," . $epp ); while( $row = $db -> fetch_assoc ()) { $res [] = $row ; } $db -> saveQry ( "SELECT COUNT(*) as `datasets` FROM `#_sbox`" ); $count = $db -> fetch_assoc (); $db -> free (); $parser -> assign ( "p_act" , $page ); $parser -> assign ( "p_epp" , $epp ); $parser -> assign ( "p_url" , "./index.php?action=chatarchive" ); $parser -> assign ( "p_cou" , $count [ 'datasets' ]); $parser -> assign ( "res" , $res ); $parser -> setNav ( lang ( "changelogArchive" ), "index.php?action=archive" ); $parser -> setNav ( lang ( "chatArchive" ), "index.php?action=chatarchive" ); $parser -> setNav ( lang ( "myProfil" ), "profile.php?uid=" . UID ); $parser -> setNav ( lang ( "myAcc" , "nav" ), "myAccount.php" ); $parser -> setContent ( "ls/index.chat.tpl" ); $parser -> display ( "index.tpl" ); } if( $_GET [ 'action' ] == 'changeLang' ) { $sess = _new ( "session" ); if( $_GET [ 'lang' ] != "" ) $sess -> changeLang ( $_GET [ 'lang' ]); else $sess -> changeLang (); $parser -> display ( "sites/lang.tpl" ); } ?>
09/22/2011, 21:07
#2
elite*gold: 0
Join Date: Sep 2008
Posts: 9,484
Received Thanks: 3,109
Poste mal noch die login PHP Datei.
09/22/2011, 21:26
#3
elite*gold: 6
Join Date: Jul 2009
Posts: 88
Received Thanks: 9
#added
09/22/2011, 21:30
#4
elite*gold: 0
Join Date: Sep 2008
Posts: 9,484
Received Thanks: 3,109
In beiden findet sich kein query zur überprüfung... Eventuell ist noch eine Datei darin verankert ?
09/22/2011, 21:45
#5
elite*gold: 6
Join Date: Jul 2009
Posts: 88
Received Thanks: 9
#Edit 2
#added
#Edit1:
Hast du vielleicht Teamviewer? - und könntest mir damit helfen, finde nix mehr
#Edit2:
Was gibt es noch für Verschlüsselungsarten, die 32 Zeichen lang sind?
09/22/2011, 23:16
#6
elite*gold: 0
Join Date: Jan 2009
Posts: 46
Received Thanks: 13
Sha1, oder irre ich mich ? oder meinste jetzt Verschlüsselungen... Hashs (wie es ja md5 einer ist) sind nochmal etwas ganz anderes ^^
09/22/2011, 23:21
#7
elite*gold: 115
Join Date: Oct 2007
Posts: 9,390
Received Thanks: 12,345
Quote:
Originally Posted by
nicileie
PHP Code:
$password = md5 ( $_POST [ 'password' ]);
PHP Code:
md5 ( $pw . PASSWORDUNIQUESTRING )
Das ist der Unterschied. Das zweite Script schreibt einen Salt (PASSWORDUNIQUESTRING) hinter dein Passwort und hasht es dann. Dein selbstgemachtes Script macht das nicht.
09/23/2011, 13:28
#8
elite*gold: 6
Join Date: Jul 2009
Posts: 88
Received Thanks: 9
Quote:
Originally Posted by
Metin2Spieler97
Das ist der Unterschied. Das zweite Script schreibt einen Salt (PASSWORDUNIQUESTRING) hinter dein Passwort und hasht es dann. Dein selbstgemachtes Script macht das nicht.
Schonmal danke, aber wie mache ich, das es den Salt beim Registrieren ebenfalls dahintershreibt und es dann hasht?
MfG nicileie
09/23/2011, 13:51
#9
elite*gold: 30
Join Date: Aug 2006
Posts: 110
Received Thanks: 28
PHP Code:
$password = md5 ( $_POST [ 'password' ]. $SALT );
den salt musst du dir halt vorher irgendwie organisieren, sei es durch berechnen oder auslesen aus der datenbank
09/23/2011, 13:54
#10
elite*gold: 6
Join Date: Jul 2009
Posts: 88
Received Thanks: 9
d.h. ich muss das so oder ähnlich einfügen:
PHP Code:
$salt = "PASSWORDUNIQUESTRING" ; $password = md5 ( $_POST [ 'password' ]. $SALT );
meine Register.php sieht jetzt feolgendermasen aus:
PHP Code:
<?php // Check if he wants to register: if (!empty( $_POST [ email ])) { // Check if passwords match. if ( $_POST [ password ] != $_POST [ password2 ]) exit( "Error - Passwärter stimmen nicht überrein. Bitte versuche es noch einmal." ); // Assign some variables. $ip = $_SERVER [ REMOTE_ADDR ]; $password = md5 ( $_POST [ 'password' ]. $SALT ); $salt = "PASSWORDUNIQUESTRING" ; require_once( "connect.php" ); // Register him. $query = mysql_query ( "INSERT INTO user (email, displayName, name, password, bday) VALUES (' $_POST [ email ] ',' $_POST [ displayName ] ',' $_POST [ name ] ',' $password ',' $bday ')" ) or die ( "Error - Registrieren fehlgeschlagen." ); $query = mysql_query ( "SELECT * FROM 'user' WHERE email = ' $email '" ); if ( mysql_fetch_row ( $query )) { echo "Bitte andere Username" ; } else echo "Welcome $_POST [ username ] ! You've been successfully reigstered!<br /><br /> Please login <a href='login.php'><b>here</b></a>." ; exit(); } ?> <html> <head> <title>Registrieren</title> </head> <body> <form action="register.php" method="post"> <table width="75%" border="1" align="center" cellpadding="3" cellspacing="1"> <tr> <td width="100%"><h5>Registration</h5></td> </tr> <tr> <td width="100%"><label>Email: <input type="text" name="email" size="25" value="<? echo $_POST [ email ]; ?> "></label></td> </tr> <tr> <td width="100%"><label>Anzeige-Name: <input type="text" name="displayName" size="25" value="<? echo $_POST [ displayName ]; ?> "></label></td> </tr> <tr> <td width="100%"><label>Name: <input type="text" name="name" size="25" value="<? echo $_POST [ name ]; ?> "></label></td> </tr> <tr> <td width="100%"><label>Passwort: <input type="password" name="password" size="16" value="<? $password = md5 ( $_POST [ 'password' ]); ?> "></label></td> </tr> <tr> <td width="100%"><label>Passwort wiederholen: <input type="password" name="password2" size="16" value=""></label></td> </tr> <tr> <td width="100%"><input type="submit" value="Registrieren!"></td> </tr> </table> </form> </body> </html>
Edit #1:
Das Registrieren funktioniert, dass einloggen immernoch nicht...
09/23/2011, 14:03
#11
elite*gold: 120
Join Date: Aug 2010
Posts: 7,448
Received Thanks: 2,756
den Salt must du in einem extra feld in der datenbank speichern....
wenn du dich einloggen willst musste natürlich den salt zum hashen wieder abrufen...
PHP Code:
$query = mysql_query ( "INSERT INTO user (email, displayName, name, password, bday, salt) VALUES (' $_POST [ email ] ',' $_POST [ displayName ] ',' $_POST [ name ] ',' $password ',' $bday ', 'PASSWORDUNIQUESTRING'" ) ")
Und für die Loginfunktion:
PHP Code:
$query = mysql_query ( "SELECT password, salt FROM user" ) while ( $row = mysql_fetch_row ( $query )){ if ( $row -> password == md5 ( $_POST [ 'password' ]. $row -> salt ){ echo "eingeloggt" ; break; } }
09/23/2011, 14:11
#12
elite*gold: 30
Join Date: Aug 2006
Posts: 110
Received Thanks: 28
PHP Code:
$password = md5 ( $_POST [ 'password' ]. $SALT );
$salt = "PASSWORDUNIQUESTRING" ;
erst deklarieren, dann benutzen
PHP Code:
$salt = "PASSWORDUNIQUESTRING" ;
$password = md5 ( $_POST [ 'password' ]. $SALT );
dann sollte es mit den codesnippets von xchex problemlos klappen
09/23/2011, 17:43
#13
elite*gold: 115
Join Date: Oct 2007
Posts: 9,390
Received Thanks: 12,345
Der Salt ist offensichtlich eine Konstante und muss deshalb auch nicht in der DB gespeichert werden...
09/23/2011, 18:24
#14
elite*gold: 120
Join Date: Aug 2010
Posts: 7,448
Received Thanks: 2,756
Quote:
Originally Posted by
Metin2Spieler97
Der Salt ist offensichtlich eine Konstante und muss deshalb auch nicht in der DB gespeichert werden...
wäre der salt eine konstante, wäre es unsinnig einen salt zu verwenden o.O
dachte jetzt eigentlich eher, dass der salt in diesem fall n funktionsaufruf ist, aber dann wäre er ja fehlerhaft... wirst wohl recht haben, er hats als konstante definiert....
zum generieren von salts:
PHP Code:
function random_str ( $length = "8" ) { $set =array( "a" , "A" , "b" , "B" , "c" , "C" , "d" , "D" , "e" , "E" , "f" , "F" , "g" , "G" , "h" , "H" , "i" , "I" , "j" , "J" , "k" , "K" , "l" , "L" , "m" , "M" , "n" , "N" , "o" , "O" , "p" , "P" , "q" , "Q" , "r" , "R" , "s" , "S" , "t" , "T" , "u" , "U" , "v" , "V" , "w" , "W" , "x" , "X" , "y" , "Y" , "z" , "Z" , "1" , "2" , "3" , "4" , "5" , "6" , "7" , "8" , "9" ); $str = '' ; for( $i = 1 ; $i <= $length ; ++ $i ) { $str .= $set [ mt_rand ( 0 , count ( $set )- 1 )]; } return $str ; }
zum generieren dann einfach die funktion aufrufen
für einen 8-stelligen salt
für nen salt mit anderer länge (zb nem 50 stelligen salt: )
PHP Code:
random_str ( 50 );
bevor wieder wer rummault: die funktion hab ich selber flott geschrieben, hat mich nichtmal minute gekostet (nur der array hat gedauert
)
€dit:
Metin2Spieler97, war früher Disconnect oder? Gibt ja noch so einen (Metin2Spieler98)... der taucht iwie ab und an mal wieder in der Main Section auf und hat um die 20k posts o.O
09/23/2011, 18:37
#15
elite*gold: 115
Join Date: Oct 2007
Posts: 9,390
Received Thanks: 12,345
Quote:
Originally Posted by
〤Che〤
wäre der salt eine konstante, wäre es unsinnig einen salt zu verwenden o.O
Naja, es erschwert trotzdem das Cracken eines md5-Hashes. ;O
Similar Threads
Regi Hash Verschlüsselung HELP!!
05/22/2010 - Metin2 Private Server - 5 Replies
Close Pls hat sich erledigt =)
Metin2 Verschlüsselung für Regi Page??
05/21/2010 - Metin2 Private Server - 5 Replies
Hey da ich ja in meinem anderen thread meine BETA Phase meiner Registrations Page gestartet habe brauche ich noch die verschlüsselung die Metin2 für die Authenfizierung des servers benutzt weil finden tuhe ich sie nirgendswo SHA1, MD5, Base64 und mysql_escape_string habe ich schon alles versucht aber keines davon erstellt den Hash Code "*00A51F3F48415C7D4E8908980D443C29C69B60C9&qu ot; beim erstellen auf meiner Regi Page mit dem Passwort 12345 würde mich freuen wenn ihr mir helfen könntet
MFG...
PFlyff-Server Passwort-Verschlüsselung. Welcher Art?
02/12/2010 - Flyff Private Server - 4 Replies
Hallo alle miteinander.
Erstmal großes Lob an Euer Forum, ohne es hätte ich bestimt nie meinen eigenen PServer gemacht ;).
Zum Problem das mich quält:
Ich arbeite grade an einem Webinterface zur Charerstellung/Registrierung/Verwaltung, also wo man auch Items dem Char ins Inventory packen kann, ohne immer alles mühsam in die DB einzutragen oder auch die Monsterdrops bearbeiten kann ohne Zusatzprogramme usw...
Nun habe ich das Problem, das Flyff ja einen Verschlüsselungsmechanismus...
All times are GMT +2. The time now is 16:31 .