|
Antwort |
Registriert seit: 25. Jun 2003 Ort: Thüringen 2.950 Beiträge |
#11
ok,
IV = binascii.unhexlify('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF') IV_Cipher = AES.new(Key,AES.MODE_ECB) IV = IV_Cipher.encrypt(IV) zeige mal zu deinen Testvektoren noch den IV nach IV_Cipher.Encrypt() als HEX String. Bisher konnte ich nichts reproduzieren. Ich brauch also diesen verschlüsselten IV als HEX String. Gruß Hagen EDIT: und sende mal die Vektoren für sowas wie Obj.Encrypt('Teststring'); statt über die Dateien zu arbeiten. Du hast dort noch ein Preprozessing drinnen das einen String im MIME64 bearbeitet, aus einer Datei liest usw. und bei deinen obigen Testvektoren sind am Schluß immer die zeichen $0D + $0A das sind Carrige Return und Linefeed Steuercodes die in einem sinnvollem Testvektor nichts zu suchen haben. |
Zitat |
Registriert seit: 25. Jun 2003 Ort: Thüringen 2.950 Beiträge |
#12
Davon abgesehen stimmt mit deinen Testvektoren sowieso irgendwas nicht.
Code:
Wenn man bei beiden HEX Vektoren mal die Anzahl der sich dahinter verbergenden Zeichen zusammenzält die in beiden gleich snd so komme ich auf 44 Zeichen die gleich sind. Logisch das wir gleiches Passwort ohne Zufallssalt benutzen und die gleichen Daten verschlüsseln (übrigens kryptographisch unsicher !!) falls das Passwort immer gleich ist.
696D6C5666374861645137307A6C466C
516E6F2F73736937614A616C734E4C76 5830636751345930544E5432 --334C4C6752306256646C652F77735A3246704B6E5A654F6C6E686E2F586E4C4C4A6E3D3D0D0A^ Entschlüsselt 1: CCF: [url]http://rapidshare.com/files/[/url] -- 58141435/voy402.part1.rar ------------------------------------------------------------------------------ Verschlüsselt 2: 696D6C5666374861645137307A6C466C 516E6F2F73736937614A616C734E4C76 5830636751345930544E5432 --- 304434714341456B506573524D424B4930497A7A57357A3D0D0A Entschlüsselt 2: CCF: [url]http://rapidshare.com/files/[/url] --- 91891665/D2SC.rar Nun zählen wir mal die Zeichen in deinem angeblichen String der verschlüsewlt wurde. Ich komme 33 Zeichen. Also WO zum Teufel sind die restlichen 11 Zeichen hin ? Vor deinem String "CCF:...." müssen noch 11 andere Zeichen sein, anders kann ich es mir nicht erklären. Nungut, denken wir uns mal das dieser String vor der Verschlüselung mit MIM Base 64 formatiert wurde, was ansich ja bescheuert wäre (kryptographisch betrachtet). Wenn wir einen 33 Zeichen-String in MIME64 umwandeln dann wird das Resulat im Verhältnis 3 zu 4 größer sein. Nun, 33*4/3 == ? ja 44. Edit: anders ausgedrückt, deine Testvektoren sind für den Popo und repräsentieren nicht die Daten der eigentlichen Verschlüsselung. |
Zitat |
Registriert seit: 25. Jun 2003 Ort: Thüringen 2.950 Beiträge |
#13
So, du bist mir'ne Nuss
Delphi-Quellcode:
raus kommt dann
function CCFDecrypt(const CCF: Binary; const Password: Binary): Binary;
begin with TCipher_Rijndael.Create do try Mode := cmCFB8; Init(Password); Result := DecodeBinary(CCF, TFormat_MIME64); finally Free; end; end; function CCFEncrypt(const CCF: Binary; const Password: Binary): Binary; begin with TCipher_Rijndael.Create do try Mode := cmCFB8; Init(Password); Result := EncodeBinary(CCF, TFormat_MIME64); finally Free; end; end; procedure Test; var Password, Data: Binary; begin Password := TFormat_HEX.Decode('8C35192D964DC3182C6F84F3252239EB4A320D2500000000'); Data := CCFEncrypt('CCF: http://rapidshare.com/files/58141435/voy402.part1.rar', Password); WriteLn('MIME64 : ', Data); WriteLn('HEX : ', TFormat_HEX.Encode(Data)); Data := CCFDecrypt(Data, Password); WriteLn('Data : ', Data); end;
Code:
Wie du siehst brauscht du im DEC nur die richtigen Parameter einstellen und ohne Probleme funktioniert alles. Man sollte eben wissen WAS man da eigentlich als Datenformat so macht und gleich die richtigen Testvektoren liefern.
MIME64 : imlVf7HadQ70zlFlQno/ssi7aJalsNLvX0cgQ4Y0TNT23LLgR0bVdle/wsZ2FpKnZeOlnhn/XnLLJg==
HEX : 696D6C5666374861645137307A6C466C516E6F2F73736937614A616C734E4C765830636751345930544E54323 34C4C6752306256646C652F77735A3246704B6E5A654F6C6E686E2F586E4C4C4A673D3D Data : CCF: [url]http://rapidshare.com/files/58141435/voy402.part1.rar[/url] So das kostet dich ein Bier und da ich keines trinke könntest du uns an deiner fertigen Anwendung, RapidShare Tool, partizipieren lassen. Gruß Hagen EDIT: ach übrigens ich hoffe das es positiv auffällt mit wie wenig Sourcezeilen man das Gleiche in Delphi machen kann was im PHP umständlich geht EDIT: kryptographisch betrachtet ist diese Methode Dateien zu schützen unsicher, falls das Passwort nicht jedesmal neu per Zufall gewählt wird ! |
Zitat |
Registriert seit: 13. Feb 2008 7 Beiträge |
#14
Erstmal muss ich sagen *respeckt* !
aber jetzt habe ich noch folgendes problem: mein test quelltext:
Delphi-Quellcode:
in Edit1 steht mein Passwort in HEX:
procedure TForm1.Button1Click(Sender: TObject);
var MIME64, DataList: TStringList; MeinHexString, Password: string; i: integer; begin Password := TFormat_HEX.Decode(Edit1.Text); MeinHexString:=Edit2.Text; MIME64 := TStringList.Create; DataList := TStringList.Create; MIME64.Text:=TFormat_HEX.Decode(MeinHexString); for i:=0 to MIME64.Count-1 do begin DataList.Append(CCFDecrypt(MIME64[i], Password)); end; MIME64.SaveToFile('MIME64.txt'); DataList.SaveToFile('Decrypted.txt');
Code:
in Edit2 steht mein Verschlüsselter Text in HEX:
8C35192D964DC3182C6F84F3252239EB4A320D2500000000
Code:
Welcher entschlüsselt sein soll:
696D6C5666374861645137307A6C466C516E6F2F73736937614A616C734E4C765830636751345930544E5432304434714341456
B506573524D424B4930497A7A57357A3D0D0A387447614C6C6B4F3652643148314558386B414F55664B47494E486E4F346C6F37 6C4A31777233516E7867315234455571724D3752596F2F324F3335376B2B2F5A7639304E715976425456390D0A
Code:
aber raus kommt nur die erste zeile wie sie sein soll.
CCF: [url]http://rapidshare.com/files/91891665/D2SC.rar[/url]
CCF: [url]http://rapidshare.com/files/72806508/Forum_Tools.rar[/url] Denn es sieht dann so aus:
Code:
Der text der zweiten zeile wird verstümmelt
CCF: [url]http://rapidshare.com/files/91891665/D2SC.rar[/url]
;ÂZÔ˜zùÓ-,í^[rdshare.com/files/72806508/Forum_Tools.rar Auch wenn ich 10 zeilen haben, wird nur die erste zeile richtig enschlüsselt Also, bis zu dem punkt: MIME64.Text:=TFormat_HEX.Decode(MeinHexString); stimmt noch alles, da bekomm ich 2 zeilen raus, welche ich dann jeweils einzelln decrypten müsste Das kommt raus wenn ich "MeinHexString" decodiere
Code:
und das stimmt 100% mit dem überei, was mir das python script auch ausgiebt (habe ich getestet)
imlVf7HadQ70zlFlQno/ssi7aJalsNLvX0cgQ4Y0TNT20D4qCAEkPesRMBKI0IzzW5z=
8tGaLlkO6Rd1H1EX8kAOUfKGINHnO4lo7lJ1wr3Qnxg1R4EUqrM7RYo/2O357k+/Zv90NqYvBTV9 nur dann mach Phyton das:
Code:
also jede zeile einzelln decrypten
base64.b64decode(zeile1)
obj.decrypt(zeile1) base64.b64decode(zeile2) obj.decrypt(zeile2) was wiederum für mich in delphi das ergeben würde:
Delphi-Quellcode:
mache ich das aber so, dann komm das raus:
for i:=0 to MIME64.Count-1 do
begin DataList.Append(CCFDecrypt(MIME64[i], Password)); end;
Code:
warum stimmt dann nur die erste zeile, aber die weiteren nicht?
CCF: [url]http://rapidshare.com/files/91891665/D2SC.rar[/url]
;ÂZÔ˜zùÓ-,í^[rdshare.com/files/72806508/Forum_Tools.rar [edit=Phoenix]Die lange Zeile umgebrochen wegen Layout. Mfg, Phoenix[/edit] |
Zitat |
Registriert seit: 25. Jun 2003 Ort: Thüringen 2.950 Beiträge |
#15
Weißt du was der PHP Code macht, wie er funktioniert ?
Als Hinweis: wie oft wird der Cipher erzeugt und mit einem Password gefüttert im Vergleich zu der Anzahl der Datenzeilen die man entschlüsselt ?
Delphi-Quellcode:
with TCipher_Rijndael.Create do
try Mode := cmCFB8; Init(TFormat_HEX.Decode('8C35192D964DC3182C6F84F3252239EB4A320D2500000000')); WriteLn(DecodeBinary('imlVf7HadQ70zlFlQno/ssi7aJalsNLvX0cgQ4Y0TNT20D4qCAEkPesRMBKI0IzzW5z=', TFormat_MIME64)); WriteLn(DecodeBinary('8tGaLlkO6Rd1H1EX8kAOUfKGINHnO4lo7lJ1wr3Qnxg1R4EUqrM7RYo/2O357k+/Zv90NqYvBTV9', TFormat_MIME64)); finally Free; end;
Delphi-Quellcode:
procedure CCFLoadFiles(AItems: Strings; const AFileName: String; const APassword: Binary);
var I: Integer; begin AItems.BeginUpdate; try AItems.LoadFromFile(AFileName); AItems.Text := TFormat_HEX.Decode(AItems.Text); with TCipher_Rijndael.Create do try Mode := cmCFB8; Init(APassword); for I := 0 to AItems.Count -1 do AItems[I] := DecodeBinary(AItems[I], TFormat_MIME64); finally Free; end; finally AItems.EndUpdate; end; end; procedure TForm1.ButtonClick(Sender: TObject); begin if OpenDialog1.Execute then CCFLoadFiles(ListBox1.Items, OpenDialog1.FileName, TFormat_HEX.Decode('8C35192D964DC3182C6F84F3252239EB4A320D2500000000')); end; Warum RapidShare das so verschlüsselt ist unklar. Man hätte 1.) mit einem Salt arbeiten müssen 2.) alle unverschlüsselten Zeilen als eine Zeile in einem Rutsch verschlüsseln können und dieses Resultat in einem Rutsch in MIME64 und dann nochmal in HEX umwandeln können. 3.) die Zusätzliche Umwandlung in HEX eines MIME64 String ist für den Popo und expandiert die Datenmenge nur unnötig. Es sei denn das DU diese HEX-Umwandlung eingebaut hast und in Wahrheit Rapidshare in seinen Dateien nur einfach zeilenweise MIME64 formatierte Strings enthalten. Das würde dieses ständige Umwandeln von HEX nach MIME64 erklären. Sollte das der Fall sein dann ändere oben Source um in
Delphi-Quellcode:
procedure CCFLoadFiles(AItems: Strings; const AFileName: String; const APassword: Binary);
var I: Integer; begin AItems.BeginUpdate; try AItems.LoadFromFile(AFileName); // AItems.Text := TFormat_HEX.Decode(AItems.Text); with TCipher_Rijndael.Create do try Mode := cmCFB8; Init(APassword); for I := 0 to AItems.Count -1 do AItems[I] := DecodeBinary(AItems[I], TFormat_MIME64); finally Free; end; finally AItems.EndUpdate; end; end; Gruß Hagen EDIT: erkläre uns doch mal was das eigentlich werden soll, ich möchte ungern unwissentlich in eine Straftat verwickelt werden. Davon abgesehen habe ich deine Arbeit gemacht und meine das alle hier im Forum interessierten Leute auch was davon haben sollten. EDIT: übrigens sieht man sehr schön an Hand deiner fehlerhaften Resultate wie sich der Cipher sauber selbstsynchronisert. In deinem Output ist der 1. Datenblock a 16 Bytes der 2. Zeile zerstört. Aber alle nachfolgenden Datenblöcke sind wieder richtig. Das ist die Selbstsynchronisierung des Ciphers. Der 1. Datenblock ist deshalb falsch weil des interne Feedback-Register des Ciphers, 16 Bytes, neu mit einem Password initlaisiert wurde und nicht der letzte Wert aus der vorherigen 1. Zeile weiterbenutzt wurde. Da wir immer das gleiche Passwort benutzen, für jede Zeile separat, werden alle Datenblöcke nach dem 1. Datenblock wieder korrekt entschlüsselt. Für einen erfahrenen Laien ist also an Hand deines fehlerhaften Outputs sofort ersichtlich wo der Fehler im Source liegt, man erkennt sofort das der 1. Datenblock=16 Bytes falsch sind und stellt autom. die Vermutung auf das die Daten an einem Stück verschlüsselt wurden, auch ohne das PHP Script gesehen zu haben. |
Zitat |
Registriert seit: 25. Jun 2003 Ort: Thüringen 2.950 Beiträge |
#16
So nach kurzer Recherche weiß ich nun worum es geht. Mit nachfolgendem Code kann man RapidShare Containter Dateien mit Endung .RSDF entschlüsseln. So wie ich das interpretiere benutzt Rapidshare dabei zwar eine starke AES Verschlüsselung aber im Grunde vollkommen falsch. Ein Beispiel wie man es nicht machen sollte.
1.) das Passwort scheint hardcoded zu sein, kein Wunder das Cracker dieses schnell gefunden haben. 2.) das Passwort wird nicht mit einem Zufallssalt und einer KDF (Schlüsselableitungsfunktion) in einen pseudozufälligen Sessionkey umgewandelt, naja ist bei einem hardcoded Passwort auch sinnfällig. Punkte 1. und 2. und die Tatsache das jeder Rapidshare Link immer mit 'CCIF: http://rapidshare....'' anfdangen haben die Konsequenz, das im verschlüsseltenm Resultat immer die gleichen Bytefolgen zu sehen sind. Man kann also als Angreifer, mit dem Wissen das die Dateien immer gleich anfangen, sehr schnell erkennen das ein hardcoded Passwort ohne Preprocessing des Passwortes benutzt wurde. Dazu muß man nur ein par dieser RSDF Dateien analysieren. 3.) das eigentliche Datenformat ist kompliziert und ineffizient. Man hat binäre Daten die man zeilenweise verschlüsselt und in MIME64 umwandelt obwohl sie am Stück mit einem Cipher Objekt verschlüsselt werden. Man kann also nicht beliebig eine dieser Zeile entschlüsseln ohne alle vorherigen Zeilen zu entschlüsseln. Ergo macht es auch keinen Sinn die einzelnen Zeilen separat und denoch abhängig voneinander zu verschlüsseln und in MIME64 umzuwandeln. Man hätte auch gleich die Daten in einem Rutsch verschlüsseln können. Dies wäre weit effizienter (schätze mal das dahinter ein PHP Script bei RapidShare steckt ) Die zusätzliche Umwandlung dieser Daten in das HEX Format ergibt technologisch betrachtet keinen Nutzen. Das INet kann ohne Probleme MIME64 formatierte Daten übertragen. Problematisch könnten nur die Zeilenumbrüche innerhalb dieses MIME64 String sein, wahrscheinlich auch der Grund für die Konvertierung in das HEX Format. Nur ist es eben so das diese zusätzlichen Zeilenumbrüche erst dadurch entstanden sind weil man sinnloser weise die einzelnen Dateinamen eben zeilenweise verschlüsselt und in MIME64 umgewandelt hat. Dieses ineffektive Datenformat ist also entstanden weil der Programmierer schon am Anfang einen konzeptionellen Fehler gemacht hat. An Hand dieses Datenformates kann ein Angreifer gut erkennen das in einer RSDF Datei X Links gespeichert wurden, denn es gibt X Zeilen getrennt durch Zeilenumbrüche. Nun muß man nur noch ein RSDF File anlegen in dem mehrmals ein Link auf exakt die gleiche Datei gespeichert wurde. Analysiert man dieses verschlüsselte RSDF File so gäbe es zwei Möglichkeiten. Jede der Zeilen im File besteht aus exakt dem gleichen MIME64 String oder die Strings unterscheiden sich zeilenweise. Träfe erster Fall zu so würden wir wissen das jede Zeile mit neuem Passwort und Cipher Objekt verschlüsselt wurde, also so wie es der OP gemacht hat. Träfe der zweite Fall zu dann wissen wir das zeileweise verschlüsselt wurde aber mit nur einem einmalig initialiserten Cipher Objekt, so wie es auch der Fall ist. Also allein an Hand einer beeinflussbaren RapidShare Container Datei können wir enorm viele Informationen erlangen wie was verschlüsselt wurde. Der nächste und finale Schritt ist es den verwendeten Cipher samt Mode usw. und das hardcoded Passwort per Reverse Engineering der Download Software zu knacken, wir wissen ja nun wonach wir suchen müssen. Das verwendete Dateiformat lässt also viel zu viele Informationen nach aussen dringen die es einem Angreifer leicht machen es zu knacken. Das Dateiformat ist also eine kryptographische Unsicherheit.
Delphi-Quellcode:
Damit das funktioniert müsst ihr in DECFmt.pas folgendes ändern:
procedure RSDFLoadFiles(AItems: TStrings; const AFileName: String);
const Password = #$8C#$35#$19#$2D#$96#$4D#$C3#$18#$2C#$6F#$84#$F3#$25#$22#$39#$EB#$4A#$32#$0D#$25#$00#$00#$00#$00; function DoCleanup(const Value: String): String; begin Result := System.Copy(Value, Pos('HTTP', AnsiUpperCase(Value)), MaxInt); end; var I: Integer; begin AItems.BeginUpdate; try AItems.LoadFromFile(AFileName); AItems.Text := TFormat_HEX.Decode(AItems.Text); with TCipher_Rijndael.Create do try Mode := cmCFB8; Init(Password); for I := 0 to AItems.Count -1 do AItems[I] := DoCleanup(DecodeBinary(AItems[I], TFormat_MIME64)); finally Free; end; finally AItems.EndUpdate; end; end;
Delphi-Quellcode:
Der HEX String in einer RSDF Datei enthält am Ende ein '/n' bzw. eben ein #13#10 -> Carrige Return + Linefeed. Meine originale HEX Konvertierungsfunktion hat diese Steuerzeichen nicht rausgefiltert. Logisch betrachtet ein Fehler im DEC.
class function TFormat_HEX.DoDecode(const Value; Size: Integer): Binary;
var S: PChar; D: PByte; T: PChar; I,P: Integer; HasIdent: Boolean; begin Result := ''; if Size <= 0 then Exit; SetLength(Result, Size div 2 +1); T := CharTable; D := PByte(Result); S := PChar(@Value); I := 0; HasIdent := False; while Size > 0 do begin P := TableFind(S^, T, 18); if P < 0 then P := TableFind(UpCase(S^), T, MaxInt); if P < 0 then raise EDECException.CreateFmt(sInvalidStringFormat, [DECClassname(Self)]); Inc(S); if P >= 0 then if P > 16 then begin if not HasIdent and (P < 18) then begin HasIdent := True; I := 0; D := PByte(Result); end; end else begin if Odd(I) then begin D^ := D^ or P; Inc(D); end else D^ := P shl 4; Inc(I); end; Dec(Size); end; SetLength(Result, PChar(D) - PChar(Result)); end; Gruß Hagen |
Zitat |
Registriert seit: 25. Jun 2003 Ort: Thüringen 2.950 Beiträge |
#17
Ach und nochwas
Der Cipher wird im CFB8 Modus betrieben. Das ist quasi ein Blockcipher der in einen Streamcipher umgewandelt wird. Das besondere daran ist das nun der AES ausgehend vom Passwort nur einen Schlüsselstrom aus Bytes erzeugt. Dieser Schlüselstrom wird dann mit den Daten XOR verknüpft. Das ist unsicher !! Denn nun machen wir einfach mal folgendes Experiment. Wir legen eine Rapidshare Account an und lassen ein Containerfile erzeugen das möglichst viele Links enthält. Alle Links in der gleichen Reihenfolge. Dann nehmen wir unsere Rapidshare Datei ent-HEX'en sie, und ent'MIME64 sie und verknüpfen beide Daten per XOR. Nun haben wir den Schlüsselstrom extrahiert. Da das Passwort hardcoded und unveränderlich ist, da der IV nicht per Zufall gewählt wurde und auch kein Zufallssalt eingebaut wurde, können wir diesen Schlüsselstom driekt benutzen um alle Rapidshare Dateien zu entschlüsseln. Also ohne das Passwort noch den AES Cipheralgortihmus zu kennen knacken wir alle Rapidshare Dateien. Naja, kryptographisch betrachtet also nicht besser als eine XOR Verschlüsslung oder sonstwas billiges. Merke: - Passwörter immer per Salt umwandeln - Daten nach Möglichkeit randomisieren am Anfang - nach Möglichkeit immer alle Daten am Stück verschlüsseln - niemals ein hardcoded Passwort benutzen - einen Blockcipher am besten in einem Ciphermode betreiben der auch wirklich blockweise die Daten verschlüsselt und nicht wie einen Streamcipher benutzen. Gruß Hagen |
Zitat |
Registriert seit: 13. Feb 2008 7 Beiträge |
#18
Oh mann...
Das hätte ich in nem jahr alleine nicht hinbekommen Ich denke aber auch, dass die rsdf files nur soweit "verschlüsselt" sind, damit die nicht jeder lesen kann, was wiederum eigentlich voll für'n hugo ist, aber naja dafür kann ich leider nichts
Zitat:
Der HEX String in einer RSDF Datei enthält am Ende ein '/n' bzw. eben ein #13#10 -> Carrige Return + Linefeed. Meine originale HEX Konvertierungsfunktion hat diese Steuerzeichen nicht rausgefiltert. Logisch betrachtet ein Fehler im DEC.
soll ja ne Delphi decrypting unit sein, nicht eine von php abgeleitet. Aber allgemein gesehen, weil ich ja von crypting und co NICHT annähernd soviel ahnung habe wie du, muss ich sagen, *respeckt*! Mein programm sollte ja eigentlich nur die links aus der rsdf rausfiltern und dann in ne list / datei lesbar wieder abspeichern.
Zitat:
Der Cipher wird im CFB8 Modus betrieben. Das ist quasi ein Blockcipher der in einen Streamcipher umgewandelt wird. Das besondere daran ist das nun der AES ausgehend vom Passwort nur einen Schlüsselstrom aus Bytes erzeugt. Dieser Schlüselstrom wird dann mit den Daten XOR verknüpft. Das ist unsicher !!
Naja wenn man nicht allzuviel ahnung hat, ist das auch nicht schwer und genau darum geht es ihnen denke ich. Aber egal, ich habe das kleine tool, welches ich eigentlich machen wollte man angefügt. Natürlich habe ich auch dich darin erwähnt! Sag mir was du davon hälst |
Zitat |
Registriert seit: 25. Jun 2003 Ort: Thüringen 2.950 Beiträge |
#19
Ausführbare Dateien werde ich mir nicht anschauen, verständlich oder Ich möchte dir damit keine bösen Absichten unterstellen sondern nur meinen Rechner sauber halten.
EDIT: ich schrieb
Zitat:
Der Cipher wird im CFB8 Modus betrieben. Das ist quasi ein Blockcipher der in einen Streamcipher umgewandelt wird. Das besondere daran ist das nun der AES ausgehend vom Passwort nur einen Schlüsselstrom aus Bytes erzeugt. Dieser Schlüselstrom wird dann mit den Daten XOR verknüpft. Das ist unsicher !!
Gruß Hagen http://de.wikipedia.org/wiki/Respekt |
Zitat |
Registriert seit: 13. Feb 2008 7 Beiträge |
#20
Zitat:
Ausführbare Dateien werde ich mir nicht anschauen, verständlich oder Smile Ich möchte dir damit keine bösen Absichten unterstellen sondern nur meinen Rechner sauber halten.
grml, da verschreibt man sich mal und wird gleich belehrt aber mal was anderes... Wo/wie sollte ich beim Crypting anfangen? Weil ich bin ja in dem gebiet ja ne null und würde mich da gerne mal weiterentwickeln Was muss ich verstehen usw... Hast da irgendwelche infos für mich? |
Zitat |
Ansicht |
Linear-Darstellung |
Zur Hybrid-Darstellung wechseln |
Zur Baum-Darstellung wechseln |
ForumregelnEs ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus. Trackbacks are an
Pingbacks are an
Refbacks are aus
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
LinkBack URL |
About LinkBacks |