Entwickler-Ecke

Sonstiges (Delphi) - Was macht Result?


spoof - So 10.11.13 01:11
Titel: Was macht Result?
Ich hab eine Frage, wo man denken könnte google doch oder wie auch immer was ich auch gemacht hab aber ich versteh es einfach nicht.
Was macht dieses Tag Result? Ich hab es nun schon öfters gesehen aber versteh es nicht. Es wird niergends deklariert sondern einfach benutzt, was kann dieses Result und wo setzt man es ein?


Delete - So 10.11.13 01:44

Result ist eine lokale Variable innerhalb jeder Funktion, die deren Endergebnis aufnimmt. Statt Result := ErrechneterWert; könntest auch schreiben MeineFunktion := Errechneter Wert;.


spoof - So 10.11.13 12:19

Hab ich das richtig verstanden, bei folgendem Code(Hardwareid):


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:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function getHWID(): String;
var
SerialNum,A,B: DWord;
C: array [0..255of Char;
Buffer: array [0..255of Char;
begin
if GetVolumeInformation(pChar('C:\'), Buffer, 256, @SerialNum, A, B, C, 256then
  Result := inttostr(SerialNum * Cardinal(-1))                 //Dieses Result bestimmt den wert von getHWID?
else Result := '';       
end;

function RC4(Expression, Password: string): string;
var
  RB : array[0..255of Integer;
  X, Y, Z: longint;
  Key : array of byte;
  ByteArray : array of byte;
  Temp: byte;
  Counter: integer;

begin
  If (Length(Expression) = 0then Exit;
  If (Length(Password) = 0then Exit;
  If (Length(Password) > 256then Password := Copy(Password, 1256);
  SetLength(Key, Length(Password));
  for Counter := 0 to Length(Password) - 1 do
    Key[Counter] := ord(Password[Counter + 1]);
  for X := 0 to 255 do
    RB[X] := X;
  X := 0; Y := 0; Z := 0;
  for X := 0 to 255 do
  begin
    Y := (Y + RB[X] + Key[X mod Length(Password)]) mod 256;
    Temp := RB[X];
    RB[X] := RB[Y];
    RB[Y] := Temp;
  end;
  X := 0;
  Y := 0;
  Z := 0;
  SetLength(ByteArray, Length(Expression));
  for Counter := 0 to Length(Expression) - 1 do
   ByteArray[Counter] := ord(Expression[Counter + 1]);
  for X := 0 to Length(Expression) do
  begin
    Y := (Y + 1mod 256;
    Z := (Z + RB[Y]) mod 256;
    Temp := RB[Y];
    RB[Y] := RB[Z];
    RB[Z] := Temp;
    ByteArray[X] := ByteArray[X] xor (RB[(RB[Y] + RB[Z]) mod 256]);
  end;
  for Counter := 0 to Length(Expression) - 1 do
  begin
    Result := Result + chr(ord(ByteArray[Counter]));   // Hier wird durch das Result bestimmt welchen wert die Funktion RC4 hat?
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
       Edit1.text:= getHWID;        // Hier nimmt mein edit den wert der Funktion getHWID an
end;

end.


Mit Button Click steht im Edit der Wert von getHwid, das Programm nimmt also das Result von getHwid. Erstmal stimmt das?
Dann, wo springt das Programm in den RC4 Code? Denn durch das Edit wird doch das getHWID ausgelesen aber ich seh im getHWID nicht dass er in RC4 springt wie macht das tool das?


Delete - So 10.11.13 12:40

user profile iconspoof hat folgendes geschrieben Zum zitierten Posting springen:
Mit Button Click steht im Edit der Wert von getHwid, das Programm nimmt also das Result von getHwid. Erstmal stimmt das?

Genau: Result ist lediglich eine Kopie des Rückgabewertes der Funktion. Die Variable Result steht automatisch in allen Funktionen zur Verfügung und muß nicht deklariert werden.

user profile iconspoof hat folgendes geschrieben Zum zitierten Posting springen:
Dann, wo springt das Programm in den RC4 Code? Denn durch das Edit wird doch das getHWID ausgelesen aber ich seh im getHWID nicht dass er in RC4 springt wie macht das tool das?

Innerhalb des Code-Auszugs, den du hier gepostet hast, nirgends. Wieso erwartest du, daß in der Funktion getHWID die Funktion RC4 aufgerufen wird? Die wird doch zum Ermitteln der Seriennummer eines Datenträgers gar nicht benötigt.

Wenn dir der gesamte Quelltext vorliegt, kannst du entweder im Delphi-Editor oder in jedem beliebigen Texteditor nach RC4 suchen und findest dann womöglich die Stelle im Programm, an der die Function RC4 aufgerufen wird. Ansonsten:

Hier gibt es Grundlagen-Tutorials [http://www.delphi-treff.de/tutorials/grundlagen/].
Auch die Uni Leipzig bietet ein Delphi-Tutorial [http://www.math.uni-leipzig.de/pool/tuts/Delphi/index.htm].
Es gibt sogar ein entsprechendes Wikibook [http://de.wikibooks.org/wiki/Programmierkurs:_Delphi].
... und noch viel mehr via Google [https://www.google.de/search?num=100&newwindow=1&safe=off&site=&source=hp&q=Delphi%2BGrundlagen&oq=Delphi%2BGrundlagen&gs_l=hp.3..0i30l3j0i8i30l4.1481.5073.0.6926.17.17.0.0.0.0.227.1772.7j9j1.17.0....0...1c.1.31.hp..5.12.917.7RjPVQWbCuE] zu erkunden :lol:


spoof - So 10.11.13 13:50

Die Sache is die, das is der Gesamte Code xD
Deswegen wunder ich mich ja wo die Function RC4 benutzt wird :D

Aber wenn ich jetz anstelle von getHWID, RC4 anspreche beim Button, dann schreibt er mir:
Nicht genügend wirckliche Parameter.

Was meint er damit?

Ich sollte dazusagen dass das ein copypasted Hardwareid code ist, also ich versuche den atm erstmal zu verstehen, ich dachte die Fuction RC4 wäre für die Verschlüsselung zuständig.

Edit: Ok es liegt glaub ich an
function RC4(Expression, Password: string): string;
an Expression, Password: string
Die 2 variablen müssen wohl erstmal verwendet werden bevor sie in der function bearbeitet werden können wenn ich das richtig sehe.


Mathematiker - So 10.11.13 14:10

Hallo,
eigentlich wollte ich mich nicht äußern, da ich keine Lust habe, mich durch Deine katastrophale Rechtschreibung und Ausdrucksweise zu quälen, aber na ja ...
user profile iconspoof hat folgendes geschrieben Zum zitierten Posting springen:
Die Sache is die, das is der Gesamte Code xD

Dann ist der Code unvollständig. Entweder Du suchst noch einmal die Originalquelle oder Du kannst es nicht nutzen.
user profile iconspoof hat folgendes geschrieben Zum zitierten Posting springen:
Aber wenn ich jetz anstelle von getHWID, RC4 anspreche beim Button, dann schreibt er mir:
Nicht genügend wirckliche Parameter.

Das ist logisch. getHWID verlangt keine Parameterübergabe, die RC4-Prozedur

Delphi-Quelltext
1:
function RC4(Expression, Password: string): string;                    

aber zwei Strings, nämlich Expression und Password.

Es tut mir leid, Dir das sagen zu müssen, aber so wirst Du kaum etwas lernen. Dir fehlen die absoluten Grundlagen zur Verwendung von Prozeduren usw.
Arbeite Dich erst einmal durch die von user profile iconPerlsau angegebenen Tutorials durch. Hier in der EE bekommst Du natürlich auch Hilfe, aber es wäre wirklich schön, wenn Du Dir erst einmal die Grundlagen erarbeitest.

Beste Grüße
Mathematiker


Delete - So 10.11.13 17:05

@spoof

VORSICHT!
Mathematiker ist Lehrer.
Lehrer haben einen Rohrstock.
Rohrstock auf Fingerspitzen schlagen tut weh.

Lies ein DELPHI-Buch! Siehe:
http://www.downloads.delphi-treff.de/DelphiStarter.pdf