Не могу найти собственные библиотеки, используемые apk на моем телефоне - PullRequest
0 голосов
/ 11 июля 2020

Прежде всего извините за мой engli sh. Это не мой родной язык. Это первый раз, когда я делаю что-то подобное, поэтому я учусь на go.

Контекст: Я пытаюсь понять, как игра, которую я установил из магазина Play, взаимодействует с сервером . Точнее, как указывается параметр c в каждом запросе POST к серверу. Этот HTTP-параметр, называемый "секрет", не может быть легко изменен инженером, поскольку он является своего рода ha sh других параметров для проверки целостности запроса.

Что я сделал :

  1. Я извлек файлы .dex из .apk
  2. Я использовал d2j-dex2jar для извлечения файлов .class.
  3. Я использовал инструмент jd- gui для анализа исходного кода

Что я нашел : это исходный код, который генерирует значение для параметра 'secret':

.method public static native secretForString(Ljava/lang/String;)Ljava/lang/String;
.end method

Из того, что я узнал, java позволяет использовать собственные библиотеки благодаря ключевому слову native . Эти собственные библиотеки загружаются с помощью команды System.loadLibrary(...). В файле Main. java у меня есть вызов этой команды System.loadLibrary("Main");. Если я правильно понял, как это работает, на моем android телефоне есть соответствующий файл .so с именем libMain.so .

Я рутировал свой OnePlus6 и копался в файлах в поисках для этой библиотеки.

Проблема : Я не могу найти эту библиотеку на своем телефоне. Нет связанного файла .so в / data / data //

Вопросы :

  1. Вы можете объяснить, что я делаю неправильно / i ' м отсутствует.
  2. Допустим, я нашел библиотеку, смогу ли я прочитать в ней код или мне понадобится специальный c инструмент?
  3. Если ответ отрицательный, на вопрос 2, можно ли создать небольшое приложение, которое загружает эту c библиотеку и использует ее?

Спасибо за время, которое вы потратите, пытаясь мне помочь: D

1 Ответ

0 голосов
/ 12 июля 2020

Ответ на вопрос 1:

Я обнаружил, что для игры установлено несколько файлов .apk. Моя ошибка заключалась в том, чтобы доверять приложению Apk Extractor, которое предоставило мне только базовый .apk

. Я подключаюсь через S SH к своему телефону и перечисляю все установленные .apk. В папке / data / app / моей игры было установлено несколько .apk!

  • Один был посвящен базовому исходному коду (тот, который я получил из Apk Extractor)
  • Один .apk, в которых хранятся только собственные библиотеки (libMain.so)

Ответ на вопрос 2:

Я использовал команду readelf -s libMain.so | grep '<Name of the function> для получения функции адрес. На выходе получилось что-то вроде этого был использован для компиляции двоичного файла: $> sudo apt-get install binutils-aarch64-linux-gnu

И затем использовал его с помощью этой команды: $> aarch64-linux-gnu-objdump -d libMain.so --start-address=0x3c69b4 Значение start-adress устанавливается с помощью возвращаемого значения первой команды

И теперь у меня есть код сборки, который мне нужно перепроектировать!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...