diff options
Diffstat (limited to 'module/plugins/crypter/FilecryptCc.py')
-rw-r--r-- | module/plugins/crypter/FilecryptCc.py | 103 |
1 files changed, 50 insertions, 53 deletions
diff --git a/module/plugins/crypter/FilecryptCc.py b/module/plugins/crypter/FilecryptCc.py index 4d2b42f90..9f4ad69aa 100644 --- a/module/plugins/crypter/FilecryptCc.py +++ b/module/plugins/crypter/FilecryptCc.py @@ -9,14 +9,15 @@ import urlparse from Crypto.Cipher import AES -from module.plugins.Crypter import Crypter -from module.plugins.internal.ReCaptcha import ReCaptcha +from module.plugins.internal.Crypter import Crypter +from module.plugins.captcha.ReCaptcha import ReCaptcha class FilecryptCc(Crypter): __name__ = "FilecryptCc" __type__ = "crypter" - __version__ = "0.15" + __version__ = "0.18" + __status__ = "testing" __pattern__ = r'https?://(?:www\.)?filecrypt\.cc/Container/\w+' @@ -47,66 +48,63 @@ class FilecryptCc(Crypter): if "content notfound" in self.html: #@NOTE: "content notfound" is NOT a typo self.offline() - self.handlePasswordProtection() - self.handleCaptcha() - self.handleMirrorPages() + self.handle_password_protection() + self.handle_captcha() + self.handle_mirror_pages() - for handle in (self.handleCNL, self.handleWeblinks, self.handleDlcContainer): + for handle in (self.handle_CNL, self.handle_weblinks, self.handle_dlc_container): handle() if self.links: self.packages = [(pyfile.package().name, self.links, pyfile.package().name)] return - def handleMirrorPages(self): - if "mirror=" not in self.siteWithLinks: + def handle_mirror_pages(self): + if "mirror=" not in self.site_with_links: return - mirror = re.findall(self.MIRROR_PAGE_PATTERN, self.siteWithLinks) + mirror = re.findall(self.MIRROR_PAGE_PATTERN, self.site_with_links) - self.logInfo(_("Found %d mirrors") % len(mirror)) + self.log_info(_("Found %d mirrors") % len(mirror)) for i in mirror[1:]: - self.siteWithLinks = self.siteWithLinks + self.load(i).decode("utf-8", "replace") + self.site_with_links = self.site_with_links + self.load(i) - def handlePasswordProtection(self): + def handle_password_protection(self): if '<input type="text" name="password"' not in self.html: return - self.logInfo(_("Folder is password protected")) + self.log_info(_("Folder is password protected")) - password = self.getPassword() + password = self.get_password() if not password: self.fail(_("Please enter the password in package section and try again")) - self.html = self.load(self.pyfile.url, post={"password": password}) + self.html = self.load(self.pyfile.url, post={'password': password}) - def handleCaptcha(self): + def handle_captcha(self): m = re.search(self.CAPTCHA_PATTERN, self.html) m2 = re.search(self.CIRCLE_CAPTCHA_PATTERN, self.html) - if m: #: normal captcha - self.logDebug("Captcha-URL: %s" % m.group(1)) + if m: #: Normal captcha + self.log_debug("Captcha-URL: %s" % m.group(1)) - captcha_code = self.decryptCaptcha(urlparse.urljoin(self.base_url, m.group(1)), - forceUser=True, - imgtype="gif") + captcha_code = self.captcha.decrypt(urlparse.urljoin(self.base_url, m.group(1)), + input_type="gif") - self.siteWithLinks = self.load(self.pyfile.url, - post={'recaptcha_response_field': captcha_code}, - decode=True) - elif m2: #: circle captcha - self.logDebug("Captcha-URL: %s" % m2.group(1)) + self.site_with_links = self.load(self.pyfile.url, + post={'recaptcha_response_field': captcha_code}) + elif m2: #: Circle captcha + self.log_debug("Captcha-URL: %s" % m2.group(1)) - captcha_code = self.decryptCaptcha('%s%s?c=abc' %(self.base_url, m2.group(1)), - result_type='positional') + captcha_code = self.captcha.decrypt('%s%s?c=abc' %(self.base_url, m2.group(1)), + output_type='positional') - self.siteWithLinks = self.load(self.pyfile.url, - post={'button.x': captcha_code[0], 'button.y': captcha_code[1]}, - decode=True) + self.site_with_links = self.load(self.pyfile.url, + post={'button.x': captcha_code[0], 'button.y': captcha_code[1]}) else: recaptcha = ReCaptcha(self) @@ -114,20 +112,19 @@ class FilecryptCc(Crypter): if captcha_key: response, challenge = recaptcha.challenge(captcha_key) - self.siteWithLinks = self.load(self.pyfile.url, - post={'g-recaptcha-response': response}, - decode=True) + self.site_with_links = self.load(self.pyfile.url, + post={'g-recaptcha-response': response}) else: - self.logInfo(_("No captcha found")) - self.siteWithLinks = self.html + self.log_info(_("No captcha found")) + self.site_with_links = self.html - if "recaptcha_image" in self.siteWithLinks or "data-sitekey" in self.siteWithLinks: - self.invalidCaptcha() + if "recaptcha_image" in self.site_with_links or "data-sitekey" in self.site_with_links: + self.captcha.invalid() self.retry() - def handleDlcContainer(self): - dlc = re.findall(self.DLC_LINK_PATTERN, self.siteWithLinks) + def handle_dlc_container(self): + dlc = re.findall(self.DLC_LINK_PATTERN, self.site_with_links) if not dlc: return @@ -136,9 +133,9 @@ class FilecryptCc(Crypter): self.links.append("%s/DLC/%s.dlc" % (self.base_url, i)) - def handleWeblinks(self): + def handle_weblinks(self): try: - weblinks = re.findall(self.WEBLINK_PATTERN, self.siteWithLinks) + weblinks = re.findall(self.WEBLINK_PATTERN, self.site_with_links) for link in weblinks: res = self.load("%s/Link/%s.html" % (self.base_url, link)) @@ -147,32 +144,32 @@ class FilecryptCc(Crypter): self.links.append(res2['location']) except Exception, e: - self.logDebug("Error decrypting weblinks: %s" % e) + self.log_debug("Error decrypting weblinks: %s" % e) - def handleCNL(self): + def handle_CNL(self): try: - vjk = re.findall('<input type="hidden" name="jk" value="function f\(\){ return \'(.*)\';}">', self.siteWithLinks) - vcrypted = re.findall('<input type="hidden" name="crypted" value="(.*)">', self.siteWithLinks) + vjk = re.findall('<input type="hidden" name="jk" value="function f\(\){ return \'(.*)\';}">', self.site_with_links) + vcrypted = re.findall('<input type="hidden" name="crypted" value="(.*)">', self.site_with_links) for i in xrange(len(vcrypted)): - self.links.extend(self._getLinks(vcrypted[i], vjk[i])) + self.links.extend(self._get_links(vcrypted[i], vjk[i])) except Exception, e: - self.logDebug("Error decrypting CNL: %s" % e) + self.log_debug("Error decrypting CNL: %s" % e) - def _getLinks(self, crypted, jk): - # Get key + def _get_links(self, crypted, jk): + #: Get key key = binascii.unhexlify(str(jk)) - # Decrypt + #: Decrypt Key = key IV = key obj = AES.new(Key, AES.MODE_CBC, IV) text = obj.decrypt(crypted.decode('base64')) - # Extract links + #: Extract links text = text.replace("\x00", "").replace("\r", "") links = filter(bool, text.split('\n')) |