Привет, Хабр!
Хочу поделиться историей разработки и последним обновлением нашего проекта — ChameleonLab. Это кроссплатформенное десктопное приложение для стеганографии и стегоанализа. С момента первого релиза мы не только добавили новые функции, но и столкнулись с целым рядом интересных технических вызовов, решениями которых и хотим поделиться.
И, конечно же, мы наконец-то готовы представить версии как для macOS, так и для Windows.

Сила сообщества: работа над ошибками
Когда первая версия нашего приложения разошлась по Хабру и торрент-трекерам, мы получили то, на что даже не рассчитывали — шквал обратной связи. Нам стали приходить десятки отчетов о сбоях, скриншоты с багами, подробные описания недочетов и, что самое ценное, — свежие идеи по развитию.
В этот момент мы поняли, что наша программа далека от совершенства. Стало очевидно: в одиночку можно создать работающий инструмент, но сделать по-настоящему качественный и стабильный продукт без сообщества — невозможно.
Именно ваши отзывы и стали главной движущей силой для этого релиза. Каждое исправление и каждая новая функция — это результат нашего с вами диалога.
Что нового в версии 1.4.0.0?
Мы сосредоточились на улучшении пользовательского опыта и расширении аналитических инструментов.
🎨 Светлая и тёмная темы
Понимая, что разработчики и специалисты по безопасности часто работают по ночам, мы добавили полноценную поддержку светлой и тёмной тем. Интерфейс полностью адаптируется, чтобы снизить нагрузку на глаза.

🌍 Локализация (RU/EN)
Приложение теперь доступно на двух языках — русском и английском, с возможностью переключения на лету.

🛡️ Полная автономность
ChameleonLab не требует подключения к интернету. Вся обработка данных, шифрование и анализ происходят исключительно на вашем устройстве, что гарантирует полную конфиденциальность и безопасность ваших данных.
HASH: Анализатор хешей
Появился новый инструмент — "Анализатор хешей". Его цель — наглядно продемонстрировать лавинный эффект хеш-функций (MD5, SHA256 и др.). Вы можете ввести две почти одинаковые строки и увидеть, как даже изменение одного бита в исходных данных кардинально меняет финальный хеш, с подсветкой различающихся битов.

Под капотом: Трудности и решения
Путь к этому релизу был тернист.
Битва с «зомби»-потоками при закрытии приложения
Собранное под macOS приложение стабильно падало при закрытии с ошибкой EXC_CRASH (SIGABRT)
. Причина — некорректное завершение фоновых потоков (для пакетного и HEX-анализа), которые оставались работать после закрытия главного окна.
Решение: Мы полностью переписали метод closeEvent
, реализовав надежную и последовательную процедуру остановки потоков: вежливый запрос на завершение (.quit()
), ожидание с таймаутом в 3 секунды (.wait(3000)
), и только в крайнем случае — принудительное прерывание (.terminate()
).
Вот фрагмент кода из ui/main_
window.py
:
# ui/main_window.py
def closeEvent(self, event):
print("Closing application. Stopping threads...")
# 1. Собираем список всех потенциальных потоков
threads_to_stop = []
# ... (код для безопасного сбора всех потоков) ...
# 2. Корректно останавливаем каждый поток
for thread in threads_to_stop:
if thread.isRunning():
thread.quit()
# Ждем до 3 секунд, иначе завершаем принудительно
if not thread.wait(3000):
print(f"Thread {thread} did not stop gracefully. Terminating.")
thread.terminate()
thread.wait()
print("All threads stopped. Closing.")
self.tray_icon.hide()
event.accept()
Это полностью решило проблему с падениями при выходе.
Последняя миля — сборка с PyInstaller
Сборка под Windows преподнесла сюрприз: .exe
файл получался очень маленьким и не запускался. Оказалось, что в .spec
файле была ошибочная опция exclude_binaries=True
, которая запрещала включать в сборку все нужные .dll
. После ее удаления и корректной настройки datas
все заработало.
Финальный .spec
файл для Windows теперь выглядит так:
# ChameleonLab.spec (фрагмент)
a = Analysis(
['main.py'],
datas=[
('chameleon.png', '.'), # Иконка
('styles', 'styles'), # Папка со стилями
('icons', 'icons') # Папка с иконками
],
# ...
)
exe = EXE(
# ...
console=False, # Для GUI-приложения
icon='icons\\cha.ico',
version='version.txt' # Информация о версии из файла
)
Пасхалка: Классика всегда в моде
Какая же программа без "пасхалки"? Чтобы немного отвлечься от анализа данных, мы встроили в приложение классический Тетрис!
Мы решили не делать очевидную кнопку в меню. Игра спрятана. Скажем так: для самых внимательных и любопытных пользователей наш хамелеон в углу экрана не так прост, как кажется...

Системные требования
Чтобы приложение работало стабильно, ваша операционная система должна соответствовать минимальным требованиям.
Windows: Windows 10 (версия 1809 и новее) и Windows 11.
Почему? Приложение использует современный графический фреймворк PyQt6 (Qt 6), который официально прекратил поддержку Windows 7 и 8.1 для обеспечения лучшей производительности и доступа к новым API.
macOS: macOS 11 (Big Sur) и все более новые версии (Monterey, Ventura, Sonoma и т.д.).
Почему? Аналогично, Qt 6 требует для работы как минимум macOS Big Sur. Это обеспечивает полную совместимость как с компьютерами на базе Intel, так и с новыми Mac на Apple Silicon (M1/M2/M3).
Заключение
Этот релиз — прямое доказательство того, что сделать по-настоящему качественный продукт без помощи сообщества нереально. Мы продолжим прислушиваться к вам и развивать ChameleonLab. Огромное спасибо за ваше участие и помощь!
Скачать:
Скачать последнюю версию на Windows: ChameleonLab 1.4.0.0
Скачать последнюю версию на macOS: ChameleonLab 1.4.0.0
Наш Telegram-канал: t.me/ChameleonLab
Будем рады вашим отзывам и вопросам в комментариях!