R0 CREW

Возможно ли увидеть реализацию криптоалгоритма в байт-коде?

Всем доброго времени суток! Интересует следующий вопрос - возможно ли увидеть реализацию криптоалгоритма в скомпилированном байт-коде, например Java или Dalvik?
Я имею ввиду распознать константы или увидеть циклы характерные для крипты?
Понятно, что для шифрования используются библиотеки типа crypto.dll и другие…
Как то возможно увидеть ее работу в листинге? или только результат работы библиотеки?

Да, возможно.

Я так понимаю вы не совсем разбираетесь, что такое формат JAR и APK? Это контейнеры в которых находится байт-код. Оба являются ZIP-архивами.

В JAR хранятся файлы с расширением .class, что есть скомпилированные в байт-код исходные файлы Java. Их можно декомпилировать (с помощью JD-Gui) или дизассемблировать (с помощь javap, IDA Pro).

В APK все немного сложнее, там байт-код находится в файле classes.dex. Этот файл можно сконвертировать в JAR-файл или дизассемблировать в smali (ассемблерное представление Dalvik байткода).

Декомпилировав байткод в исходный код Java, можно без особых усилий разобраться со всеми применяемыми алгоритмами. Если ваш код будет обфусцирован, это будет сделать тяжелее. Если будет применена обфускация, которая не позволяет декомпилятору восстановить исходный код, это будет сделать еще тяжелее. В таком случае прибегают к дизассемблированию.

Как выглядит исходный код понятно. Вот так выглядит ассемблерный код Java, а так smali-код:

Если для шифрования используются библиотеки, а не реализации на чистом Java, процесс распознавания упрощается на порядок. Если присмотритесь к картинке выше, то увидите, что там используются классы java.String, android.util.Log. Там же видно использование методов String->valueOf(), Log->i(), Log->е() и константы 0x0. То есть, можно видеть все, что имеет имя (namespace, class, method, etc), в том числе и константы.

Уважаемый Darwin! Огромное спасибо за развернутый и подробный ответ! Возможно к Вам обратиться в личку с вопросом? Заранее спасибо!

Смотря что за вопрос. Защитой java и android я не занимаюсь.