Просмотр полной версии : Скрытие ключа шифрования во вшитой SWF
caseyryan
05.08.2012, 16:49
Вчера задумался над вопросом шифрования своих SWF файлов для защиты от декомпиляторов. По-быстренькому нагуглил, насколько мне кажется, довольно интересный способ.
Зашифровал несколько файлов для теста, написал предзагрузчик в который заэмбэддил SWF файл с ключом для дешифрации, самим дешифрующим методом и библиотеками шифровальщика. В предзагрузчике хранится лишь интерфейс который применяет дешифратор. После загрузки байтов дешифратора, создается новый объект
var decryptor:IDecryptor = e.target.content as IDecryptor;
var decryptedBytes:ByteArray = decryptor.decrypt(assetBytes);
и уже ему скармливаются байты шифрованной SWF для дешифрации.
Все работает на ура. Проверил парой декомпиляторов, они видят мой дешифратор лишь как ByteArrayAsset и больше ничего.
И вот тут возник вопрос: неужели это "панацея"? Оо Или все-таки есть методы декомпилировать файл так, чтобы и вложенный SWF был виден?
п.с. Я конечно понимаю, что можно выдернуть уже расшифрованный файл из памяти и вообще не искать ключ. Но не нужно здесь говорить об этом, так как такой метод доступен лишь профессионалам, и начинающий хакер вряд ли сможет до этого допереть.
п.с. Я конечно понимаю, что можно выдернуть уже расшифрованный файл из памяти и вообще не искать ключ. Но не нужно здесь говорить об этом, так как такой метод доступен лишь профессионалам, и начинающий хакер вряд ли сможет до этого допереть.
на хабре (http://habrahabr.ru/post/110686/) по этому поводу 7пп.
caseyryan
05.08.2012, 17:09
Я это читал уже давно. Статья не новая. Просто стало интересно, может уже появились за это время какие-то инструменты, о которых я не знаю.
Просто я никогда не храню настолько важную информацию в SWF ради которой кто-то решится потратить кучу времени на написание подобных дешифраторов. А вот любителей поиграться с декомпиляторами полно.
Проблема не в уровне того кто ломает, а в том что он может выложить готовый способ/программу для взлома в общий доступ. Сам способ ломается минут за 15, с запасом, используя ваш же дешифратор.
caseyryan
05.08.2012, 17:25
а в том что он может выложить готовый способ/программу для взлома в общий доступ. Сам способ ломается минут за 15, с запасом, используя ваш же дешифратор.
Вот в этом и был вопрос. Есть ли уже готовые проги для этого в общем доступе? Способ-то не мной придуман, наверняка уже многие задавались таким вопросом. Гугл на эту тему лишь выдает ссылки на сам способ шифрования, но вот подобной проги я так и не нагуглил.
Возможно просто составлял не правильные запросы, или не достаточно глубоко копал
Как только этот способ стандартизируют, так проги и появятся. :) Пока эти все шифровки уникальны, ни о какой универсальности речи не идет.
caseyryan
05.08.2012, 17:38
Шифровки да, а вот вложение SWF в другие SWF уже другой вопрос.
Не скрою, сам частенько декомпилировал разные интересные мне приложения. И много раз натыкался на точно такой же способ дешифрации. Ключ и алгоритм шифрования 100% хранятся внутри вложенных SWF, т.е. по сути, все что нужно - это как-то вытащить вложенную SWF. А дальше уже дело нескольких минут написать дешифратор. Но так как мной всегда управляло лишь любопытство, то натыкаясь на это, я обычно прекращал копаться в этих файлах и тратить на них время.
Так что если вытищить SWF каким-то простым способом нельзя, я буду спокоен :)
alatar, собирался тоже самое сказать:)
caseyryan, в вашем случае свой дешифратор писать не придется, можно использовать ваш же готовый класс дешифратора. Он на блюдечке вернет расшифрованный файл готовый к сохранению.
caseyryan
05.08.2012, 18:05
А как до него добраться?
Декомпилировать ваш загрузчик и выдрать из него (прям как набор байт и выдрать), загрузить в своем проекте и использовать (к интерфайсу можно и не приводить, имя метода узнать из декомпилированного кода).
Добавлено через 1 минуту
Если ваш декодер объявлен в public, то можно сделать предзагрузчик.
caseyryan
05.08.2012, 18:17
прям как набор байт и выдрать
Существующие декомпиляторы это могут?
имя метода узнать из декомпилированного кода
Если интерфейс убрать, то в декомпилированном коде нет имени метода. Есть только пустой класс, который расширяет ByteArrayAsset
Если ваш декодер объявлен в public, то можно сделать предзагрузчик.
Естественно он объявлен как private
Существующие декомпиляторы это могут?
Специально не интересовался, но я удивлюсь если нет.
Если интерфейс убрать, то в декомпилированном коде нет имени метода
Вы же его где-то вызываете?
caseyryan
05.08.2012, 18:33
Специально не интересовался, но я удивлюсь если нет.
Sothink не может
Вы же его где-то вызываете?
Да. Не подумал :D
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.