![]() |
AW: Externes Programm Teil 2
aus sicht eines betrachters: danke für die aufklärung, so hab ich es auch noch nie verwendet, eine neue möglichkeit juchu!
|
AW: Externes Programm Teil 2
Hallo Fukiszo, Himitsu,
Verschluesseln und Entschluesseln kommen aus der DLL. Das funktioniert jetzt einwandfrei. Txt:=Verschluesseln(Txt,true,true); Txt:=Entschlusseln(Txt,true,true) liefert das korrekte Ergebnis. Die DLL läuft. Bei der Speicherung von Memo1.Lines.Text geht etwas schief. Ist Memo1.Lines.Text Unicode? Wie würdet ihr denn einen unbekannt langen String speichern/laden. Seht euch bitte nochmal meinen Quelltext an. Try except/finnally end mal außen vor! Memo1.Lines.SaveToFile kommt nicht in Frage. (Hab' ich begründet) Willie. |
AW: Externes Programm Teil 2
Ich stelle mich wiedermal zu doof an oder mein Browser ärgert mich aber ich finde keine Source Zeile die auf Memo1 verweist. Da ja der Inhalt anscheinend aus einer Memo-Box kommt ist es Inhalt mit bestimmter Länge, also definierbar/auslesbar. Bevor ich wiedermal irgendeinen code zeige (in diesem fall wie man eine datei erstellt und mit text füllt) wart ich mal ab und halte mich zurück.
Grüße Ps. Oder zeige nochmal wo in deinem code die Memo1 befüllt und dann gespeichert werden soll, ich finde es nicht. |
AW: Externes Programm Teil 2
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab hier noch eine gute LZMA Implementierung gefunden die auch auf 7z basiert.
Der Unterschied ist, es wird/kann momentan im Beispiel nur eine Datei bearbeitet werden. Die entstandene Datei entspricht der eines 7z Archiv (Dateigröße) aber es ist kein Archiv! Also die entstandene Datei ist nicht kompatibel zu irgendeinem normalen entpack Programm, du wolltest ja auf sicherheit hinaus, die wäre damit erstmal gegeben. Ich würde diese Units mit der zLib (die Delphi mit sich rumschleppt) kombinieren, zLib's Archiv Funktionen mit der 7z LZMA Technik und schon hast du dein eigenes Format und bist total unabhängig von externen .dll Dateien, alles spielt sich in deinem Source ab. In zLib wird super beschrieben wie man sowas anstellt. (zLib als Archiv Gerüst mit eigenem Kompressions-Motor) Ansonsten kannst du ja mal in der LZMAalone.pas gucken ob dir da was mit deinem Problem weiterhelfen könnte. Grüße und einen schönen Sonntag! PS: Es handelt sich um 7z's LZMA v4.42b [LZMA (Pascal) 4.42 Copyright (c) 1999-2006 Igor Pavlov 2006-05-15] Ich habe den Source lediglich um eine FreePascal deklaration erleichtert damit keine Fehler kommen. (da war eine {$MODE DELPHI} direktive an der mein Compiler nicht vorbei kam.) |
AW: Externes Programm Teil 2
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo, in einem Forum kann ich nur schreiben und wir können leider nicht mit einander reden.
Mein Programm ist fast 10 Jahre alt und ganz einfach gestrickt. In ein Memo-Feld schreibe ich meine Passwörter und PIN's, Memo.Lines.Text wird verschlüsselt, in ein mit Passwort gesichertes 7-Zip Archiv gepackt, gespeichert und umgekehr, das ist alles. Verschlüsseln und Entschlüsseln stehen in einer DLL. Wenn ihr wollt, kann ich Exe und DLL hochladen, ihr könnt das Programm ausführen. Willie. |
AW: Externes Programm Teil 2
Delphi-Quellcode:
du schreibst die datei nicht auf festplatte?
procedure TPasswords.PWSaveToFile(const s: string);
var ff: TFileStream; Dummy: array[0..2047] of Char; Buffer: string; begin if not DLLFound then Exit; try Form1.Cursor:=crHourGlass; Form1.Memo1.Cursor:=crHourGlass; Buffer:=Verschluesseln(s,true);//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< try try ff:=TFileStream.Create(TempPfad,fmCreate or fmShareDenyWrite); except Exit end; ff.Write(Buffer[1],Length(Buffer)); finally ff.Free end; if FileSetAttr(Self.Archivname,0) = 0 then RecycleFile(Self.Archivname,false,true); if SevenZipCreateArchive(Application.Handle,Archivname,'\', TempPfad,4,true,false,GPw,false) <> 0 then beep; FillChar(Dummy,SizeOf(Dummy),'X'); ff:=TFileStream.Create(TempPfad,fmCreate or fmShareDenyWrite); try ff.Write(Dummy,SizeOf(Dummy)); finally ff.Free; end; RecycleFile(TempPfad,false,true); finally Form1.Memo1.Cursor:=crDefault; Form1.Cursor:=crDefault end end; {TPasswords.PWSaveToFile}
Code:
try
try ff:=TFileStream.Create(TempPfad,fmCreate or fmShareDenyWrite); // <<-- hier versuchst du eine datei zu erstellen except Exit; // <<-- bei fehler komplett raus und alle fehler ignorieren end; ff.Write(Buffer[1],Length(Buffer)); // <<-- hier fängst du die datei zu füttern finally ff.Free; // <<-- hier machst du die datei zu ohne geschrieben zu haben end; // also in meinem delphi müsste das hier dazwischen finally ff.Close; // <<-- das könnte helfen die datei auf festplatte zu bekommen ff.Free; end; // falls das der fehler ist, wiederholst du den danach |
AW: Externes Programm Teil 2
Hallo,
TFileStream.Close gibt bei meinem Delphi nicht. Das Problem muss woanders liegen:
Delphi-Quellcode:
Nur wenn TxT: AnsiString funktioniert dieses Konstrukt!!! Bei Txt: string werden 2 Bytes pro Zeichen auf die Festplatte geschrieben, (mit einem Hexeitor überprüft). Sobald ich Zeile B durch Zeile A ersetze geht es auch dann nicht mehr.
var
Txt: AnsiString; begin if SDialog.Execute then begin // Txt:=Verschluesseln1(Memo1.Lines.Text,true,true); //Zeile A Txt:=Memo1.Lines.Text; //Zeile B FS:=TFilestream.Create(SDialog.FileName,fmCreate); FS.Write(txt[1],Length(txt)); FS.Free; end; end; Kannst du mit diesem Wissen etwas anfangen? Bei der Konvertierung der Strings geht was schief?!. Willie. |
AW: Externes Programm Teil 2
Liste der Anhänge anzeigen (Anzahl: 1)
mein tipp wäre das die memo box etwas mit deinem text anstellt (Umcodiert/Umformatiert)
wenn du etwas verschlüsselt hast, besteht die verschlüsselung aus lesbaren zeichen? falls dort nicht lesbare zeichen vorkommen kann es sein das die memo box sie verschluckt (inkompatibel) evtl vorher noch mit base64 en-/dekodieren, da kommen nur zahlen raus die jede memobox drucken kann/du problemlos weiternutzen kannst. also:
Code:
var
Txt: String; begin if SDialog.Execute then begin txt:=Verschluesseln1(Memo1.Lines.Text,true,true); // hier ist dein text jetzt in txt verschlüsselt txt:=Base64Enc(Txt); // hier wird daraus ein lesbarer string Memo1.Lines.Clear; // memo leeren Memo1.Lines.Text := Txt; // memo füllen Memo1.SaveToFile(); // <<-- da es lesbare zeichen sind, kannst du diesen befehl nutzen end; end; andersrum: Memo1.LoadFromFile(); // <<-- da es lesbare zeichen sind, kannst du diesen befehl nutzen (dein delphi kann anderen befehl haben) txt:=Memo1.Lines.Text; // <<-- hier memo in txt speichern txt:=Base64Dec(Txt); // hier wird daraus dein verschlüsselter string txt:=Entschluesseln1(txt,true,true); // <-- aufruf überprüfen, hab nur dein verschluesseln1 umbenannt Memo1.Lines.Clear; Memo1.Lines.Text := txt; // hier müsste nun dein verschlüsselter string wieder lesbar sein hier siehst du einen meiner erster startversuche um lizenzinformationen zu verschlüsseln. wie du vielleicht erkennst, nutz ich alles nur intern und gut verschachtelt. mir war damals lediglich bewusst das ich nicht alle zeichen ($00 - $FF) als text schreiben und lesen kann, deswegen der umweg per Base64. tja, so fing ich mal an....
Delphi-Quellcode:
procedure TRegUnit.btnApplyClick(Sender: TObject);
var Ini: TIniFile; begin { MessageBox(GetDesktopWindow,'Registration Data is correct. Please Restart.','Success! Please Restart.',MB_ICONINFORMATION); MessageBox(GetDesktopWindow,'Wrong Key!','Error!',MB_ICONHAND); } // only continue if some data is present if Length(edUser.Text+edCompany.Text) > 0 then // check for valid DES TRY if ( (DESEncrypt(edUser.Text+edCompany.Text,GiveIt(PassKey)) = edKey.Text) and (edValid.Text = GiveIt(edKey.Text)) ) then begin Ini := TIniFile.Create(ChangeFileExt(Application.ExeName,'.ini')); // Save Userdata Base64 scrambled and DES protected Ini.WriteString('Registration','Name',DESEncrypt(Base64Enc(edUser.Text),GiveIt(PassKey))); Ini.WriteString('Registration','Company',DESEncrypt(Base64Enc(edCompany.Text),GiveIt(PassKey))); Ini.WriteString('Registration','Serial',DESEncrypt(Base64Enc(edKey.Text),GiveIt(PassKey))); Ini.WriteString('Registration','Key',DESEncrypt(Base64Enc(edValid.Text),GiveIt(PassKey))); Ini.WriteString('Registration','CRC',DESEncrypt(Base64Enc(MD5Print(MD5StringA(edUser.Text+edCompany.Text+edKey.Text+edValid.Text))),GiveIt(PassKey))); Ini.Free; end; EXCEPT // bei irgendeiner unstimmigkeit oben einfach weitermachen, so macht man es cracker etwas schwerer da null rückmeldung kommt END; { edKey.Text := DESEncrypt(edUser.Text+edCompany.Text,GiveIt(PassKey)); edValid.Text := GiveIt(edKey.Text); } // clean up, no later usage wanted edUser.Text := ''; edCompany.Text := ''; edKey.Text := ''; edValid.Text := ''; RegUnit.Close; // RegUnit.CloseModal; end; |
AW: Externes Programm Teil 2
Zitat:
var Txt: string, Txt = '1234567890' gespeichert wird 31003200330034003500 (Hexeitor)! (unverschlüsselt) var Txt: ansistring Txt = '1234567890' dann geht's. Aber sobald ein Zeilenumbruch erfolgt, geht's wieder schief. txt:=Base64Enc(Txt); zu welcher Bibliothek gehört das. Ich habe gelesen bei 32-Bit-Compiler ist string Unicode. |
AW: Externes Programm Teil 2
Zitat:
Zitat:
Du kannst auch jede andere Base64 unit benutzen, vielleicht ist so etwas in deinem Delphi sogar von Hause aus dabei ?!?! Ich hab die nur rangehangen damit du überhaupt etwas hast. Zitat:
Aber wenn du mein Beispiel mit der Base64 nimmst, sollte alles klappen, unicode hin oder her. Grüße ps: ansonsten erstell ein rar/zip/7z archiv mit komplett source + dll und ich überarbeite es so das es funktioniert. momentan les ich nur was du da probierst aber kann's selbst nicht testen. Falls du das so machst, bearbeite im vorfeld deine passwörter.... ersetz die mit irgendwas, mir ist's egal. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz