AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Externes Programm Teil 2

Ein Thema von Willie1 · begonnen am 19. Jan 2018 · letzter Beitrag vom 5. Feb 2018
Antwort Antwort
Seite 3 von 5     123 45      
Fukiszo
(Gast)

n/a Beiträge
 
#21

AW: Externes Programm Teil 2

  Alt 25. Jan 2018, 22:37
aus sicht eines betrachters: danke für die aufklärung, so hab ich es auch noch nie verwendet, eine neue möglichkeit juchu!
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
667 Beiträge
 
Delphi 10.1 Berlin Starter
 
#22

AW: Externes Programm Teil 2

  Alt 27. Jan 2018, 16:33
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.

Geändert von Willie1 (27. Jan 2018 um 17:13 Uhr)
  Mit Zitat antworten Zitat
Fukiszo
(Gast)

n/a Beiträge
 
#23

AW: Externes Programm Teil 2

  Alt 27. Jan 2018, 18:50
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.
  Mit Zitat antworten Zitat
Fukiszo
(Gast)

n/a Beiträge
 
#24

AW: Externes Programm Teil 2

  Alt 28. Jan 2018, 10:36
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.)
Angehängte Dateien
Dateityp: 7z LZMA_442b.7z (48,0 KB, 4x aufgerufen)
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
667 Beiträge
 
Delphi 10.1 Berlin Starter
 
#25

AW: Externes Programm Teil 2

  Alt 28. Jan 2018, 10:39
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.
Angehängte Dateien
Dateityp: pas PasswSafe_h-1.pas (16,4 KB, 4x aufgerufen)
  Mit Zitat antworten Zitat
Fukiszo
(Gast)

n/a Beiträge
 
#26

AW: Externes Programm Teil 2

  Alt 28. Jan 2018, 11:07
Delphi-Quellcode:
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}
du schreibst die datei nicht auf festplatte?
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
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
667 Beiträge
 
Delphi 10.1 Berlin Starter
 
#27

AW: Externes Programm Teil 2

  Alt 28. Jan 2018, 11:42
Hallo,
TFileStream.Close gibt bei meinem Delphi nicht.

Das Problem muss woanders liegen:
Delphi-Quellcode:
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;
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.
Kannst du mit diesem Wissen etwas anfangen? Bei der Konvertierung der Strings geht was schief?!.
Willie.
  Mit Zitat antworten Zitat
Fukiszo
(Gast)

n/a Beiträge
 
#28

AW: Externes Programm Teil 2

  Alt 28. Jan 2018, 12:08
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;
Angehängte Dateien
Dateityp: 7z Base64.7z (2,6 KB, 3x aufgerufen)

Geändert von Fukiszo (28. Jan 2018 um 12:58 Uhr)
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
667 Beiträge
 
Delphi 10.1 Berlin Starter
 
#29

AW: Externes Programm Teil 2

  Alt 28. Jan 2018, 16:54
Zitat:
mein tipp wäre das die memo box etwas mit deinem text anstellt (Umcodiert/Umformatiert)
Genau das vermute ich auch. Passt ja, dass es mit Delphi 2005 ohne Fehler lief.
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.

Geändert von Willie1 (28. Jan 2018 um 17:56 Uhr)
  Mit Zitat antworten Zitat
Fukiszo
(Gast)

n/a Beiträge
 
#30

AW: Externes Programm Teil 2

  Alt 29. Jan 2018, 16:05
var Txt: string, Txt = '1234567890' gespeichert wird 31003200330034003500 (Hexeitor)! (unverschlüsselt)
also 31003200330034003500 ist 1234etc als hexadezimalstring mit nullen (terminator) dazwischen soweit ich weiß, aber was weiß ich schon im vergleich zu den profi's hier.


txt:=Base64Enc(Txt); zu welcher Bibliothek gehört das.
Das gehört zu der Base64.7z von meinem obrigen anhang.
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.


Ich habe gelesen bei 32-Bit-Compiler ist string Unicode.
Das ist Delphi Versions abhängig, bei mir ist string eben kein unicode (altes Delphi 7)

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.

Geändert von Fukiszo (29. Jan 2018 um 16:13 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 5     123 45      


Forumregeln

Es 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

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz