Exemplo n.º 1
0
  // @Override
  public ArrayList<DownloadLink> decryptIt(CryptedLink param, ProgressController progress)
      throws Exception {
    ArrayList<DownloadLink> decryptedLinks = new ArrayList<DownloadLink>();
    String parameter = param.toString();

    br.getPage(parameter);

    Form form = br.getForm(1);
    for (int i = 0; i <= 5; i++) {
      String code = getCaptchaCode("http://alpha-link.eu/captcha/captcha.php", param);
      form.put("captcha", code);
      form.setAction(parameter);
      br.submitForm(form);
      if (!br.containsHTML("(Code ist falsch)|(kein Code eingegeben)")) break;
    }
    form = br.getForm(1);
    String[] ids = br.getRegex("class='btn' name='id' value='(\\d+)'").getColumn(0);
    if (ids.length == 0) return null;
    progress.setRange(ids.length);
    for (String id : ids) {
      form.put("id", id);
      br.submitForm(form);

      String codedLink = br.getRegex("src=.\"(.*?).\"").getMatch(0);
      if (codedLink == null) return null;
      String link = Encoding.htmlDecode(codedLink);

      decryptedLinks.add(createDownloadlink(link));
      progress.increase(1);
    }
    return decryptedLinks;
  }
Exemplo n.º 2
0
  public ArrayList<DownloadLink> decryptIt(CryptedLink param, ProgressController progress)
      throws Exception {
    ArrayList<DownloadLink> decryptedLinks = new ArrayList<DownloadLink>();
    String parameter = param.toString();

    br.setFollowRedirects(true);
    br.getPage(parameter);
    String links[] =
        br.getRegex("href='(http://remixshare\\.com/get\\.php\\?file=.*?)'").getColumn(0);
    if (links == null || links.length == 0) return null;
    progress.setRange(links.length);
    for (String link : links) {
      decryptedLinks.add(createDownloadlink(link));
      progress.increase(1);
    }

    return decryptedLinks;
  }
Exemplo n.º 3
0
  public ArrayList<DownloadLink> decryptIt(CryptedLink param, ProgressController progress)
      throws Exception {
    ArrayList<DownloadLink> decryptedLinks = new ArrayList<DownloadLink>();

    // This site is using a somehow modified CopperMine gallery which allows
    // us to get data from the AJAX-Slideshow feature

    String albumid = new Regex(param, "thumbnails.php\\?album=([0-9]+)").getMatch(0);

    br.getPage("http://www.hi-living.de/galerie/thumbnails.php?album=" + albumid);
    String albumName = br.getRegex("<title>(.+?) - hi-living Galerie</title>").getMatch(0, 0);
    int imageCount =
        Integer.valueOf(
            br.getRegex("([0-9]+) Dateien auf [0-9]+ Seite\\(n\\)</td>").getMatch(0, 0));
    progress.setRange(imageCount);

    // Threading would give a significant speedup, but lets spend our time
    // on more important things.
    for (int i = 0; i < imageCount; i++) {
      br.getPage(
          "http://www.hi-living.de/galerie/displayimage.php?album="
              + albumid
              + "&ajax_show=1&pos="
              + i);
      String url =
          "http://www.hi-living.de/galerie/"
              + br.getRegex("\"url\":\"(.+?)\"").getMatch(0, 0).replace("\\/", "/");
      decryptedLinks.add(createDownloadlink(url));
      progress.increase(1);
    }

    FilePackage fp = FilePackage.getInstance();
    fp.setName(albumName.trim());
    fp.addLinks(decryptedLinks);
    return decryptedLinks;
  }
 // This decrypter should handle all sites using the qooy.com script!
 public ArrayList<DownloadLink> decryptIt(CryptedLink param, ProgressController progress)
     throws Exception {
   ArrayList<DownloadLink> decryptedLinks = new ArrayList<DownloadLink>();
   br.setFollowRedirects(true);
   String parameter = param.toString();
   // Only uploadmirrors.com has those "/download/" links so we need to
   // correct them
   parameter =
       parameter
           .replaceAll("(/dl/|/mirror/|/download/)", "/files/")
           .replace("flameupload.co/", "flameupload.com/");
   // Tohse links need a "/" at the end to be valid
   if (!param.getCryptedUrl().endsWith("/"))
     param.setCryptedUrl(param.getCryptedUrl().toString() + "/");
   String host = new Regex(parameter, "(.+)/(files|dl)").getMatch(0);
   // At the moment kewlfile.com is the only host in this plugin which has
   // this "kewlfile.com/rd/" links
   String id = new Regex(parameter, "files/([0-9A-Z]+)").getMatch(0);
   // This should never happen but in case a dev changes the plugin without
   // much testing he ll see the error later!
   if (host == null || id == null) {
     logger.warning("A critical error happened! Please inform the support.");
     return null;
   }
   parameter = host + "/status.php?uid=" + id;
   br.getPage(parameter);
   /* Error handling */
   if (!br.containsHTML("<img src=") && !br.containsHTML("<td class=\"host\">")) {
     logger.info("The following link should be offline: " + parameter);
     throw new DecrypterException(
         JDL.L(
             "plugins.decrypt.errormsg.unavailable",
             "Perhaps wrong URL or the download is not available anymore."));
   }
   br.setFollowRedirects(false);
   String[] redirectLinks = br.getRegex("(/(redirect|rd)/[0-9A-Z]+/[a-z0-9]+)").getColumn(0);
   if (redirectLinks == null || redirectLinks.length == 0)
     redirectLinks = br.getRegex("><a href=(.*?)target=").getColumn(0);
   if (redirectLinks == null || redirectLinks.length == 0) return null;
   progress.setRange(redirectLinks.length);
   String nicelookinghost = host.replaceAll("(www\\.|http://|/)", "");
   logger.info("Found " + redirectLinks.length + " " + nicelookinghost + " links to decrypt...");
   for (String singlelink : redirectLinks) {
     Browser brc = br.cloneBrowser();
     String dllink = null;
     // Handling for links that need to be regexed or that need to be get
     // by redirect
     if (singlelink.contains("/redirect/") || singlelink.contains("/rd/")) {
       brc.getPage(host.replace("www.", "") + singlelink);
       dllink = brc.getRedirectLocation();
       if (dllink == null) {
         dllink = brc.getRegex("<frame name=\"main\" src=\"(.*?)\">").getMatch(0);
         // For 1filesharing.com links
         if (dllink == null) {
           dllink = brc.getRegex("<iframe id=\"download\" src=\"(.*?)\"").getMatch(0);
           // For needmirror.com links
           if (dllink == null)
             dllink = brc.getRegex(">Please <a href=\"([^\"\\']+)\"").getMatch(0);
         }
       }
     } else {
       // Handling for already regexed final-links
       dllink = singlelink;
     }
     progress.increase(1);
     if (dllink == null) continue;
     if (dllink.contains("flameupload")) {
       logger.info("Recursion? " + param.toString() + "->" + dllink);
     }
     decryptedLinks.add(createDownloadlink(dllink));
   }
   return decryptedLinks;
 }
  @Override
  public ArrayList<DownloadLink> decryptIt(CryptedLink param, ProgressController progress)
      throws Exception {
    ArrayList<DownloadLink> decryptedLinks = new ArrayList<DownloadLink>();
    String parameter = param.toString();
    FilePackage fp = FilePackage.getInstance();
    br.setFollowRedirects(false);
    br.getPage(parameter);
    boolean decrypterBroken = false;
    if (decrypterBroken) return null;

    /* Error handling */
    if (br.containsHTML("This data has been removed by the owner")) {
      logger.warning("Wrong link");
      logger.warning(
          JDL.L(
              "plugins.decrypt.errormsg.unavailable",
              "Perhaps wrong URL or the download is not available anymore."));
      return new ArrayList<DownloadLink>();
    }

    /* File package handling */
    for (int i = 0; i <= 5; i++) {
      Form captchaForm = br.getForm(1);
      if (captchaForm == null) throw new PluginException(LinkStatus.ERROR_PLUGIN_DEFECT);
      String passCode = null;
      String captchalink0 = br.getRegex("src=\"(mUSystem.*?)\"").getMatch(0);
      String captchalink = "http://protect-my-links.com/" + captchalink0;
      if (captchalink0.contains("null")) throw new PluginException(LinkStatus.ERROR_PLUGIN_DEFECT);
      String code = getCaptchaCode(captchalink, param);
      captchaForm.put("captcha", code);

      if (br.containsHTML("Password :"******"passwd", passCode);
      }
      br.submitForm(captchaForm);
      if (br.containsHTML("Captcha is not valid") || br.containsHTML("Password is not valid"))
        continue;
      break;
    }
    if (br.containsHTML("Captcha is not valid"))
      throw new PluginException(LinkStatus.ERROR_CAPTCHA);
    String fpName = br.getRegex("h1 class=\"pmclass\">(.*?)</h1></td>").getMatch(0).trim();
    fp.setName(fpName);
    String[] links = br.getRegex("><a href='(/\\?p=.*?)'").getColumn(0);
    if (links == null || links.length == 0) return null;
    progress.setRange(links.length);
    for (String psp : links) {
      // Fixed, thx to [email protected]
      br.getPage("http://protect-my-links.com" + psp);
      String c = br.getRegex("javascript>c=\"(.*?)\";").getMatch(0);
      String x = br.getRegex("x\\(\"(.*?)\"\\)").getMatch(0);
      if (c == null || x == null) return null;
      String step1Str = step1(c);
      if (step1Str == null) return null;
      ArrayList<Integer> step2Lst = step2(step1Str);
      if (step2Lst == null || step2Lst.size() == 0) return null;
      String step3Str = step3(step2Lst, x);
      if (step3Str == null) return null;
      String finallink = step4(step3Str);
      if (finallink == null) return null;
      decryptedLinks.add(createDownloadlink(finallink));
      progress.increase(1);
    }
    fp.addLinks(decryptedLinks);
    return decryptedLinks;
  }
Exemplo n.º 6
0
  public ArrayList<DownloadLink> decryptIt(CryptedLink param, ProgressController progress)
      throws Exception {
    ArrayList<DownloadLink> decryptedLinks = new ArrayList<DownloadLink>();
    String parameter = param.toString();
    br.setFollowRedirects(false);
    br.getPage(parameter);
    if (br.containsHTML("(\"This link does not exist\\.\"|ERROR - this link does not exist)"))
      throw new DecrypterException(
          JDL.L(
              "plugins.decrypt.errormsg.unavailable",
              "Perhaps wrong URL or the download is not available anymore."));
    if (br.containsHTML(">Not yet checked</span>")) throw new DecrypterException("Not yet checked");
    if (br.containsHTML("To use reCAPTCHA you must get an API key from"))
      throw new DecrypterException("Server error, please contact the safelinking.net support!");
    if (!parameter.contains("/d/")) {
      Form capForm = new Form();
      capForm.put("post-protect", "1");
      capForm.setMethod(MethodType.POST);
      capForm.setAction(parameter);
      for (int i = 0; i <= 5; i++) {
        if (br.containsHTML(PASSWORDPROTECTEDTEXT)) {
          capForm.put("link-password", getUserInput(null, param));
        }
        if (br.containsHTML(RECAPTCHATEXT)) {
          PluginForHost recplug = JDUtilities.getPluginForHost("DirectHTTP");
          jd.plugins.hoster.DirectHTTP.Recaptcha rc = ((DirectHTTP) recplug).getReCaptcha(br);
          rc.parse();
          rc.load();
          File cf = rc.downloadCaptcha(getLocalCaptchaFile());
          capForm.put("recaptcha_challenge_field", rc.getChallenge());
          capForm.put("recaptcha_response_field", getCaptchaCode(cf, param));
        } else if (br.getRegex(CAPTCHAREGEX1).getMatch(0) != null) {
          capForm.put(
              "securimage_response_field",
              getCaptchaCode(br.getRegex(CAPTCHAREGEX1).getMatch(0), param));
        } else if (br.getRegex(CAPTCHAREGEX2).getMatch(0) != null) {
          capForm.put(
              "3dcaptcha_response_field",
              getCaptchaCode(br.getRegex(CAPTCHAREGEX2).getMatch(0), param));
        } else if (br.containsHTML(CAPTCHATEXT3)) {
          Browser xmlbrowser = br.cloneBrowser();
          xmlbrowser.getPage("http://safelinking.net/includes/captcha_factory/fancycaptcha.php");
          capForm.put("fancy-captcha", xmlbrowser.toString().trim());
        }
        br.submitForm(capForm);
        if (br.containsHTML(RECAPTCHATEXT)
            || br.getRegex(CAPTCHAREGEX1).getMatch(0) != null
            || br.getRegex(CAPTCHAREGEX2).getMatch(0) != null
            || br.containsHTML(PASSWORDPROTECTEDTEXT)) continue;
        if (br.containsHTML(CAPTCHATEXT3)) {
          logger.warning("Captcha3 captchahandling failed for link: " + parameter);
          return null;
        }
        break;
      }
      if (br.containsHTML(RECAPTCHATEXT)
          || br.getRegex(CAPTCHAREGEX1).getMatch(0) != null
          || br.getRegex(CAPTCHAREGEX2).getMatch(0) != null)
        throw new DecrypterException(DecrypterException.CAPTCHA);
      if (br.containsHTML(PASSWORDPROTECTEDTEXT))
        throw new DecrypterException(DecrypterException.PASSWORD);
      if (br.containsHTML(">All links are dead\\.<"))
        throw new DecrypterException(
            JDL.L(
                "plugins.decrypt.errormsg.unavailable",
                "Perhaps wrong URL or the download is not available anymore."));
      // container handling (if no containers found, use webprotection
      if (br.containsHTML("\\.dlc")) {
        decryptedLinks = loadcontainer(".dlc", param);
        if (decryptedLinks != null && decryptedLinks.size() > 0) return decryptedLinks;
      }

      if (br.containsHTML("\\.rsdf")) {
        decryptedLinks = loadcontainer(".rsdf", param);
        if (decryptedLinks != null && decryptedLinks.size() > 0) return decryptedLinks;
      }

      if (br.containsHTML("\\.ccf")) {
        decryptedLinks = loadcontainer(".ccf", param);
        if (decryptedLinks != null && decryptedLinks.size() > 0) return decryptedLinks;
      }
      decryptedLinks = new ArrayList<DownloadLink>();
      // Webprotection decryption
      String[] links =
          br.getRegex("class=\"linked\">(http://safelinking\\.net/d/.*?)</a>").getColumn(0);
      if (links == null || links.length == 0) {
        String allLinks =
            br.getRegex("class=\"link-box\" id=\"direct-links\".*?>(.*?<a href=\".*?)</div>")
                .getMatch(0);
        if (allLinks != null) links = new Regex(allLinks, "<a href=\"(.*?)\"").getColumn(0);
        if (links == null || links.length == 0) {
          links = br.getRegex("\"(http://safelinking\\.net/d/[a-z0-9]+)\"").getColumn(0);
          if (links == null || links.length == 0) {
            links = br.getRegex("class=\"linked\">(http://.*?)</a>").getColumn(0);
          }
        }
      }
      if (links == null || links.length == 0) return null;
      progress.setRange(links.length);
      for (String link : links) {
        if (!link.contains("safelinking.net/")) {
          decryptedLinks.add(createDownloadlink(link));
        } else {
          br.getPage(link);
          String finallink = br.getRedirectLocation();
          if (finallink == null) {
            logger.warning("Decrypter broken, decryption stopped at link: " + link);
            return null;
          }
          if (!parameter.equals(finallink)) decryptedLinks.add(createDownloadlink(finallink));
        }
        progress.increase(1);
      }
    } else {
      if (br.getRedirectLocation() == null) {
        logger.warning("Error in single-link handling for link: " + parameter);
        return null;
      }
      decryptedLinks.add(createDownloadlink(br.getRedirectLocation()));
    }
    return decryptedLinks;
  }
Exemplo n.º 7
0
  @Override
  public ArrayList<DownloadLink> decryptIt(
      final CryptedLink param, final ProgressController progress) throws Exception {
    synchronized (LOCK) {
      PROGRESS = progress;
      final ArrayList<DownloadLink> decryptedLinks = new ArrayList<DownloadLink>();
      final String parameter = correctCryptedLink(param.toString());
      setBrowserExclusive();
      br.setFollowRedirects(true);
      br.getHeaders().put("User-Agent", UA);

      /* Handle Captcha and/or password */
      handleCaptchaAndPassword(parameter, param);
      if (!br.getURL().contains("relink.us/")) {
        try {
          validateLastChallengeResponse();
        } catch (final Throwable e) {
        }
        logger.info("Link offline: " + parameter);
        return decryptedLinks;
      }
      if (br.containsHTML("<title>404</title>")) {
        logger.info("Link offline: " + parameter);
        return decryptedLinks;
      }
      if (ALLFORM != null && ALLFORM.getRegex("password").matches()) {
        throw new DecrypterException(DecrypterException.PASSWORD);
      }
      if (ALLFORM != null && ALLFORM.getRegex("captcha").matches()) {
        throw new DecrypterException(DecrypterException.CAPTCHA);
      }

      final String page = br.toString();
      progress.setRange(0);
      final String title =
          br.getRegex("shrink\"><th>(Titel|Baslik|Title)</th><td>(.*?)</td></tr>").getMatch(1);
      FilePackage fp = null;
      if (title != null && title.trim().length() > 0) {
        fp = FilePackage.getInstance();
        fp.setName(title);
        fp.setProperty("ALLOW_MERGE", true);
      }

      /* use cnl2 button if available */
      String cnlUrl = "http://127\\.0\\.0\\.1:9666/flash/addcrypted2";
      if (br.containsHTML(cnlUrl)) {
        final Browser cnlbr = br.cloneBrowser();

        Form cnlForm = null;
        for (Form f : cnlbr.getForms()) {
          if (f.containsHTML(cnlUrl)) {
            cnlForm = f;
          }
        }
        if (cnlForm != null) {

          if (System.getProperty("jd.revision.jdownloaderrevision") != null) {
            String jk =
                cnlbr.getRegex("<input type=\"hidden\" name=\"jk\" value=\"([^\"]+)\"").getMatch(0);
            HashMap<String, String> infos = new HashMap<String, String>();
            infos.put(
                "crypted", Encoding.urlDecode(cnlForm.getInputField("crypted").getValue(), false));
            infos.put("jk", jk);
            String source = cnlForm.getInputField("source").getValue();
            if (StringUtils.isEmpty(source)) {
              source = parameter.toString();
            } else {
              source = Encoding.urlDecode(source, true);
            }
            infos.put("source", source);
            String json = JSonStorage.toString(infos);
            final DownloadLink dl =
                createDownloadlink(
                    "http://dummycnl.jdownloader.org/"
                        + HexFormatter.byteArrayToHex(json.getBytes("UTF-8")));
            if (fp != null) {
              fp.add(dl);
            }
            try {
              distribute(dl);
            } catch (final Throwable e) {
              /* does not exist in 09581 */
            }
            decryptedLinks.add(dl);
            return decryptedLinks;
          } else {
            String jk =
                cnlbr.getRegex("<input type=\"hidden\" name=\"jk\" value=\"([^\"]+)\"").getMatch(0);
            cnlForm.remove("jk");
            cnlForm.put("jk", (jk != null ? jk.replaceAll("\\+", "%2B") : "nothing"));
            try {
              cnlbr.submitForm(cnlForm);
              if (cnlbr.containsHTML("success")) {
                return decryptedLinks;
              }
              if (cnlbr.containsHTML("^failed")) {
                logger.warning(
                    "relink.us: CNL2 Postrequest was failed! Please upload now a logfile, contact our support and add this loglink to your bugreport!");
                logger.warning("relink.us: CNL2 Message: " + cnlbr.toString());
              }
            } catch (Throwable e) {
              logger.info("relink.us: ExternInterface(CNL2) is disabled!");
            }
          }
        }
      }
      if (!br.containsHTML("download.php\\?id=[a-f0-9]+") && !br.containsHTML("getFile\\(")) {
        return null;
      }
      if (!decryptContainer(page, parameter, "dlc", decryptedLinks)) {
        if (!decryptContainer(page, parameter, "ccf", decryptedLinks)) {
          decryptContainer(page, parameter, "rsdf", decryptedLinks);
        }
      }
      /* Webdecryption */
      if (decryptedLinks.isEmpty()) {
        decryptLinks(decryptedLinks, param);
        final String more_links[] =
            new Regex(
                    page,
                    Pattern.compile(
                        "<a href=\"(go\\.php\\?id=[a-zA-Z0-9]+\\&seite=\\d+)\">",
                        Pattern.CASE_INSENSITIVE))
                .getColumn(0);
        for (final String link : more_links) {
          br.getPage("http://relink.us/" + link);
          decryptLinks(decryptedLinks, param);
        }
      }
      if (decryptedLinks.isEmpty() && br.containsHTML(cnlUrl)) {
        throw new DecrypterException("CNL2 only, open this link in Browser");
      }
      try {
        validateLastChallengeResponse();
      } catch (final Throwable e) {
      }
      if (fp != null) {
        fp.addLinks(decryptedLinks);
      }
      return decryptedLinks;
    }
  }
 public ArrayList<DownloadLink> decryptIt(CryptedLink param, ProgressController progress)
     throws Exception {
   ArrayList<DownloadLink> decryptedLinks = new ArrayList<DownloadLink>();
   String parameter = param.toString();
   br.getPage(parameter);
   if (br.containsHTML(">PICTURE GALLERY<")
       || parameter.matches(".*?deviantclip\\.com/Media-[0-9]+\\-[0-9]+_.*?\\.html")) {
     if (parameter.matches(".*?deviantclip\\.com/Media\\-[0-9]+\\-[0-9]+_.*?\\.html")) {
       getfpName();
       if (fpName != null) {
         DownloadLink dl =
             createDownloadlink(
                 parameter.replace("deviantclip.com", "gsghe366REHrtzegiolp") + "---picture");
         dl.setName(fpName);
         br.getPage(parameter);
         String dllink =
             br.getRegex("\"(http://medias\\.deviantclip\\.com/media/[0-9]+/.*?)\"").getMatch(0);
         if (dllink != null) {
           dllink = dllink.replace("amp;", "");
           URLConnectionAdapter con = br.openGetConnection(dllink);
           if (!con.getContentType().contains("html")) {
             String ending = LoadImage.getFileType(dllink, con.getContentType());
             if (ending != null) dl.setFinalFileName(dl.getName() + ending);
             long size = con.getLongContentLength();
             if (size != 0) {
               dl.setDownloadSize(con.getLongContentLength());
               dl.setAvailable(true);
             }
           }
         }
         decryptedLinks.add(dl);
       } else {
         decryptedLinks.add(
             createDownloadlink(
                 parameter.replace("deviantclip.com", "gsghe366REHrtzegiolp") + "---picture"));
       }
     } else {
       getfpName();
       String[] links =
           br.getRegex("(http://www\\.deviantclip\\.com/Media\\-[0-9]+\\-[0-9]+_.*?\\.html)")
               .getColumn(0);
       if (links == null || links.length == 0) return null;
       progress.setRange(links.length);
       if (fpName != null) {
         int counter = 1;
         for (String photolink : links) {
           DownloadLink dl =
               createDownloadlink(
                   photolink.replace("deviantclip.com", "gsghe366REHrtzegiolp") + "---picture");
           dl.setName(fpName + "_" + counter);
           br.getPage(photolink);
           String dllink =
               br.getRegex("\"(http://medias\\.deviantclip\\.com/media/[0-9]+/.*?)\"").getMatch(0);
           if (dllink != null) {
             dllink = dllink.replace("amp;", "");
             URLConnectionAdapter con = br.openGetConnection(dllink);
             if (!con.getContentType().contains("html")) {
               String ending = LoadImage.getFileType(dllink, con.getContentType());
               if (ending != null) dl.setFinalFileName(dl.getName() + ending);
               long size = con.getLongContentLength();
               if (size != 0) {
                 dl.setDownloadSize(con.getLongContentLength());
                 dl.setAvailable(true);
               }
             }
           }
           decryptedLinks.add(dl);
           counter = counter + 1;
           progress.increase(1);
         }
       } else {
         for (String photolink : links) {
           decryptedLinks.add(
               createDownloadlink(
                   photolink.replace("deviantclip.com", "gsghe366REHrtzegiolp") + "---picture"));
         }
       }
       if (fpName != null) {
         FilePackage fp = FilePackage.getInstance();
         fp.setName(fpName.trim());
         fp.addLinks(decryptedLinks);
       }
     }
   } else {
     getfpName();
     if (fpName != null) {
       DownloadLink dl =
           createDownloadlink(
               parameter.replace("deviantclip.com", "gsghe366REHrtzegiolp") + "---video");
       dl.setFinalFileName(fpName + ".flv");
       decryptedLinks.add(dl);
     } else {
       decryptedLinks.add(
           createDownloadlink(
               parameter.replace("deviantclip.com", "gsghe366REHrtzegiolp") + "---video"));
     }
   }
   return decryptedLinks;
 }