Ergebnis 1 bis 4 von 4
  1. #1
    Gesperrt
    Registriert seit
    14.08.2008
    Beiträge
    854

    Standard [T-Tutorial] No-IP Daten auslesen

    Habe vor ca. 10 Minuten ein kleines Tutorial geschrieben.
    Ich "erkläre" euch, wie ihr mit Delphi die No-IP Daten auslesen könnt.

    Hoffe es wird euch helfen.

    'Tutorial by ghosty
    'Delphi - No-IP Daten auslesen.
    'Visit: Link entfernt da ich gerade nicht weiß ob es erlaubt ist x)

    ################################

    - Was für Funktionen benötigt werden.

    • ReadKeyToString
    • Base64 Decrypt

    ################################

    Als erstes könnt ihr euch einmal anschauen, wo ihr die Passwörter findet.
    Ruft das Ausführenfenster auf (Windows Taste + R) und gibt dort "Regedit" ein. (Ohne ")
    Nun wenn das Fenster erscheint geht ihr auf:

    -> HKEY_LOCAL_MACHINE -> SOFTWARE -> Vitalwerks -> DUC

    Dort sucht ihr dann bei "Name" nach Username, Passwort und Hosts.
    Bei "Wert" könnt ihr dann schon den Username und den/die Host/s in "Klarschrift" sehen.
    Bei dem Passwort aber seht ihr nur ein paar Buchstaben/Zahlen.
    Das liegt daran, dass das Passwort verschlüsselt ist.
    (Bei den Hosts sind 3 (?) Sonderzeichen angehangen, aber das ist jetzt erst einmal egal.)

    ################################

    Fangen wir mit dem code an.

    Als erstes erstellen wir die Funktion "ReadToString"

    Dann erstellen wir drei String Variablen. (Zum Beispiel: Username, Passwort und Hosts)
    Zudem können wir auf die Form drei Labels ziehen, um die Daten anzeigen zu lassen.

    Ihr könnt das ganze in einen "Button" schreiben oder einfach sofort in "FormCreate".

    Da wir den Username und die Hosts in Klarschrift sehen, können wir diese auch ohne weiteres auslesen.


    Das geht so: (Mit der "ReadKeyToString" Funktion)

    Username := ReadKeyToString(HKEY_LOCAL_MACHINE, 'SOFTWARE\Vitalwerks\DUC', 'Username');
    Hosts := ReadKeyToString(HKEY_LOCAL_MACHINE, 'SOFTWARE\Vitalwerks\DUC', 'Hosts');

    Da bei den Hosts nun aber die Sonderzeichen dran hängen, müssen wir diese löschen.
    Code:

    Hosts := StringReplace(Hosts,'#,','',[rfReplaceAll]); // #, wird gelöscht
    Hosts := StringReplace(Hosts,'|','',[rfReplaceAll]); // | wird gelöscht - Wobei diese denke ich als "Trenn"-Strich gedacht sind.

    Nun haben wir den Username und die Hosts schon in Klarschrift in den Variablen stehen.
    Fehlt uns also nur noch das Passwort.

    Dieses lesen wir auch zunächst einfach in die Variable ein.
    Code:

    Passwort := ReadKeyToString(HKEY_LOCAL_MACHINE, 'SOFTWARE\Vitalwerks\DUC', 'Password');

    Nun müssen wir die Base64 Decode Funktion "einbauen".


    Dann decoden wir den String "Passwort" mit folgenden Befehl:
    Passwort := Base64Decode(Passwort);

    Wenn wir das gemacht haben, haben wir auch das Passwort in einer Klarschrift in der Variable stehen.
    Das heißt wir können nun alle drei Daten in den Labels anzeigen lassen.

    Code:
    Label1.Caption := 'Username: ' + Username;
    Label2.Caption := 'Passwort: ' + Passwort;
    Label3.Caption := 'Host/s: ' + Hosts;



    Das war es auch schon, hoffe es hat euch geholfen und gefallen.
    ~ghosty
    Base64Decode
    Uses
    IdCoderMIME;

    function Base64Decode(const Text : ansiString): ansiString;
    var
    Decoder : TIdDecoderMime;
    begin
    Decoder := TIdDecoderMime.Create(nil);
    try
    Result := Decoder.DecodeString(Text);
    finally
    FreeAndNil(Decoder)
    end
    end;

    type
    TSQLiteDB = Pointer;
    TSQLiteResult = ^PAnsiChar;
    TSQLiteStmt = Pointer;
    type
    PPAnsiCharArray = ^TPAnsiCharArray;
    TPAnsiCharArray = array[0 .. (MaxInt div SizeOf(PAnsiChar))-1] of PAnsiChar;

    type
    TSQLiteExecCallback = function(UserData: Pointer; NumCols: integer; ColValues:
    PPAnsiCharArray; ColNames: PPAnsiCharArray): integer; cdecl;

    var
    Db :TSQLiteDB;
    ResString :String;
    SQLite3_Open :function(filename: PAnsiChar; var db: TSQLiteDB): integer; cdecl stdcall;
    SQLite3_Close :function(db: TSQLiteDB): integer; cdecl stdcall;
    SQLite3_GetTable :function(db: TSQLiteDB; SQLStatement: PAnsiChar;
    var ResultPtr: TSQLiteResult; var RowCount: Cardinal;
    var ColCount: Cardinal; var ErrMsg: PAnsiChar): integer;cdecl stdcall;
    SQLite3_Exec :function(db: TSQLiteDB; SQLStatement: PAnsiChar; CallbackPtr: TSQLiteExecCallback; UserData: Pointer; var ErrMsg: PAnsiChar): integer; cdecl stdcall;
    SQlite3_Free :procedure(P: PAnsiChar); cdecl stdcall;
    function ExecCallback(Sender : Pointer;
    Columns : Integer;
    ColumnValues : PPChar;
    ColumnNames : PPchar): integer; cdecl;

    var
    PVal, PName : PPChar;
    n : integer;
    sVal, sName : String;

    begin
    Result := 0;
    if Columns > 0 then
    begin
    PName := ColumnNames;
    PVal := ColumnValues;
    for n := 0 to Columns - 1 do
    begin
    sName := PName^;
    sVal := PVal^;
    if sName = 'hostname' then ResString := ResString + pVal^ + #13#10;
    if sName = 'encryptedUsername' then ResString := ResString + pVal^ + #13#10;
    if sName = 'encryptedPassword' then ResString := ResString + pVal^ + #13#10 +'.' + #13#10;

    inc(PName);
    inc(PVal);
    end;

    end;
    end;
    ReadKeyToString
    function ReadKeyToString(hRoot:HKEY; sKey:string; sSubKey:string):string;
    Var
    hOpen: HKEY;
    sBuff: array[0..255] of char;
    dSize: integer;
    begin
    if (RegOpenKeyEx(hRoot, PChar(sKey), 0, KEY_QUERY_VALUE, hOpen) = ERROR_SUCCESS) then
    begin
    dSize := SizeOf(sBuff);
    RegQueryValueEx(hOpen, PChar(sSubKey), nil, nil, @sBuff, @dSize);
    Result := sBuff
    end;
    RegCloseKey(hOpen);
    end;
    Hier der Download der Textdatei(en). (Falls ihr dir Entschlüsselung wegen der Smilies nicht kopieren könnt.
    http://www.file-upload.net/download-...orial.rar.html

  2. #2
    Tron Avatar von gORDon_vdLg
    Registriert seit
    23.07.2007
    Beiträge
    801

    Standard

    da wären es weniger zeilen gewesen wenn man den base64 decoder selber geschrieben hätte... der ist richtig einfach, nur n paar bits verschieben unso... da braucht man ja kein sqlite für, und vor allem wäre das wesendlich platzsparender in der executable. genau das selbe hab ich nämlich auch mal programmiert

  3. #3
    Stanley Jobson Avatar von GregorSamsa
    Registriert seit
    23.08.2008
    Beiträge
    729

    Standard

    Dem kann ich mich nur anschließen - wieso greifst du auf SQLite zurück? Das ist nun wirklich etwas "overloaded"

  4. #4
    Fortgeschrittener
    Registriert seit
    21.07.2008
    Beiträge
    49

    Standard

    und was ist wenn man ein proxy zwischenschalten tut?

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •