Как отредактировать файлы .so, найденные в APK андроида?


37

Я знаю, как перерабатывать обычные APK с Android, используя инструменты APK-tool anddex2jar, но я не знаю, как работать с обфускацией. Может ли кто-нибудь помочь или по крайней мере предоставить некоторые указатели? Я знаю, что это в значительной степени обучает меня, но я действительно не знаю, что посмотреть или где искать. Некоторые примеры будут действительно полезными. Благодаря!

Edit:

Когда я извлечь все из APK, я получаю некоторые SMALI файлы (я попробовал JD-GUI, но строки содержали случайные имена Вероятно, затемненный с помощью Proguard..), Некоторые файлы ресурсов и " .so "в каталоге lib. Как анализировать файл «.so». Я знаю, что файлы SO - это своего рода библиотеки DLL в мире Linux, но какие инструменты можно использовать для анализа файлов SO. Любые ссылки на видео будут очень полезны. :)

Кроме того, как бы я мог обойтись, если бы был файл JAR вместо SO-файла в APK?

+1

Это плохой вопрос, поскольку тема обфускации огромна. Попытайтесь сузить его. 17 июн. 142014-06-17 08:33:39

+1

Что мне делать, чтобы сузить его? 17 июн. 142014-06-17 13:27:49

  0

Попытайтесь сделать это «googlaleble» вопросом. Например: когда я открываю PE, мне не хватает таблицы импорта? Как это может быть? или я заметил, что мой APK упакован с dexprotector, каким будет лучший способ приблизиться к этому? 17 июн. 142014-06-17 19:10:33

  0

@Stolas - см. Мое редактирование. Это сужает его? 18 июн. 142014-06-18 08:28:21

  0

Отлично! Я назначил его для повторного открытия. Когда он будет открыт, я отвечу на вопрос. 18 июн. 142014-06-18 13:30:25

  0

[Android Ninja - Reverse Engineer SO Library?] (Http://icompile.eladkarako.com/reverse-engineer-android-so-library/) ☕ 03 янв. 162016-01-03 00:54:12

55

Файл .so - это скомпилированная библиотека, в большинстве случаев - исходный код C или C++. .so означает Shared Object, он не имеет ничего общего с обфузией, это просто означает, что кто-то написал части приложения в C.

В некоторых случаях существует существующий код C, и это просто проще для программиста создать интерфейс JNI для вызова библиотеки из java; в других случаях программист хочет преимущество скорости, которое скомпилировано с C, над java. И, конечно, если я хочу скрыть, как работает какая-то часть моего приложения, запись на C и компиляция его в .so значительно усложняет обращение.

Если вы хотите отменить андроид .so, эти варианты у вас есть:

  • Купить коммерческую версию IDA Pro. Демо-версии не будут выполняться, поскольку они не могут разобрать ARM-код. Это дорого, но, безусловно, лучший инструмент для работы с неизвестным объектным кодом.
  • Если приложение содержит версии .so для разных аппаратных средств, и если у него есть библиотека для android на x86, вы можете использовать бесплатную версию IDA 5.1, чтобы разобрать ее.
  • Если у вас есть доступ к системе linux, получите gcs toolchain для ARM, который включает objdump, и используйте objdump --disassemble, чтобы получить огромный текстовый файл, содержащий дизассемблированный код. Затем получайте удовольствие от этого текстового файла. Там могут быть gcc toolchains для целей ARM, которые также запускаются на окнах, но я никогда не пробовал.
  • Вы также можете загрузить файл .so в http://onlinedisassembler.com/, чтобы получить дизассемблированный файл, если вы не хотите устанавливать gcc toolchain.

Опасайтесь, однако, во всех этих случаях вам необходимо глубокое понимание архитектуры процессора ARM, языка ассемблера, соглашений JNI и компилятора ABI, чтобы иметь смысл разборки. Приготовьтесь к долгим ночам, если вы неопытный.

  0

Android имеет версию x86, поэтому я думаю, что OP может захватить тот же .so файл с изображения x86 и декомпилировать его 19 июн. 142014-06-19 04:14:13

+1

К сожалению, onlinedisassembler.com имеет ограничение. Максимальный размер загрузки - 256 КБ. 22 июн. 152015-06-22 11:04:31

  0

[Bokken] (https://inguma.eu/projects/bokken) поддерживает ARM тоже, верно? 08 янв. 162016-01-08 00:52:39

  0

~ "** Тогда получайте удовольствие от этого текстового файла. **« Что вы имеете в виду? Каков наилучший способ проверить этот текстовый файл. 01 ноя. 162016-11-01 15:32:33

  0

На самом деле, демонстрационная версия IDA поддерживает ARM (бесплатное приложение не работает). 02 ноя. 162016-11-02 09:25:36

  0

'Готовьтесь к долгим ночам, если вы не ознакомлены .': O 20 дек. 162016-12-20 06:03:07

  0

В Ida Pro есть плагин декомпилятора (Decx-ресивер Hex-Rays), который пытается преобразовать код сборки в код стиля C. Это не работает отлично, но позволяет вам получить общее представление о большинстве функций, не зная код ассемблера/op-коды. 26 дек. 162016-12-26 07:13:44


7

Вы также можете попробовать динамический подход, подключив API и наблюдая аргументы и возвращаемые значения. Это позволит вам просматривать данные, поступающие в криптографические API, что может очень помочь при работе с сетевыми протоколами. Ознакомьтесь с Frida instrumentation toolkit для кросс-платформенного решения с открытым исходным кодом (Android, iOS, Windows, Mac и Linux). Там есть tutorial, показывающий, как создать интерактивный инструмент для инструментария за несколько минут, который вводит код в приложение «Yo» на iOS и разбивает сетевые подключения с помощью Google Maps.

  0

Фрида разобрала бы .so файлы? 11 май. 162016-05-11 22:11:23


13

Помимо предложений Guntram, ознакомьтесь с retargetable decompiler. Он может декомпилировать двоичный код Python или C.По крайней мере, для меня он читается проще, чем чистая сборка (и работает для двоичных файлов ARM).

В настоящее время он имеет только декомпилятор в режиме онлайн, но он отлично работает для рисования грубых действий общего объекта.

  0

это не очень хорошо. Hexrays декомпилятор для победы. 07 янв. 162016-01-07 07:53:40

+1

@ Криптон Почему это ~ "** не очень хорошо **"? 01 ноя. 162016-11-01 15:37:22

+1

Декомпилятор Hexrays работает с IDA Pro. И IDA - лучший инструмент для реверсирования. Это комбо означает гораздо больше, чем просто декомпилятор. 02 ноя. 162016-11-02 03:36:11


1

Использование android-ndk, https://developer.android.com/ndk/downloads/index.html.

Вы можете использовать инструментальные цепочки внутри ndk для выполнения типа разборки, который вы хотите. Напр. если я декомпилировать в APK и получить .so библиотеку из этого, я сделаю:

./android-ndk-r15b/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-objdump -T "SAMPLE.so | less

Чтобы получить objdump.


0

Вы также можете попробовать инструмент Снеговик: https://derevenets.com/.

Снеговик родной код C/C++ декомпилятором

поддерживает ARM, x86 и x86-64 архитектур, как указано на их сайте.

  0

Снеговик, возможно, имеет утечки памяти. Он потребовал 6+ Гб оперативной памяти при декомпиляции небольшого файла .so 03 мар. 182018-03-03 17:06:47