• Earn real money by being active: Hello Guest, earn real money by simply being active on the forum — post quality content, get reactions, and help the community. Once you reach the minimum credit amount, you’ll be able to withdraw your balance directly. Learn how it works.

Delphi JDownloader Recovery [Delphi] [Fakedo0r]

Status
Not open for further replies.

BreakPoint

Im back!
User
Joined
Oct 22, 2011
Messages
118
Reputation
0
Reaction score
75
Points
28
Credits
0
‎13 Years of Service‎
40%
Permite recuperar las cuentas almacenadas en la DB de JDownloader.

Code:
>//******************************************************************************
//* 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;
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.

Fuente:UdTools


 
Status
Not open for further replies.
Back
Top