Autor Beitrag
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: Do 17.07.08 15:38 
Einfach typecasten: TBigpass(Wort)

Edit: ich sehe gar keine Variable namens 'Wort'.. außerdem ist bigpass ein String.. Sollte es sich um String und Array handeln und du a b zu weisen willst, musst du b nach a typecasten: a := TA(b) //TA = typ von a..

@oben: müsste es nicht ein packed record sein?

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
Allesquarks
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 510

Win XP Prof
Delphi 7 E
BeitragVerfasst: Do 17.07.08 15:57 
Das beste wäre wohl du deklarierst direkt wort als ein pchar oder array of character. Ganz dirty auf deine Weise könntest du auch mychararray=@wort[1]; Aber dann mixt du auf dem gleichen Speicherbereich nen string und nen array und die sehen leider ausserhalb der reinen Buchstabenfolge nicht gleich aus. Solange du nur liest, würde das wahrscheinlich sogar gehen. Ich würde dir aber raten das so nicht zu machen. Kopier lieber einmal initial Buchstabe für Buchstabe in dein array rüber. Nebenbei für pchar bietet delphi glaube ich sogar ein wenig Compilermagic. Könnte also sein, dass wenn du edit1.text:=mypchar machst der das intern so auflöst dass das funktioniert, dann würdest du noch nichtmal die Bequemlichkeit der strings vermissen.
walter_b Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 135

Windows Vista/XP
Delphi 6
BeitragVerfasst: Do 17.07.08 16:08 
user profile iconHidden hat folgendes geschrieben:
Einfach typecasten: TBigpass(Wort)

Edit: ich sehe gar keine Variable namens 'Wort'.. außerdem ist bigpass ein String.. Sollte es sich um String und Array handeln und du a b zu weisen willst, musst du b nach a typecasten: a := TA(b) //TA = typ von a..




So sieht der Spass im Moment aus. Direkt nach dem End der While-Schlaufe könnte man mit writeln(wort); alle Kombinationen laufend auslesen lassen. Und Wort ist auch oben bei den Variabeln als String definiert. bigpass wurde neu zu einem Array umgeformt. Jetzt würde ich halt gerne den Wert des Strings in den Array packen. Wenn ich bigpass statisch definiere, dann erreiche ich mit der aktuellen Konfiguration für 1 Mio Kombinationen um die 20ms herum. Diese statische Definition verbraucht einen grossen Teil dieser 20ms selbst. Wenn ich das jetzt noch so dynamisch reinschreiben lassen könnte, dann wäre die Zeit bisher wirklich wunderbar!

(Das ganze Programm sollte eine Zeit von ca. 1 Sekunde für 4 Mio Kombinationen erreichen, dann wäre ich glücklich ;)).

Also falls jemand eine möglichst schnelle Lösung für das Reinschreiben hat, dann bitte posten. :)


Edit: Bei TBigpass(Wort); kommT: Undeclared identifier: 'TBigpass'



user profile iconAllesquarks hat folgendes geschrieben:
Nebenbei für pchar bietet delphi glaube ich sogar ein wenig Compilermagic. Könnte also sein, dass wenn du edit1.text:=mypchar machst der das intern so auflöst dass das funktioniert, dann würdest du noch nichtmal die Bequemlichkeit der strings vermissen.

Ich arbeite in einer Consolen-Applikation, also kein edit1 ;) Und wegen der Strings: Es geht mir nicht um die Bequemlichkeit, sondern ich strebe nach Geschwindigkeit :twisted:


Zuletzt bearbeitet von walter_b am Mo 04.08.08 14:44, insgesamt 1-mal bearbeitet
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: Do 17.07.08 16:21 
Zitat:
Edit: Bei TBigpass(Wort); kommT: Undeclared identifier: 'TBigpass'

:lol:

ausblenden Gemeint war:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
type
  TBigPass = Array[0..13] of Char;

procedure DoSomething;
var
  BigPass: TBigPass;
  Wort: String;
begin
  BigPass := TBigPass(Wort);
  Wort := String(TBigPass);
end;


Ich wiederhols nochmal: Müsste es nicht ein packed record sein? Sonst wäre nicht sichergestellt, dass die Daten auch direkt hintereinander stehen und beim typecasten könnte ganz schöner Mist passieren..

mfG,

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
Tilman
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: Do 17.07.08 16:24 
user profile iconHidden hat folgendes geschrieben:

Ich wiederhols nochmal: Müsste es nicht ein packed record sein? Sonst wäre nicht sichergestellt, dass die Daten auch direkt hintereinander stehen und beim typecasten könnte ganz schöner Mist passieren..

mfG,


Kann sein - davon habe ich keine Ahnung. Probiers aus ;)

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
walter_b Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 135

Windows Vista/XP
Delphi 6
BeitragVerfasst: Do 17.07.08 16:25 
Ach soooh, sorry :D Habe das jetzt geändert und es erscheint ein Invalid typecast auf der Zeile von BigPass := TBigPass(Wort);
walter_b Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 135

Windows Vista/XP
Delphi 6
BeitragVerfasst: Do 17.07.08 16:29 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
Type
  T7 = array[0..7] Of Byte;
  P7 = ^T7;

Var
  p : Integer;
begin
  SetLength (anf,7);
  setLength (ende,7);
  p := integer (@bigpass[1]);
  P7(@anf[1])^  := P7(p)^;
  P7(@ende[1])^ := P7(p+7)^;
End;


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
type tMyStr = record
case boolean of
  true: (str: array[1..14] of Char;);
  false: (anfang: array[1..7] of Char; ende: array[1..7] of Char;);
end;

var
  a: tMyStr;
[..]
    a.str :='helloworld0000';
    // a.anfang = anfang
    // a.ende = ende


Welchen der beiden soll ich jetzt verwenden? :?!?:
Tilman
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: Do 17.07.08 16:29 
user profile iconwalter_b hat folgendes geschrieben:
Ach soooh, sorry :D Habe das jetzt geändert und es erscheint ein Invalid typecast auf der Zeile von BigPass := TBigPass(Wort);


Ja dasselbe hatte ich vorhin auch schon. Irgendwie mag Delphi scheint's das casten von arrays nicht so gerne.

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: Do 17.07.08 16:32 
hmm.. Probier mal, TBigPass(Pointer(Wort))

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
walter_b Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 135

Windows Vista/XP
Delphi 6
BeitragVerfasst: Do 17.07.08 16:35 
user profile iconHidden hat folgendes geschrieben:
hmm.. Probier mal, TBigPass(Pointer(Wort))

Invalid typecast
Allesquarks
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 510

Win XP Prof
Delphi 7 E
BeitragVerfasst: Do 17.07.08 17:15 
Hm ist die Funktion decodeTxt von dir. Weil wenns so ist würde ich die einfach anpassen, dass die auch mit diesen "neuen" Datentypen umgehen können. Wenn dem nicht so ist musst du das wohl oder übel in einen String bringen. Deshalb wird es wahrscheinlich von Erfolg gekrönt sein, wenn du über string() typecastest. Ich vermute aber, dass wegen des anderen Layouts intern das dann unweigerlich zu Laufzeitfehlern führt. Da wäre dann wohl auch pchar geeigneter als ein array (obwohl es das ja fast ist), weil delphi dann mit Compiler-Magic das für dich hinbiegt.
walter_b Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 135

Windows Vista/XP
Delphi 6
BeitragVerfasst: Do 17.07.08 17:49 
Dies ist die DecodeText-Funktion. Und nein, sie ist nicht von mir, sondern bezieht sich auf eine Verschlüsselung im DEC. Hm... Irgendwie sollte man dies schon hinbringen, die umzuschreiben, denke ich mal.
Oder wäre es doch einfacher, den Array in einen pchar umzuwandeln? Wie sieht es mit der Geschwindigkeit aus?


Zuletzt bearbeitet von walter_b am Mo 04.08.08 14:45, insgesamt 1-mal bearbeitet
walter_b Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 135

Windows Vista/XP
Delphi 6
BeitragVerfasst: Do 17.07.08 18:04 
Ich habe das ganze jetzt gleich mal angepasst, dass auch die #0 am Ende angehängt werden.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
procedure Gen();
type
  T7 = array[0..7] Of Byte;
  P7 = ^T7;
  TBigPass = Array[0..13] of Char;

var
  X, Y, prev, val, bp, I, p:  Integer;
  Wort, binlm, ret, part, wortchen:  String;     // Direkt String
  BigPass: TBigPass;
  fChar: PChar;
  Len : Integer;

[...]
        inc(Wort[Y]);
      Wort[Y - 1] := 'A';
    end;
    Len := Length(Wort);
    SetLength(Wortchen, Len+14);
    wortchen:=Wort;
    FillChar(Wortchen[Len+1], 14, #0);

[...]


Wortchen enthält hier die aktuelle Kombination. Jeodch wäre jetzt wieder das selbe Problem mit dem typecasten in den Array.


Edit: das ganze ist zu langsam!
Allesquarks
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 510

Win XP Prof
Delphi 7 E
BeitragVerfasst: Do 17.07.08 18:07 
Hm möglich das umzuwandeln ist das schon es ist nur die Frage mit welchem Aufwand. Die DecodeText abzuändern bringt insofern wahrscheinlich auch wenig, da ja init(key) dann einen String erwartet und den musst du nunmal liefern.
Hm du übergibst ja zwei strings anf und ende. Kannst du nicht deine Schleifen oben zerfleischen, so dass die da nicht in einem string stehen müssen. Ich meine, dass du in der ganzen Funktion mit den beiden (anf/ende) arbeitest. Meiner Meinung müsste das gehen.
Ich kenn leider den genauen Aufbau von string nicht, deshalb weiß ich auch nicht, was da der Compiler beim casten einsparen kann, würde dir aber dringend empfehlen auf pchar zu gehen anstatt array of char, weil das ist dem string glaube ich näher.
walter_b Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 135

Windows Vista/XP
Delphi 6
BeitragVerfasst: Do 17.07.08 18:11 
Ich habe nicht genau verstanden, in welcher Schlaufe du meinst. Meinst du nachher den Teil mit bp, val und prev? Dort willst du anf und ende zusammenlassen?

Ich werde mal schauen, was mich mit pchar machen kann.


Edit: Ich habe gerade was gefunden... würde es helfen, wenn die Kombination in Wort gespeichert ist und wort als "array of char" definiert ist? Oder kriege ich nachher einfach das Problem, dass ich die #0 nicht mehr anhängen kann?
Allesquarks
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 510

Win XP Prof
Delphi 7 E
BeitragVerfasst: Do 17.07.08 18:29 
Ok es gibt mannigfaltige Möglichkeiten! Ich glaube die eleganteste hatten wir aber noch nicht. Das ist ja ganz offensichtlich eine DES entschlüsselung. Ihc nehme mal an die gibts wie Sand am Meer in Open Source.
Wenn ich das richtig sehe baust du dir mit den Schleifen irgendwelche Schlüssel in Hex zurecht? Am schnellsten wäre es die Schlüssel direkt binär zu bauen und sich das init zu sparen, sondern direkt in den Key-Slot des DES Algorithmus zu schreiben.

Und zu deiner Frage:
Und ja wort direkt zu nem array of char zu machen bringt vlt was. Das Problem ist vielmehr das auseinanderrupfen in anf und ende, denn das musst du machen, solange das init den Key als string erwartet (wobei in diesem speziellen Fall vermute ich, dass es nicht einmal etwas bringen würde, wenn init pchars akzeptiert).

Edit: Ok mein Irrtum du erzeugst doch nicht hex sondern klartext passwörter. Frage: wie groß ist die Schlüssellänge und wie werden aus den Passwörtern die Schlüssel berechnet? md5 sha? Und brauchst du nur die binär keys am Ende oder die Passwörter?
walter_b Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 135

Windows Vista/XP
Delphi 6
BeitragVerfasst: Do 17.07.08 19:01 
Es wird folgende Verschlüsselung angewandt:

mcrypt_ecb(MCRYPT_DES, $a, "KGS!@#$%", MCRYPT_ENCRYPT)


Zuletzt bearbeitet von walter_b am Mo 04.08.08 14:45, insgesamt 1-mal bearbeitet
walter_b Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 135

Windows Vista/XP
Delphi 6
BeitragVerfasst: Do 17.07.08 19:12 
Yes, ich habe das Teil gefitzt ;) Man muss den 14-stelligen String nicht mehr aufteilen. Wenn man ihn ganz durch die normale Funktion laufen lässt, dann bearbeitet er nur den ersten Teil des Strings. Ich habe jetzt noch eine zweite Funktion geschrieben, der nur den zweiten Teil bearbeitet, ohne dass man den String aufteilen muss.


Zuletzt bearbeitet von walter_b am Mo 04.08.08 14:45, insgesamt 1-mal bearbeitet
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Do 17.07.08 21:39 
Ein Record kann nicht direkt gecastet werden. Mann muss zuerst auf einen Pointer-Type casten, der auf diesen Record-Typ zeigt und diesen anschließend dereferenzieren ...

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Framige
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Sa 26.07.08 01:21 
Hi walter_b,
könntest du den gesamten Source zur Verfügung stellen?
Ich suche auch so etwas, allerdings in die andere Richtung.
Ich möchte einen String vorgeben und die Funktion soll mir
dafür einen gültigen LM-Hash zurückliefern.
Framige

P.S.
Und nein, ich möchte nicht den Rainbowtables Konkurenz machen,
das ganze ist für eine Hausinterne Untersuchung gedacht...