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
Willie1

Registriert seit: 28. Mai 2008
741 Beiträge
 
Delphi 10.1 Berlin Starter
 
#1

AW: Externes Programm Teil 2

  Alt 28. Jan 2018, 10: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
 
#2

AW: Externes Programm Teil 2

  Alt 28. Jan 2018, 11: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 11:58 Uhr)
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
741 Beiträge
 
Delphi 10.1 Berlin Starter
 
#3

AW: Externes Programm Teil 2

  Alt 28. Jan 2018, 15: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 16:56 Uhr)
  Mit Zitat antworten Zitat
Fukiszo
(Gast)

n/a Beiträge
 
#4

AW: Externes Programm Teil 2

  Alt 29. Jan 2018, 15: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 15:13 Uhr)
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
741 Beiträge
 
Delphi 10.1 Berlin Starter
 
#5

AW: Externes Programm Teil 2

  Alt 29. Jan 2018, 16:31
Hallo,
ich bin nur Hobby-Programmierer, da fehlen mir manchmal die Grundlagen. Ich erkenne, das der String offensichtlich 2 Bytes pro Zeichen groß ist AnsiString nur 1 Byte. Diese Erkenntnis bringt mich nicht weiter. Ich muss mein Programm von Anfang an über arbeiten, flicken geht nicht. Ich werde deine Ratschläge mit ein beziehen.

Ich gehe mir schon selbst auf due Nerven aber ich habe das Programm gestern Abend auf meinem neuen Laptop mit Windows 10 vor dem großen Update laufen lassen, alles in Ordnung. Das gibt Frust!!!

Frage an Fukiszo: Läuft Delphi 7 unter Windows 10? Ich hatte meinem Neffen Delhi 7 PE (Buch mit CD) geschenkt, er sagt, es läuft mit W10 nicht.


Eine gute Woche für euch alle
Willie
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.547 Beiträge
 
Delphi 12 Athens
 
#6

AW: Externes Programm Teil 2

  Alt 2. Feb 2018, 11:50
Frage an Fukiszo: Läuft Delphi 7 unter Windows 10? Ich hatte meinem Neffen Delhi 7 PE (Buch mit CD) geschenkt, er sagt, es läuft mit W10 nicht.
http://www.delphipraxis.net/184041-d...0-preview.html
https://www.entwickler-ecke.de/topic...n_89408,0.html
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Gollum
Gollum

Registriert seit: 14. Jan 2003
Ort: Boxberg
456 Beiträge
 
Delphi 10.1 Berlin Professional
 
#7

AW: Externes Programm Teil 2

  Alt 29. Jan 2018, 16:38
Hallo Willie,

wenn Du mit Strings statt AnsiStrings arbeitest, musst Du Deine Speicher- und Leseroutine ändern:
Delphi-Quellcode:
var
  aText:String;
  aLen :Integer;
begin
  if SDialog.Execute then begin
  // aText:=Verschluesseln1(Memo1.Lines.Text,true,true); //Zeile A
    aText:=Memo1.Lines.Text; //Zeile B
    aLen:=Length(aText);
    FS:=TFilestream.Create(SDialog.FileName,fmCreate);
    FS.Write(aLen, SizeOf(Integer));
    FS.Write(Pointer(aText)^, aLen*SizeOf(Char));
    FS.Free;
  end;
end;
Und nun, die umgekehrte Richtung:
Delphi-Quellcode:
var
  aText:String;
  aLen :Integer;
begin
  FS:=TFilestream.Create(SDialog.FileName, fmOpenRead);
  aLen:=FS.Read(aLen, SizeOf(Integer));
  SetLength(aText, aLen);
  FS.Read(Pointer(aText)^, aLen*SizeOf(Char));
  FS.Close();
end;
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
741 Beiträge
 
Delphi 10.1 Berlin Starter
 
#8

AW: Externes Programm Teil 2

  Alt 29. Jan 2018, 17:17
Hallo Gollum,
ich glaube, das ist fast die Lösung.
Mein Testbeispiel: '1234567890'
Schreiben geht in Ordnung. erst 4 Bytes für die Länge xA,0,0,0, dann 2 Bytes pro Zeichen.
Lesen noch nicht, aLen=4 Es steht '1234' da.

Willie.
  Mit Zitat antworten Zitat
Fukiszo
(Gast)

n/a Beiträge
 
#9

AW: Externes Programm Teil 2

  Alt 29. Jan 2018, 17:20
Delphi 7 Professional (32bit) schnurrt unter Windows 10 64bit, Delphi 7 Personal Edition kenn ich leider nicht.
Gollum's tipp ist sehr gut, damit sollt es auch ohne Base64 umweg klappen.

Grüße
  Mit Zitat antworten Zitat
Benutzerbild von Gollum
Gollum

Registriert seit: 14. Jan 2003
Ort: Boxberg
456 Beiträge
 
Delphi 10.1 Berlin Professional
 
#10

AW: Externes Programm Teil 2

  Alt 30. Jan 2018, 14:30
Hallo Willie,

eigentlich sollte mein Beispiel funktionieren.

Ich habe dir die Routinen als Unit angehängt.
Angehängte Dateien
Dateityp: pas Unit1.pas (920 Bytes, 8x aufgerufen)

Geändert von Gollum (30. Jan 2018 um 14:58 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 15:34 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-2025 by Thomas Breitkreuz