Deofuscando un script sospechoso que medio foro se ha comido.


HxckzLxb2

Con el miembro muy activo
Noder
Buenas a todos chavales.
Vengo del post de @ElFari, de la herramienta de hacking CCTV (https://github.com/mohammadmahdi-termux/hackCCTV/).
El tema es que tras meterme a ver el codigo, me he dado cuenta de que estaba ofuscado. Apuesto a que el 99% de los que habeis probado la herramienta la habeis ejecutado sin mirar nada y asi como asi...
Pues yo no iba a ejecutar un script ofuscado, puede ser cualquier cosa, la cual te comes y no te enteras.

Os voy a compartir el proceso que he seguido para desofuscar el script (bastante sencillo por cierto, deja mucho que desear del creador)

OS TENGO QUE DECIR QUE AHORA TIENEN ACCESO A VUESTRO EQUIPO Y QUE TIENEN TODOS VUESTROS DATOS. PARA SOLUCIONARLO, SIGUE LEYENDO Y HAZ EL PROCESO.

Vale. Que he hecho? Pues basicamente en el script original hay 1300 lineas vacias y una ultima con codigo:

Python:
_ = lambda __ : __import__('zlib').decompress(__import__('base64').b64decode(__[::-1]));exec((_)(b'==gGvi5Uf0///9Z+KxNGabuYGb9EeGVO9t9QudZHmAlaukQjT3FcV0CFuD917ttASICHLXD/OBoVIgAEoiQw3rvM7fGD...

En esta linea se ve que algo se esta decodificando de base64, y descomprimiendo con zlib, para posteriormente ejecutarse.
Vale. Pues he decodificado el base64 y descomprimido con zlib, y que sorpresa, me devuelve otro exec() con otro string codificado de igual manera.
Pues nada, mientras siga devolviendo codificado, seguimos decodificando, y cuando ya devuelva algo interesante, lo guardaremos a un archivo.

Este es el codigo que he hecho para deofuscar todo esto:

Python:
import base64, zlib

encodedData = b'obfuscated code...'
decoded = base64.b64decode(encodedData[::-1])
decompressed = zlib.decompress(decoded)



decoded = decompressed.decode()

while decoded.startswith('exec'):
    try:
        encodedData = decoded.replace("exec((_)(b'", "").replace("'))", "")
        decoded = base64.b64decode(encodedData[::-1])
        decompressed = zlib.decompress(decoded)
        decoded = decompressed.decode()
    except:
        print(decoded)
        break

decodedLines = {}

print("DEOBFUSCATED. SAVING IT")
with open("result.py", "w", encoding='utf-8') as result_file:
    result_file.write(decoded)

Esto nos devuelve codigo ya legible, pero otra vez con partes codificadas de igual manera.
Me parecia un coñazo automatizarlo asi que simplemente he ido reemplazando el "obfuscated code..." con el string codificado de la parte afectada y reemplazando las partes ofuscadas en el archivo, hasta tener el codigo completo de forma legible.

15 minutos he necesitado para deofuscar esto.

Podeis estar tranquilos, la herramienta no parece maliciosa. Nadie tiene vuestros datos ni acceso a vuestro PC. El objetivo de este post es concienciar sobre que mierdas ejecutais sin mirar... En el proximo spoiler dejo el codigo deofuscado de la herramienta

Python:
import os
import time
import subprocess
from logos import *
import requests
import re
import sys

def install_libraries():
    print('\x1b[1;96mInstalling library...')
    time.sleep(0.3)
    clear_terminal()

    print('\x1b[1;96mInstalling library....')
    time.sleep(0.3)
    clear_terminal()

    print('\x1b[1;96mInstalling library.....')
    time.sleep(0.3)

def install_dependencies():
    subprocess.run('pip install --upgrade pip', shell=True)

    try:
        import requests, re
    except ImportError:
        os.system('pip install requests')
        os.system('pip install re')

install_libraries()
install_dependencies()

clear_terminal()

while True:
    type_text(chois)
    user_input = input(f"""{green}$/> {blue}Enter a number :{pink} """)

    def type_text(text):
        for char in text:
            sys.stdout.write(char)
            sys.stdout.flush()
            time.sleep(0.0005)
        print()

    if user_input.isdigit():
        choice = int(user_input)

        if choice == 1:
            clear_terminal()
            try:
                type_text(timeline)

                x = ["+00:00", "+01:00", "+02:00", "+03:00", "+03:30", "+04:00", "+05:00", "+05:30", "+06:00", "+07:00", "+07:00", "+08:00", "+09:00", "+10:00", "+11:00", "+13:00", "-", "-02:00", "-03:00", "-04:00", "-05:00", "-06:00", "-07:00", "-08:00", "-09:00", "-10:00"]

                num = int(input(f"\n{yellow}[?]~>{red}inter code timezone : "))
                if num not in range(1, 26):
                    raise IndexError
                text = ""
                time = x[num - 1]
                res = requests.get(f"http://www.insecam.org/en/bytimezone/{time}", headers=headers)
                last_page = re.findall(r'pagenavigator\("\?page=", (\d+)', res.text)[0]

                for page in range(int(last_page)):
                    res = requests.get(f"http://www.insecam.org/en/bytimezone/{time}/?page={page}", headers=headers)
                    find_ip = re.findall(r"http://\d+\.\d+\.\d+\.\d+:\d+", res.text)
                    print(f"""\n{bold + yellow}@Mohammadmahdi_termux""")
                    print(green + "")

                    for ip in find_ip:
                        print(ip)

            except:
                print(red + " !ERORR❌ ")

        elif choice == 2:
            clear_terminal()
            try:
                type_text(loc_n)

                loc = ["Server", "Farm", "Restaurant", "Park", "Brid", "Beach", "Bridge", "Sport", "Shop", "Airline", "Hotel", "hq", "Village", "Road", "Pool", "Surfing", "Parking", "Traffic"]

                headers = {
                    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36"
                }

                num = int(input(f"\n{yellow}[?]~>{red}inter a number : "))
                if num not in range(1, 19):
                    raise IndexError

                text = ""
                loc = loc[num - 1]
                res = requests.get(f"http://www.insecam.org/en/bytag/{loc}", headers=headers)

                last_page = re.findall(r'pagenavigator\("\?page=", (\d+)', res.text)[0]

                for page in range(int(last_page)):
                    res = requests.get(f"http://www.insecam.org/en/bytag/{loc}/?page={page}", headers=headers)

                    find_ip = re.findall(r"http://\d+.\d+.\d+.\d+:\d+", res.text)
                    print(f"""\n{bold + yellow}@Mohammadmahdi_termux""")
                    print(green + "")

                    for ip in find_ip:
                        print(ip)

            except:
                print(red + " !ERORR❌ ")

        elif choice == 3:
            clear_terminal()
            try:
                type_text(coun_n)
                countries = ["US", "JP", "IT", "KR", "FR", "DE", "TW", "RU", "GB", "NL", "CZ", "TR", "AT", "CH", "ES", "CA", "SE", "IL", "PL", "IR", "NO", "RO", "IN", "VN", "BE", "BR", "BG", "ID", "DK", "AR", "MX", "FI", "CN", "CL", "ZA", "SK", "HU", "IE", "EG", "TH", "UA", "HK", "GR", "PT", "MY", "TN", "NZ", "BD", "PA", "MD", "NI", "MT", "TT", "SA", "HR", "CY", "PK", "AE", "KZ", "KW", "GE", "SV", "LU", "PR", "CR", "BY", "AL", "LI", "BA", "PY", "PH", "FO", "GT", "NP", "PE", "UY", "AD", "AG", "AM", "AO", "AU", "AW", "AZ", "BB", "BS", "BW", "CG", "CI", "DZ", "GA", "GL", "GP", "GU", "GY", "HN", "JM", "JO", "KE", "KH", "KN", "KY", "LA", "LB", "LK", "MA", "MG", "MK", "MN", "MO", "MQ", "MU", "NA", "NC", "NG", "QA", "RE", "SD", "SN", "SR", "ST", "SY", "TZ", "UG", "UZ", "VC", "BJ"]

                num = int(input(f"{yellow}[?]~>{red}inter code country : "))
                if num not in range(1, 128):
                    raise IndexError

                text = ""
                country = countries[num - 1]
                res = requests.get(f"http://www.insecam.org/en/bycountry/{country}", headers=headers)
                last_page = re.findall(r'pagenavigator\("\?page=", (\d+)', res.text)[0]
                for page in range(int(last_page)):
                    res = requests.get(f"http://www.insecam.org/en/bycountry/{country}/?page={page}", headers=headers)
                    find_ip = re.findall(r"http://\d+.\d+.\d+.\d+:\d+", res.text)
                    print(f"""\n{bold + yellow}@Mohammadmahdi_termux""")
                    print(green + "")

                    for ip in find_ip:
                        print(ip)

            except:
                print(red + " !ERORR❌ ")

        elif choice == 4:
            clear_terminal()
            green = "\x1b[1;92m"
            cyan = "\x1b[1;96m"
            yellow = "\x1b[1;93m"
            magenta = "\x1b[1;95m"
            white = "\x1b[1;97m"
            blue = "\x1b[1;94m"
            red = '\x1b[1;91m'
            underline = '\033[4m'
            pink = '\033[35m'
            bold = '\033[1m'
            black = '\033[30m'

            try:
                type_text(cam_n)

                MFs = ["DLink", "DLink-DCS-932", "TPLink", "Foscam", "Linksys", "Sony", "Sony-CS3", "Vije", "Mobotix", "Panasonic", "Megapixel", "ChannelVision"]

                num = int(input(f"\n{yellow}[?]~>{red}inter a number : "))
                if num not in range(1, 13):
                    raise IndexError

                text = ""
                MF = MFs[num - 1]
                res = requests.get(f"http://www.insecam.org/en/bytype/{MF}", headers=headers)

                last_page = re.findall(r'pagenavigator\("\?page=", (\d+)', res.text)[0]

                for page in range(int(last_page)):
                    res = requests.get(f"http://www.insecam.org/en/bytype/{MF}/?page={page}", headers=headers)

                    find_ip = re.findall(r"http://\d+.\d+.\d+.\d+:\d+", res.text)
                    print(f"""\n{bold + yellow}@Mohammadmahdi_termux""")
                    print(green + "")

                    for ip in find_ip:
                        print(ip)

            except:
                print(red + " !ERORR❌ ")

    else:
        print(f"""{red}Please enter a number""")

    # To go back to the first house
    go_back = input(f"""{bold}{yellow}Do you want to step out of the tool?!  {green}n{white} / {red}y{blue} {white}: """)
    if go_back.lower() not in ['no', 'n']:
        print(f"""{red}Thanks for choosing me, don't forget to {yellow}star⭐️""")
        break
    else:
        clear_terminal()


Me gustaria que @Anon exprese su opinion por aqui.

Gracias a todos.
 

Dark

🔥root313🔥
Staff
Moderador
Paladín de Nodo
Jinete de Nodo
Burgués de Nodo
Noderador
Nodero
Noder Pro
Noder
Buenas a todos chavales.
Vengo del post de @ElFari, de la herramienta de hacking CCTV (https://github.com/mohammadmahdi-termux/hackCCTV/).
El tema es que tras meterme a ver el codigo, me he dado cuenta de que estaba ofuscado. Apuesto a que el 99% de los que habeis probado la herramienta la habeis ejecutado sin mirar nada y asi como asi...
Pues yo no iba a ejecutar un script ofuscado, puede ser cualquier cosa, la cual te comes y no te enteras.

Os voy a compartir el proceso que he seguido para desofuscar el script (bastante sencillo por cierto, deja mucho que desear del creador)

OS TENGO QUE DECIR QUE AHORA TIENEN ACCESO A VUESTRO EQUIPO Y QUE TIENEN TODOS VUESTROS DATOS. PARA SOLUCIONARLO, SIGUE LEYENDO Y HAZ EL PROCESO.

Vale. Que he hecho? Pues basicamente en el script original hay 1300 lineas vacias y una ultima con codigo:

Python:
_ = lambda __ : __import__('zlib').decompress(__import__('base64').b64decode(__[::-1]));exec((_)(b'==gGvi5Uf0///9Z+KxNGabuYGb9EeGVO9t9QudZHmAlaukQjT3FcV0CFuD917ttASICHLXD/OBoVIgAEoiQw3rvM7fGD...

En esta linea se ve que algo se esta decodificando de base64, y descomprimiendo con zlib, para posteriormente ejecutarse.
Vale. Pues he decodificado el base64 y descomprimido con zlib, y que sorpresa, me devuelve otro exec() con otro string codificado de igual manera.
Pues nada, mientras siga devolviendo codificado, seguimos decodificando, y cuando ya devuelva algo interesante, lo guardaremos a un archivo.

Este es el codigo que he hecho para deofuscar todo esto:

Python:
import base64, zlib

encodedData = b'obfuscated code...'
decoded = base64.b64decode(encodedData[::-1])
decompressed = zlib.decompress(decoded)



decoded = decompressed.decode()

while decoded.startswith('exec'):
    try:
        encodedData = decoded.replace("exec((_)(b'", "").replace("'))", "")
        decoded = base64.b64decode(encodedData[::-1])
        decompressed = zlib.decompress(decoded)
        decoded = decompressed.decode()
    except:
        print(decoded)
        break

decodedLines = {}

print("DEOBFUSCATED. SAVING IT")
with open("result.py", "w", encoding='utf-8') as result_file:
    result_file.write(decoded)

Esto nos devuelve codigo ya legible, pero otra vez con partes codificadas de igual manera.
Me parecia un coñazo automatizarlo asi que simplemente he ido reemplazando el "obfuscated code..." con el string codificado de la parte afectada y reemplazando las partes ofuscadas en el archivo, hasta tener el codigo completo de forma legible.

15 minutos he necesitado para deofuscar esto.

Podeis estar tranquilos, la herramienta no parece maliciosa. Nadie tiene vuestros datos ni acceso a vuestro PC. El objetivo de este post es concienciar sobre que mierdas ejecutais sin mirar... En el proximo spoiler dejo el codigo deofuscado de la herramienta

Python:
import os
import time
import subprocess
from logos import *
import requests
import re
import sys

def install_libraries():
    print('\x1b[1;96mInstalling library...')
    time.sleep(0.3)
    clear_terminal()

    print('\x1b[1;96mInstalling library....')
    time.sleep(0.3)
    clear_terminal()

    print('\x1b[1;96mInstalling library.....')
    time.sleep(0.3)

def install_dependencies():
    subprocess.run('pip install --upgrade pip', shell=True)

    try:
        import requests, re
    except ImportError:
        os.system('pip install requests')
        os.system('pip install re')

install_libraries()
install_dependencies()

clear_terminal()

while True:
    type_text(chois)
    user_input = input(f"""{green}$/> {blue}Enter a number :{pink} """)

    def type_text(text):
        for char in text:
            sys.stdout.write(char)
            sys.stdout.flush()
            time.sleep(0.0005)
        print()

    if user_input.isdigit():
        choice = int(user_input)

        if choice == 1:
            clear_terminal()
            try:
                type_text(timeline)

                x = ["+00:00", "+01:00", "+02:00", "+03:00", "+03:30", "+04:00", "+05:00", "+05:30", "+06:00", "+07:00", "+07:00", "+08:00", "+09:00", "+10:00", "+11:00", "+13:00", "-", "-02:00", "-03:00", "-04:00", "-05:00", "-06:00", "-07:00", "-08:00", "-09:00", "-10:00"]

                num = int(input(f"\n{yellow}[?]~>{red}inter code timezone : "))
                if num not in range(1, 26):
                    raise IndexError
                text = ""
                time = x[num - 1]
                res = requests.get(f"http://www.insecam.org/en/bytimezone/{time}", headers=headers)
                last_page = re.findall(r'pagenavigator\("\?page=", (\d+)', res.text)[0]

                for page in range(int(last_page)):
                    res = requests.get(f"http://www.insecam.org/en/bytimezone/{time}/?page={page}", headers=headers)
                    find_ip = re.findall(r"http://\d+\.\d+\.\d+\.\d+:\d+", res.text)
                    print(f"""\n{bold + yellow}@Mohammadmahdi_termux""")
                    print(green + "")

                    for ip in find_ip:
                        print(ip)

            except:
                print(red + " !ERORR❌ ")

        elif choice == 2:
            clear_terminal()
            try:
                type_text(loc_n)

                loc = ["Server", "Farm", "Restaurant", "Park", "Brid", "Beach", "Bridge", "Sport", "Shop", "Airline", "Hotel", "hq", "Village", "Road", "Pool", "Surfing", "Parking", "Traffic"]

                headers = {
                    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36"
                }

                num = int(input(f"\n{yellow}[?]~>{red}inter a number : "))
                if num not in range(1, 19):
                    raise IndexError

                text = ""
                loc = loc[num - 1]
                res = requests.get(f"http://www.insecam.org/en/bytag/{loc}", headers=headers)

                last_page = re.findall(r'pagenavigator\("\?page=", (\d+)', res.text)[0]

                for page in range(int(last_page)):
                    res = requests.get(f"http://www.insecam.org/en/bytag/{loc}/?page={page}", headers=headers)

                    find_ip = re.findall(r"http://\d+.\d+.\d+.\d+:\d+", res.text)
                    print(f"""\n{bold + yellow}@Mohammadmahdi_termux""")
                    print(green + "")

                    for ip in find_ip:
                        print(ip)

            except:
                print(red + " !ERORR❌ ")

        elif choice == 3:
            clear_terminal()
            try:
                type_text(coun_n)
                countries = ["US", "JP", "IT", "KR", "FR", "DE", "TW", "RU", "GB", "NL", "CZ", "TR", "AT", "CH", "ES", "CA", "SE", "IL", "PL", "IR", "NO", "RO", "IN", "VN", "BE", "BR", "BG", "ID", "DK", "AR", "MX", "FI", "CN", "CL", "ZA", "SK", "HU", "IE", "EG", "TH", "UA", "HK", "GR", "PT", "MY", "TN", "NZ", "BD", "PA", "MD", "NI", "MT", "TT", "SA", "HR", "CY", "PK", "AE", "KZ", "KW", "GE", "SV", "LU", "PR", "CR", "BY", "AL", "LI", "BA", "PY", "PH", "FO", "GT", "NP", "PE", "UY", "AD", "AG", "AM", "AO", "AU", "AW", "AZ", "BB", "BS", "BW", "CG", "CI", "DZ", "GA", "GL", "GP", "GU", "GY", "HN", "JM", "JO", "KE", "KH", "KN", "KY", "LA", "LB", "LK", "MA", "MG", "MK", "MN", "MO", "MQ", "MU", "NA", "NC", "NG", "QA", "RE", "SD", "SN", "SR", "ST", "SY", "TZ", "UG", "UZ", "VC", "BJ"]

                num = int(input(f"{yellow}[?]~>{red}inter code country : "))
                if num not in range(1, 128):
                    raise IndexError

                text = ""
                country = countries[num - 1]
                res = requests.get(f"http://www.insecam.org/en/bycountry/{country}", headers=headers)
                last_page = re.findall(r'pagenavigator\("\?page=", (\d+)', res.text)[0]
                for page in range(int(last_page)):
                    res = requests.get(f"http://www.insecam.org/en/bycountry/{country}/?page={page}", headers=headers)
                    find_ip = re.findall(r"http://\d+.\d+.\d+.\d+:\d+", res.text)
                    print(f"""\n{bold + yellow}@Mohammadmahdi_termux""")
                    print(green + "")

                    for ip in find_ip:
                        print(ip)

            except:
                print(red + " !ERORR❌ ")

        elif choice == 4:
            clear_terminal()
            green = "\x1b[1;92m"
            cyan = "\x1b[1;96m"
            yellow = "\x1b[1;93m"
            magenta = "\x1b[1;95m"
            white = "\x1b[1;97m"
            blue = "\x1b[1;94m"
            red = '\x1b[1;91m'
            underline = '\033[4m'
            pink = '\033[35m'
            bold = '\033[1m'
            black = '\033[30m'

            try:
                type_text(cam_n)

                MFs = ["DLink", "DLink-DCS-932", "TPLink", "Foscam", "Linksys", "Sony", "Sony-CS3", "Vije", "Mobotix", "Panasonic", "Megapixel", "ChannelVision"]

                num = int(input(f"\n{yellow}[?]~>{red}inter a number : "))
                if num not in range(1, 13):
                    raise IndexError

                text = ""
                MF = MFs[num - 1]
                res = requests.get(f"http://www.insecam.org/en/bytype/{MF}", headers=headers)

                last_page = re.findall(r'pagenavigator\("\?page=", (\d+)', res.text)[0]

                for page in range(int(last_page)):
                    res = requests.get(f"http://www.insecam.org/en/bytype/{MF}/?page={page}", headers=headers)

                    find_ip = re.findall(r"http://\d+.\d+.\d+.\d+:\d+", res.text)
                    print(f"""\n{bold + yellow}@Mohammadmahdi_termux""")
                    print(green + "")

                    for ip in find_ip:
                        print(ip)

            except:
                print(red + " !ERORR❌ ")

    else:
        print(f"""{red}Please enter a number""")

    # To go back to the first house
    go_back = input(f"""{bold}{yellow}Do you want to step out of the tool?!  {green}n{white} / {red}y{blue} {white}: """)
    if go_back.lower() not in ['no', 'n']:
        print(f"""{red}Thanks for choosing me, don't forget to {yellow}star⭐️""")
        break
    else:
        clear_terminal()


Me gustaria que @Anon exprese su opinion por aqui.

Gracias a todos.
Todos esos que van de repositorio en repositorio, y de ejecutable en ejecutable con herramientas de como hackear cosas tarde o temprano se tienen que comer un troyano para aprender. Cientos de este foro se han comido un stealer, no sé si de algo publicado en el foro o no, pero se lo han comido enterito (sin exagerar).
 

HxckzLxb2

Con el miembro muy activo
Noder
Todos esos que van de repositorio en repositorio, y de ejecutable en ejecutable con herramientas de como hackear cosas tarde o temprano se tienen que comer un troyano para aprender. Cientos de este foro se han comido un stealer, no sé si de algo publicado en el foro o no, pero se lo han comido enterito (sin exagerar).
La cosa es saber qué estás ejecutando, si no, te puedes comer cosas así.

Encima esto es un script inutil que saca ips de camaras de un sitio publico, entiendo que es una prueba para ver si la gente se lo come o no, y hacer algo realmente peligroso en el futuro…
 
  • Like
Reacciones : destapeman y Dark

Matamataos

The Anxious Generation
Noderador
Nodero
Noder
Pero que coño os pasa a todo el mundo con hacer clickbait en todo en el foro? Ganáis algo de verdad?

Muy buen aporte y esta muy guay todo tío, pero de verdad que coño esta pasando..

En vez de ser bueno esto para el foro, solo llama a scriptkiddies y la gente que tiene minimos conocimientos se pira.

SI, estoy generalizando y losiento Hxckz y posteazo, pero el titulo cabron...

Buen post
 
  • Like
Reacciones : HxckzLxb2

Great Chungus

Uganda Knuckles pero con nodo
Moderador
Jinete de Nodo
Burgués de Nodo
Noderador
Nodero
Noder
Buenas a todos chavales.
Vengo del post de @ElFari, de la herramienta de hacking CCTV (https://github.com/mohammadmahdi-termux/hackCCTV/).
El tema es que tras meterme a ver el codigo, me he dado cuenta de que estaba ofuscado. Apuesto a que el 99% de los que habeis probado la herramienta la habeis ejecutado sin mirar nada y asi como asi...
Pues yo no iba a ejecutar un script ofuscado, puede ser cualquier cosa, la cual te comes y no te enteras.

Os voy a compartir el proceso que he seguido para desofuscar el script (bastante sencillo por cierto, deja mucho que desear del creador)

OS TENGO QUE DECIR QUE AHORA TIENEN ACCESO A VUESTRO EQUIPO Y QUE TIENEN TODOS VUESTROS DATOS. PARA SOLUCIONARLO, SIGUE LEYENDO Y HAZ EL PROCESO.

Vale. Que he hecho? Pues basicamente en el script original hay 1300 lineas vacias y una ultima con codigo:

Python:
_ = lambda __ : __import__('zlib').decompress(__import__('base64').b64decode(__[::-1]));exec((_)(b'==gGvi5Uf0///9Z+KxNGabuYGb9EeGVO9t9QudZHmAlaukQjT3FcV0CFuD917ttASICHLXD/OBoVIgAEoiQw3rvM7fGD...

En esta linea se ve que algo se esta decodificando de base64, y descomprimiendo con zlib, para posteriormente ejecutarse.
Vale. Pues he decodificado el base64 y descomprimido con zlib, y que sorpresa, me devuelve otro exec() con otro string codificado de igual manera.
Pues nada, mientras siga devolviendo codificado, seguimos decodificando, y cuando ya devuelva algo interesante, lo guardaremos a un archivo.

Este es el codigo que he hecho para deofuscar todo esto:

Python:
import base64, zlib

encodedData = b'obfuscated code...'
decoded = base64.b64decode(encodedData[::-1])
decompressed = zlib.decompress(decoded)



decoded = decompressed.decode()

while decoded.startswith('exec'):
    try:
        encodedData = decoded.replace("exec((_)(b'", "").replace("'))", "")
        decoded = base64.b64decode(encodedData[::-1])
        decompressed = zlib.decompress(decoded)
        decoded = decompressed.decode()
    except:
        print(decoded)
        break

decodedLines = {}

print("DEOBFUSCATED. SAVING IT")
with open("result.py", "w", encoding='utf-8') as result_file:
    result_file.write(decoded)

Esto nos devuelve codigo ya legible, pero otra vez con partes codificadas de igual manera.
Me parecia un coñazo automatizarlo asi que simplemente he ido reemplazando el "obfuscated code..." con el string codificado de la parte afectada y reemplazando las partes ofuscadas en el archivo, hasta tener el codigo completo de forma legible.

15 minutos he necesitado para deofuscar esto.

Podeis estar tranquilos, la herramienta no parece maliciosa. Nadie tiene vuestros datos ni acceso a vuestro PC. El objetivo de este post es concienciar sobre que mierdas ejecutais sin mirar... En el proximo spoiler dejo el codigo deofuscado de la herramienta

Python:
import os
import time
import subprocess
from logos import *
import requests
import re
import sys

def install_libraries():
    print('\x1b[1;96mInstalling library...')
    time.sleep(0.3)
    clear_terminal()

    print('\x1b[1;96mInstalling library....')
    time.sleep(0.3)
    clear_terminal()

    print('\x1b[1;96mInstalling library.....')
    time.sleep(0.3)

def install_dependencies():
    subprocess.run('pip install --upgrade pip', shell=True)

    try:
        import requests, re
    except ImportError:
        os.system('pip install requests')
        os.system('pip install re')

install_libraries()
install_dependencies()

clear_terminal()

while True:
    type_text(chois)
    user_input = input(f"""{green}$/> {blue}Enter a number :{pink} """)

    def type_text(text):
        for char in text:
            sys.stdout.write(char)
            sys.stdout.flush()
            time.sleep(0.0005)
        print()

    if user_input.isdigit():
        choice = int(user_input)

        if choice == 1:
            clear_terminal()
            try:
                type_text(timeline)

                x = ["+00:00", "+01:00", "+02:00", "+03:00", "+03:30", "+04:00", "+05:00", "+05:30", "+06:00", "+07:00", "+07:00", "+08:00", "+09:00", "+10:00", "+11:00", "+13:00", "-", "-02:00", "-03:00", "-04:00", "-05:00", "-06:00", "-07:00", "-08:00", "-09:00", "-10:00"]

                num = int(input(f"\n{yellow}[?]~>{red}inter code timezone : "))
                if num not in range(1, 26):
                    raise IndexError
                text = ""
                time = x[num - 1]
                res = requests.get(f"http://www.insecam.org/en/bytimezone/{time}", headers=headers)
                last_page = re.findall(r'pagenavigator\("\?page=", (\d+)', res.text)[0]

                for page in range(int(last_page)):
                    res = requests.get(f"http://www.insecam.org/en/bytimezone/{time}/?page={page}", headers=headers)
                    find_ip = re.findall(r"http://\d+\.\d+\.\d+\.\d+:\d+", res.text)
                    print(f"""\n{bold + yellow}@Mohammadmahdi_termux""")
                    print(green + "")

                    for ip in find_ip:
                        print(ip)

            except:
                print(red + " !ERORR❌ ")

        elif choice == 2:
            clear_terminal()
            try:
                type_text(loc_n)

                loc = ["Server", "Farm", "Restaurant", "Park", "Brid", "Beach", "Bridge", "Sport", "Shop", "Airline", "Hotel", "hq", "Village", "Road", "Pool", "Surfing", "Parking", "Traffic"]

                headers = {
                    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36"
                }

                num = int(input(f"\n{yellow}[?]~>{red}inter a number : "))
                if num not in range(1, 19):
                    raise IndexError

                text = ""
                loc = loc[num - 1]
                res = requests.get(f"http://www.insecam.org/en/bytag/{loc}", headers=headers)

                last_page = re.findall(r'pagenavigator\("\?page=", (\d+)', res.text)[0]

                for page in range(int(last_page)):
                    res = requests.get(f"http://www.insecam.org/en/bytag/{loc}/?page={page}", headers=headers)

                    find_ip = re.findall(r"http://\d+.\d+.\d+.\d+:\d+", res.text)
                    print(f"""\n{bold + yellow}@Mohammadmahdi_termux""")
                    print(green + "")

                    for ip in find_ip:
                        print(ip)

            except:
                print(red + " !ERORR❌ ")

        elif choice == 3:
            clear_terminal()
            try:
                type_text(coun_n)
                countries = ["US", "JP", "IT", "KR", "FR", "DE", "TW", "RU", "GB", "NL", "CZ", "TR", "AT", "CH", "ES", "CA", "SE", "IL", "PL", "IR", "NO", "RO", "IN", "VN", "BE", "BR", "BG", "ID", "DK", "AR", "MX", "FI", "CN", "CL", "ZA", "SK", "HU", "IE", "EG", "TH", "UA", "HK", "GR", "PT", "MY", "TN", "NZ", "BD", "PA", "MD", "NI", "MT", "TT", "SA", "HR", "CY", "PK", "AE", "KZ", "KW", "GE", "SV", "LU", "PR", "CR", "BY", "AL", "LI", "BA", "PY", "PH", "FO", "GT", "NP", "PE", "UY", "AD", "AG", "AM", "AO", "AU", "AW", "AZ", "BB", "BS", "BW", "CG", "CI", "DZ", "GA", "GL", "GP", "GU", "GY", "HN", "JM", "JO", "KE", "KH", "KN", "KY", "LA", "LB", "LK", "MA", "MG", "MK", "MN", "MO", "MQ", "MU", "NA", "NC", "NG", "QA", "RE", "SD", "SN", "SR", "ST", "SY", "TZ", "UG", "UZ", "VC", "BJ"]

                num = int(input(f"{yellow}[?]~>{red}inter code country : "))
                if num not in range(1, 128):
                    raise IndexError

                text = ""
                country = countries[num - 1]
                res = requests.get(f"http://www.insecam.org/en/bycountry/{country}", headers=headers)
                last_page = re.findall(r'pagenavigator\("\?page=", (\d+)', res.text)[0]
                for page in range(int(last_page)):
                    res = requests.get(f"http://www.insecam.org/en/bycountry/{country}/?page={page}", headers=headers)
                    find_ip = re.findall(r"http://\d+.\d+.\d+.\d+:\d+", res.text)
                    print(f"""\n{bold + yellow}@Mohammadmahdi_termux""")
                    print(green + "")

                    for ip in find_ip:
                        print(ip)

            except:
                print(red + " !ERORR❌ ")

        elif choice == 4:
            clear_terminal()
            green = "\x1b[1;92m"
            cyan = "\x1b[1;96m"
            yellow = "\x1b[1;93m"
            magenta = "\x1b[1;95m"
            white = "\x1b[1;97m"
            blue = "\x1b[1;94m"
            red = '\x1b[1;91m'
            underline = '\033[4m'
            pink = '\033[35m'
            bold = '\033[1m'
            black = '\033[30m'

            try:
                type_text(cam_n)

                MFs = ["DLink", "DLink-DCS-932", "TPLink", "Foscam", "Linksys", "Sony", "Sony-CS3", "Vije", "Mobotix", "Panasonic", "Megapixel", "ChannelVision"]

                num = int(input(f"\n{yellow}[?]~>{red}inter a number : "))
                if num not in range(1, 13):
                    raise IndexError

                text = ""
                MF = MFs[num - 1]
                res = requests.get(f"http://www.insecam.org/en/bytype/{MF}", headers=headers)

                last_page = re.findall(r'pagenavigator\("\?page=", (\d+)', res.text)[0]

                for page in range(int(last_page)):
                    res = requests.get(f"http://www.insecam.org/en/bytype/{MF}/?page={page}", headers=headers)

                    find_ip = re.findall(r"http://\d+.\d+.\d+.\d+:\d+", res.text)
                    print(f"""\n{bold + yellow}@Mohammadmahdi_termux""")
                    print(green + "")

                    for ip in find_ip:
                        print(ip)

            except:
                print(red + " !ERORR❌ ")

    else:
        print(f"""{red}Please enter a number""")

    # To go back to the first house
    go_back = input(f"""{bold}{yellow}Do you want to step out of the tool?!  {green}n{white} / {red}y{blue} {white}: """)
    if go_back.lower() not in ['no', 'n']:
        print(f"""{red}Thanks for choosing me, don't forget to {yellow}star⭐️""")
        break
    else:
        clear_terminal()


Me gustaria que @Anon exprese su opinion por aqui.

Gracias a todos.
Buen post, esperando más así 💯
 
  • Maravilloso
Reacciones : HxckzLxb2

anguloso

5g causa cancer
Jinete de Nodo
Burgués de Nodo
Noderador
Nodero
Noder
Todos esos que van de repositorio en repositorio, y de ejecutable en ejecutable con herramientas de como hackear cosas tarde o temprano se tienen que comer un troyano para aprender. Cientos de este foro se han comido un stealer, no sé si de algo publicado en el foro o no, pero se lo han comido enterito (sin exagerar).
los programas de adobe piratas los carga el diablo 😭
 
  • Like
Reacciones : HxckzLxb2

HxckzLxb2

Con el miembro muy activo
Noder
Pero que coño os pasa a todo el mundo con hacer clickbait en todo en el foro? Ganáis algo de verdad?

Muy buen aporte y esta muy guay todo tío, pero de verdad que coño esta pasando..

En vez de ser bueno esto para el foro, solo llama a scriptkiddies y la gente que tiene minimos conocimientos se pira.

SI, estoy generalizando y losiento Hxckz y posteazo, pero el titulo cabron...

Buen post
Al menos que se lleven un susto tío jajaja
 

destapeman

FUCK PUSSYS, YES BADASS
Moderador
Paladín de Nodo
Jinete de Nodo
Burgués de Nodo
Noderador
Nodero
Noder
Pero que coño os pasa a todo el mundo con hacer clickbait en todo en el foro? Ganáis algo de verdad?

Muy buen aporte y esta muy guay todo tío, pero de verdad que coño esta pasando..

En vez de ser bueno esto para el foro, solo llama a scriptkiddies y la gente que tiene minimos conocimientos se pira.

SI, estoy generalizando y losiento Hxckz y posteazo, pero el titulo cabron...

Buen post
A mi personalmente no me ha parecido mal, lo veo hasta ético en este tipo de contenidos. Pretender llamar la atención de una forma tan escandalosa para un tema tan serio como es el ejecutar software de terceros no me parece malo.
 
  • Like
  • Maravilloso
Reacciones : Anon y HxckzLxb2

zuzi.uwu

No me toquéis los colores. -.-
Nodero
Noder
Jjajjjajajjajjjajjjajajajajjajjajjajjjjjajjajjjjajajjajjjajajajja que puta lástima q no haya infectado a medio foro por gitanos, debéis de pagar las deudas aunque sea minando para vietnamitas
 
  • Hahaha
  • Diablo
Reacciones : Anon y HxckzLxb2