[util] implement 'decrypt_xor()'
This commit is contained in:
@@ -11,7 +11,6 @@
|
|||||||
from .common import Extractor
|
from .common import Extractor
|
||||||
from .lolisafe import LolisafeAlbumExtractor
|
from .lolisafe import LolisafeAlbumExtractor
|
||||||
from .. import text, util, config, exception
|
from .. import text, util, config, exception
|
||||||
import binascii
|
|
||||||
import random
|
import random
|
||||||
|
|
||||||
if config.get(("extractor", "bunkr"), "tlds"):
|
if config.get(("extractor", "bunkr"), "tlds"):
|
||||||
@@ -175,7 +174,8 @@ class BunkrAlbumExtractor(LolisafeAlbumExtractor):
|
|||||||
url, method="POST", headers=headers, json={"id": data_id}).json()
|
url, method="POST", headers=headers, json={"id": data_id}).json()
|
||||||
|
|
||||||
if data.get("encrypted"):
|
if data.get("encrypted"):
|
||||||
file_url = self._decrypt_url(data["url"], data["timestamp"])
|
key = "SECRET_KEY_{}".format(data["timestamp"] // 3600)
|
||||||
|
file_url = util.decrypt_xor(data["url"], key.encode())
|
||||||
else:
|
else:
|
||||||
file_url = data["url"]
|
file_url = data["url"]
|
||||||
|
|
||||||
@@ -192,16 +192,6 @@ class BunkrAlbumExtractor(LolisafeAlbumExtractor):
|
|||||||
"_http_validate": self._validate,
|
"_http_validate": self._validate,
|
||||||
}
|
}
|
||||||
|
|
||||||
def _decrypt_url(self, encrypted_b64, timestamp):
|
|
||||||
encrypted_bytes = binascii.a2b_base64(encrypted_b64)
|
|
||||||
key = "SECRET_KEY_{}".format(timestamp // 3600).encode()
|
|
||||||
div = len(key)
|
|
||||||
|
|
||||||
return bytes([
|
|
||||||
encrypted_bytes[i] ^ key[i % div]
|
|
||||||
for i in range(len(encrypted_bytes))
|
|
||||||
]).decode()
|
|
||||||
|
|
||||||
def _validate(self, response):
|
def _validate(self, response):
|
||||||
if response.history and response.url.endswith("/maintenance-vid.mp4"):
|
if response.history and response.url.endswith("/maintenance-vid.mp4"):
|
||||||
self.log.warning("File server in maintenance mode")
|
self.log.warning("File server in maintenance mode")
|
||||||
|
|||||||
@@ -9,8 +9,7 @@
|
|||||||
"""Extractors for Chevereto galleries"""
|
"""Extractors for Chevereto galleries"""
|
||||||
|
|
||||||
from .common import BaseExtractor, Message
|
from .common import BaseExtractor, Message
|
||||||
from .. import text
|
from .. import text, util
|
||||||
import binascii
|
|
||||||
|
|
||||||
|
|
||||||
class CheveretoExtractor(BaseExtractor):
|
class CheveretoExtractor(BaseExtractor):
|
||||||
@@ -33,18 +32,6 @@ class CheveretoExtractor(BaseExtractor):
|
|||||||
|
|
||||||
url = text.extr(page, '<a data-pagination="next" href="', '" ><')
|
url = text.extr(page, '<a data-pagination="next" href="', '" ><')
|
||||||
|
|
||||||
def _decrypt_url(self, encrypted_b64):
|
|
||||||
encrypted_hex = binascii.a2b_base64(encrypted_b64)
|
|
||||||
encrypted_bytes = bytes.fromhex(encrypted_hex.decode())
|
|
||||||
|
|
||||||
key = b"seltilovessimpcity@simpcityhatesscrapers"
|
|
||||||
div = len(key)
|
|
||||||
|
|
||||||
return bytes([
|
|
||||||
encrypted_bytes[i] ^ key[i % div]
|
|
||||||
for i in range(len(encrypted_bytes))
|
|
||||||
]).decode()
|
|
||||||
|
|
||||||
|
|
||||||
BASE_PATTERN = CheveretoExtractor.update({
|
BASE_PATTERN = CheveretoExtractor.update({
|
||||||
"jpgfish": {
|
"jpgfish": {
|
||||||
@@ -75,7 +62,9 @@ class CheveretoImageExtractor(CheveretoExtractor):
|
|||||||
pos = page.find(" download=")
|
pos = page.find(" download=")
|
||||||
url = text.rextract(page, 'href="', '"', pos)[0]
|
url = text.rextract(page, 'href="', '"', pos)[0]
|
||||||
if not url.startswith("https://"):
|
if not url.startswith("https://"):
|
||||||
url = self._decrypt_url(url)
|
url = util.decrypt_xor(
|
||||||
|
url, b"seltilovessimpcity@simpcityhatesscrapers",
|
||||||
|
fromhex=True)
|
||||||
|
|
||||||
image = {
|
image = {
|
||||||
"id" : self.path.rpartition(".")[2],
|
"id" : self.path.rpartition(".")[2],
|
||||||
|
|||||||
@@ -48,6 +48,19 @@ def bdecode(data, alphabet="0123456789"):
|
|||||||
return num
|
return num
|
||||||
|
|
||||||
|
|
||||||
|
def decrypt_xor(encrypted, key, base64=True, fromhex=False):
|
||||||
|
if base64:
|
||||||
|
encrypted = binascii.a2b_base64(encrypted)
|
||||||
|
if fromhex:
|
||||||
|
encrypted = bytes.fromhex(encrypted.decode())
|
||||||
|
|
||||||
|
div = len(key)
|
||||||
|
return bytes([
|
||||||
|
encrypted[i] ^ key[i % div]
|
||||||
|
for i in range(len(encrypted))
|
||||||
|
]).decode()
|
||||||
|
|
||||||
|
|
||||||
def advance(iterable, num):
|
def advance(iterable, num):
|
||||||
""""Advance 'iterable' by 'num' steps"""
|
""""Advance 'iterable' by 'num' steps"""
|
||||||
iterator = iter(iterable)
|
iterator = iter(iterable)
|
||||||
|
|||||||
Reference in New Issue
Block a user