Вся правда о Warden Software
Здраствуйте, я владелец проектов таких как: Timoria и Hikari, так же известный под именем @TupoyOle_N.
Начнем мы пожалуй с того насколько легко было взломать софт Warden, как сказал мой знакомый: "Тебе было скучно и ты ногой сломал их софты", после получения доступа к исходному коду находясь под рутом, ниже пруф:
Я начал искать софт, в папке /home я нашел вот такие прекрасные папочки а в них и сурс код:
Простите за выражение, но этот кусок говна не был даже обернут в докер, все что происходило это запускался баш скрипт на 2 строчки для запуска софта при заходе, автор даже не умудрился прописать clear в нем, по этому при первом заходе в софт отобразилась статистика хоста и "Last Login IP" в котором я сразу же увидел айпи (как я сначала подумал его) после уже выяснилось что это был айпи его администратора. Полная безответсвенность и незащищенность системы, после захода в файл main.py Wardena сразу стало все понятно:
from textual.app import App, ComposeResult
from textual.containers import Vertical, Horizontal, Container, ScrollableContainer
from textual.screen import Screen, ModalScreen
from textual.widgets import Button, Input, Label, Static
WKGPO3G = "7130119860:5NaafgdW"
return "Минимальное количество для запроса 3 символа"
return "Подождите 30 секунд перед запросом!"
url = "https://server.leakosint.com/"
response = requests.post(url, json=data)
return "Нет подключения к серверу!"
for source, details in results["List"].items():
if source == "Нет Результатов!":
output.append("Информации не найдено")
for item in details.get("Data", []):
max_key_length = max(len(key) for key in item.keys()) if item else 0
for key, value in item.items():
output.append(f"│ {key:<{max_key_length + 3}} • {value.rstrip()}")
if "Нет Результатов!" not in results["List"]:
output.append("• • • • • • • •")
except requests.exceptions.RequestException:
return "Ошибка при запросе к серверу"
return "• При повторном поиске, так-же ничего не найдено! "
class ResultScreen(ModalScreen[None]):
def __init__(self, result_text: str = "", **kwargs):
self.result_text = result_text
def compose(self) -> ComposeResult:
with Container(id="result-screen-container"):
yield Label(self.result_text, id="result-label")
yield Button("Exit", id="result-exit")
def update_result(self, new_text: str):
self.query_one("#result-label", Label).update(new_text)
class Errors(ModalScreen[None]):
def compose(self) -> ComposeResult:
with Container(id="error-screen-container"):
yield Label("Ожидайте, эта функция в разработке", id="result-label")
yield Button("Exit", id="result-exit")
def compose(self) -> ComposeResult:
with Horizontal(classes="button-container"):
yield Button(label="Поиск по TIKTOK", id="tiktok_search")
yield Button(label="Поиск по INSTAGRAM", id="instagram_search")
yield Button(label="Поиск по MAC", id="mac_search")
yield Button(label="Поиск по HWID", id="hwid_search")
with Horizontal(classes="button-container"):
yield Button(label="Поиск по USER-AGENT", id="user_agent_search")
yield Button(label="Поиск по CARD", id="card_search")
yield Button(label="Поиск по DOCUMENT", id="document_search")
yield Button(label="Поиск по DATABASE", id="database_search")
with Horizontal(classes="button-container"):
yield Button(label="Поиск по DISCORD", id="discord_search")
yield Button(label="Поиск по SIGNAL", id="signal_search")
yield Button(label="Поиск по EMAIL", id="email_search")
yield Button(label="Поиск по IMEI", id="imei_search")
with Horizontal(classes="button-container"):
yield Button("<<", id="zerotextbutton")
yield Button(label="Поиск по GPS Cords", id="gps_cords_search")
yield Button(label="Поиск по UDID", id="udid_search")
yield Button(">>", id="threenextbutton")
with Horizontal(classes="search-container"):
yield Button(label="Искать", classes="search-button", variant="success", id="search_button")
yield Input(placeholder="Введите запрос", classes="search-input", id="search_input")
class WardenPageThree(Screen):
def compose(self) -> ComposeResult:
with Horizontal(classes="button-container"):
yield Button(label="Поиск по POLICY", id="policy_search")
yield Button(label="Поиск по OSAGO", id="osago_search")
yield Button(label="Поиск по CONTRACT", id="contract_search")
yield Button(label="Поиск по LICENSE", id="license_search")
with Horizontal(classes="button-container"):
yield Button(label="Поиск по GIS", id="gis_search")
yield Button(label="Поиск по GMP", id="gmp_search")
yield Button(label="Поиск по EGRUL", id="egrul_search")
yield Button(label="Поиск по EGRIP", id="egrip_search")
with Horizontal(classes="button-container"):
yield Button(label="Поиск по RDTS", id="rdts_search")
yield Button(label="Поиск по VIN", id="vin_search")
yield Button(label="Поиск по BASIC INFO", id="basic_info_search")
yield Button(label="Поиск по RFID", id="rfid_search")
with Horizontal(classes="button-container"):
yield Button("<<", id="onetextbutton")
#yield Button(label="Поиск по IMSI", id="imsi_search")
yield Button(label="Поиск по OK", id="ok_search")
yield Button(label="Поиск по IMSI", id="imsi_search")
yield Button("Switch Style", id="switch_button")
with Horizontal(classes="search-container"):
yield Button(label="Искать", classes="search-button", variant="success", id="search_button")
yield Input(placeholder="Введите запрос", classes="search-input", id="search_input")
def compose(self) -> ComposeResult:
with Horizontal(classes="button-container"):
yield Button(label="Universal Search", id="universal_search")
yield Button(label="Поиск по F.I.O", id="fio_search")
yield Button(label="Поиск по NUMBER", id="number_search")
yield Button(label="Поиск по WEBSITE", id="website_search")
with Horizontal(classes="button-container"):
yield Button(label="Поиск по DOMEN", id="domen_search")
yield Button(label="Поиск по IP", id="ip_search")
yield Button(label="Поиск по NICK", id="nick_search")
yield Button(label="Поиск по LOGIN", id="login_search")
with Horizontal(classes="button-container"):
yield Button(label="Поиск по PASSWORD", id="password_search")
yield Button(label="Поиск по INN", id="inn_search")
yield Button(label="Поиск по SNILS", id="snils_search")
yield Button(label="Поиск по PASSPORT", id="passport_search")
with Horizontal(classes="button-container"):
yield Button(label="Поиск по VK", id="vk_search")
yield Button(label="Поиск по TELEGRAM", id="telegram_search")
yield Button(label="Поиск по FACEBOOK", id="facebook_search")
yield Button(">>", classes="next-page-button", id="onetextbutton")
with Horizontal(classes="search-container"):
yield Button(label="Искать", classes="search-button", variant="success", id="search_button")
yield Input(placeholder="Введите запрос", classes="search-input", id="search_input")
def compose(self) -> ComposeResult:
yield Button("Request", id="zerotextbuttons")
yield Label(" ▄█ █▄", id="wardenonepart")
yield Label("███ ███", id="wardentwopart")
yield Label("███ ███", id="wardenthreepart")
yield Label("███ ███", id="wardenfourpart")
yield Label("███ ███", id="wardenfivepart")
yield Label("███ ███", id="wardensixpart")
yield Label("███ ▄█▄ ███", id="wardensevenpart")
yield Label(" ▀███▀███▀", id="wardeneightpart")
@on(Button.Pressed, "#zerotextbuttons")
@on(Button.Pressed, "#switch_button")
@on(Button.Pressed, "#zerotextbutton")
@on(Button.Pressed, "#onetextbutton")
def switch_to_two(self) -> None:
@on(Button.Pressed, "#threenextbutton")
def switch_to_three(self) -> None:
@on(Button.Pressed, "#result-exit")
def close_modal(self) -> None:
@on(Input.Changed, "#search_input")
def limit_input_digits(self, event):
if input_widget.placeholder == "Введите номер (макс. 12 символов)":
value = value.replace("+", "")
value = '+' + ''.join(filter(str.isdigit, value))
input_widget.value = value[:13]
@on(Button.Pressed, "#number_search")
def set_max_digits(self) -> None:
input_widget = self.query_one("#search_input", Input)
input_widget.placeholder = "Введите номер (макс. 12 символов)"
@on(Button.Pressed, "#universal_search")
@on(Button.Pressed, "#fio_search")
@on(Button.Pressed, "#domen_search")
@on(Button.Pressed, "#ip_search")
@on(Button.Pressed, "#nick_search")
@on(Button.Pressed, "#login_search")
@on(Button.Pressed, "#password_search")
@on(Button.Pressed, "#inn_search")
@on(Button.Pressed, "#snils_search")
@on(Button.Pressed, "#passport_search")
@on(Button.Pressed, "#vk_search")
@on(Button.Pressed, "#telegram_search")
@on(Button.Pressed, "#facebook_search")
@on(Button.Pressed, "#tiktok_search")
@on(Button.Pressed, "#instagram_search")
@on(Button.Pressed, "#mac_search")
@on(Button.Pressed, "#hwid_search")
@on(Button.Pressed, "#user_agent_search")
@on(Button.Pressed, "#card_search")
@on(Button.Pressed, "#document_search")
@on(Button.Pressed, "#database_search")
@on(Button.Pressed, "#discord_search")
@on(Button.Pressed, "#signal_search")
@on(Button.Pressed, "#imei_search")
@on(Button.Pressed, "#gps_cords_search")
@on(Button.Pressed, "#udid_search")
@on(Button.Pressed, "#policy_search")
@on(Button.Pressed, "#osago_search")
@on(Button.Pressed, "#contract_search")
@on(Button.Pressed, "#license_search")
@on(Button.Pressed, "#gis_search")
@on(Button.Pressed, "#gmp_search")
@on(Button.Pressed, "#egrul_search")
@on(Button.Pressed, "#egrip_search")
@on(Button.Pressed, "#rdts_search")
@on(Button.Pressed, "#vin_search")
@on(Button.Pressed, "#basic_info_search")
@on(Button.Pressed, "#rfid_search")
@on(Button.Pressed, "#imsi_search")
@on(Button.Pressed, "#ok_search")
@on(Button.Pressed, "#email_search")
def reset_input_placeholder(self) -> None:
input_widget = self.query_one("#search_input", Input)
input_widget.placeholder = "Введите запрос"
@on(Button.Pressed, "#email_search")
def set_email_input(self) -> None:
input_widget = self.query_one("#search_input", Input)
input_widget.placeholder = "Введите Email"
@on(Button.Pressed, "#search_button")
def switch_to_result(self) -> None:
input_widget = self.query_one("#search_input", Input)
if input_widget.placeholder == "Введите Email" and "@" not in input_widget.value:
results = "Ошибка: Введите корректный Email, содержащий символ @"
results_screen = ResultScreen(results)
self.push_screen(results_screen)
elif input_widget.placeholder == "Введите ссылку на Website" and "." not in input_widget.value:
resultss = "Ошибка: Введите корректную ссылку, содержащую ."
resultss_screen = ResultScreen(resultss)
self.push_screen(resultss_screen)
input_widget = self.query_one(".search-input", Input)
result_screen = ResultScreen(result)
self.push_screen(result_screen)
@on(Button.Pressed, "#website_search")
def set_website_input(self) -> None:
input_widget = self.query_one("#search_input", Input)
input_widget.placeholder = "Введите ссылку на Website"
И так, половина функций не рабочая, почему же? потому что абсолютно все запросы отправлялись на апи лик осинта, продолжим, в лик осинте в помине нету этих функций которые указывал Warden, из чего получается что? Варден пиздабол который обманывал свои 40 покупателей софта за 300 рублей на функционал, так же он пробовал огрязнить имя Timoria яко бы он работает хуже, и это говорит человек который продает максимальный говнокод за 13000 рублей, при его просмотре у меня глаза кровью облились. Как оказалось позже покупатели были максимально недовольны софтом варден, ведь как оказывалось функционал не работал, варден полный 0 который без понятия что такое SSH, хостинги, итд. Это подводит нас к тому что это обычный шкодер который не умеет ни-че-го.
И так, подведем итоги:
1. Массовый обман аудитории на функционал и работоспособность.
2. Попытка спиздить интерфейс тимории ( из-за недостающих умений не получилось, чат гпт не вывез).
3. Попытка загрязнении имени тимории своим враньем.
4. Продажа полного говна за 13000.
Так же итогово я бы хотел показать ПОЧЕМУ НЕ СТОИТЬ БРАТЬ ТАКИЕ ГОВНО СОФТЫ, так как может произойти это:
bless - 77.35.202.255 / 77.34.35.101
pososakoxuyako - 176.108.25.75
qk2og4 - 176.59.46.212
Утечка ваших личных данных - как в данном примере показанно айпи адресов пользователей, возможно не все верны так как доставал логи успешных логинов, но все же большинство верны.
Удачного вам дня, ждите новых статей!