Все шаги, упомянутые ниже, относятся к macOS Mojave.
Установите frida-tools
с помощью pip3
Запустите команды $ pip --version
и $ pip3 --version
чтобы проверить, какой pip взят из Python 3x . Например, вы должны увидеть информацию о версии, как показано ниже:
$ pip 19.0.3 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)
Затем запустите правильную команду pip , чтобы установить frida-tools
, например pip3
$ pip3 install frida-tools
Результаты успеха:
....
Successfully built frida-tools frida
Installing collected packages: colorama, frida, six, wcwidth, prompt-toolkit, pygments, frida-tools
Successfully installed colorama-0.4.1 frida-12.4.7 frida-tools-1.3.2 prompt-toolkit-2.0.9 pygments-2.3.1 six-1.12.0 wcwidth-0.1.7
Тестирование вашей установки
Скопируйте двоичный файл cat
во временную папку, например, /tmp/cat
затем запустите cat
из этого каталога:
$ mkdir ~ /frida
$ cp /bin/cat /frida/cat
$ /frida/cat
В другом терминале создайте файл example.py
со следующим содержимым:
import frida
def on_message ( message , data ):
print ( "[on_message] message:" , message , "data:" , data )
session = frida . attach ( "cat" )
script = session . create_script ( """'use strict';
rpc.exports.enumerateModules = function () {
return Process.enumerateModulesSync();
};
""" )
script . on ( "message" , on_message )
script . load ()
print ([ m [ "name" ] for m in script . exports . enumerate_modules ()])
Затем запустите скрипт example.py
с помощью приведенной ниже команды.
$ python3 example.py
Вывод должен быть примерно таким (в зависимости от вашей платформы и версии библиотеки):
[ u'cat' , …, u'ld-2.15.so' ]
Команда adb
для Android
Убедитесь, что adb
видит ваше устройство:
$ adb devices -l
Это также обеспечит работу демона adb на вашем рабочем столе, что позволит Frida обнаруживать ваше устройство и взаимодействовать с ним независимо от того, подключено ли оно через USB или Wi-Fi.
frida-server
на эмуляторе (или реальном устройстве)Следующие шаги основаны на эмуляторе Android Nexus 6P (x86) API 23 на macOS Majave.
Прежде всего, загрузите последнюю версию frida-server
для Android со страницы выпусков frida-server, например, для эмулятора Android x86
вам следует загрузить frida-server-12.4.7-android-x86.xz и запустить его на своем эмуляторе:
$ adb root # might be required
$ adb push frida-server /data/local/tmp/
$ adb shell " chmod 755 /data/local/tmp/frida-server "
$ adb shell " /data/local/tmp/frida-server & "
На последнем шаге, если вы видите ошибку ниже:
Unable to load SELinux policy from the kernel: Failed to open file “/sys/fs/selinux/policy”: Permission denied
Затем вам нужно запустить frida-server
, используя корневую оболочку, например
$ adb shell
angler:/ $ su
angler:/ # /data/local/tmp/frida-server &
[1] 12089
angler:/ #
[1] 12089
— это идентификатор процесса frida-server
.
Теперь на вашем рабочем столе пришло время убедиться, что основы работают. Бегать:
frida-ps -U
Это должно дать вам список процессов примерно следующего содержания:
PID Name
----- ---------------------------------------------------
721 ATFWD-daemon
4450 adbd
730 [email protected]
407 [email protected]
408 [email protected]
409 [email protected]
410 [email protected]
406 [email protected]
Чтобы подделать Boolean
значение внутри исходного кода Java, т. е. Boolean bTamperingSucces = false;
или какой-либо другой код, который вас интересует.
apktool
можно скачать с сайта Apktool. Просто следуйте инструкциям на этой странице, чтобы установить apktool.
adb
поставляется с Android SDK, его можно найти в каталоге <your-some-path>/Android/sdk/platform-tools/adb
apksigner
— подписать ваш APK файлом хранилища ключей. Этот инструмент можно найти в каталоге <ANDROID_HOME>/Android/sdk/build-tools/28.0.3/apksigner
, а его использование документировано в apksigner для командной строки.
Клонируйте пример проекта из DecompileApk.
Найдите уже скомпилированный apk-файл DecompileApk/app/release/app-release.apk
.
Декомпилируйте его с помощью apktool .
$ cd < your-path > /DecompileApk/app/release/
$ apktool d --no-res -f app-release.apk
Вы увидите ниже результаты
I: Using Apktool 2.4.0 on app-release.apk
I: Copying raw resources...
I: Baksmaling classes.dex...
I: Copying assets and libs...
I: Copying unknown files...
I: Copying original files...
Найдите DecompileApk/app/release/app-release/smali/com/arophix/decompileapk/MainActivity.smali
в каталоге кода smali и найдите код ниже.
const / 4 p1 , 0x0
Просто измените 0x0
(что означает false
) на 0x1
(что означает true
) и сохраните файл.
Использование apktool для создания подделанного APK.
apktool b app - release
Вы должны увидеть результаты ниже
I: Using Apktool 2.4.0
I: Checking whether sources has changed...
I: Smaling smali folder into classes.dex...
I: Checking whether resources has changed...
I: Copying raw resources...
I: Copying libs... (/lib)
I: Building apk file...
I: Copying unknown files/dir...
I: Built apk...
Найдите только что созданный APK в каталоге dist
DecompileApk/app/release/app-release/dist/app-release.apk
Подпишите APK с помощью apksigner и хранилища ключей, расположенного по адресу DecompileApk/app/decompileapk.jks
(пожалуйста, измените пути к хранилищу ключей и apk в соответствии со своим случаем),
$ < ANDROID_HOME > /sdk/build-tools/28.0.3/apksigner sign --ks ../decompileapk.jks app-release.apk
Вы должны увидеть результаты ниже и ввести пароль 123456
Keystore password for signer # 1:
Установите подписанный APK с помощью команды adb.
$ adb install < path-to-the-tampered-apk > /app-release.apk
Вместо "Hello from C++"
на экране теперь вы должны увидеть "Hello, Android reverse engineer!"
.
Перехват исходного кода Android Java с помощью Frida.
Найдите скрипт из файлаook_java_methods.py и запустите его, используя команду ниже, а затем нажмите кнопку запущенного приложения Android.
$ python3 hook_java_methods.py
[ * ] Running CTF
[ * ] onClick
[ * ] Called - isPhoneRooted ()
[ * ] onClick
[ * ] Called - isPhoneRooted ()
Если вы видите ошибку, как показано ниже:
$ frida.ServerNotRunningError: unable to connect to remote frida-server: closed
Помните, что вы запустили frida-server
на своем эмуляторе.
Тем временем на экране эмулятора вы должны увидеть всплывающее сообщение, измененное на Device not rooted
в случае успеха.
Перехват исходного кода Android C с помощью Frida.
Декомпилировать APK
Во-первых, декомпилируйте APK с помощью apktool, чтобы извлечь общую библиотеку, например libnative-lib.so
.
$ cd DecompileApk/app/release
$ apktool d --no-res app-release.apk
Найдите целевой метод JNI
Во-вторых, используйте команду ниже, чтобы найти функцию JNI, которую нужно перехватить.
$ nm --demangle --dynamic app-release/lib/x86/libnative-lib.so
Вы должны увидеть следующие результаты:
00004d80 T Java_com_arophix_decompileapk_MainActivity_stringFromJNI
000090b0 T std::bad_typeid::what () const
00005cf0 T std::bad_exception::what () const
00005e70 T std::bad_array_length::what () const
00005df0 T std::bad_array_new_length::what () const
00008ff0 T std::bad_cast::what () const
...
Перехват функции C по имени
Найдите скрипт из файлаooknative-by-function-name.py и запустите его, используя команду ниже, а затем нажмите кнопку запущенного приложения Android.
$ python3 hooknative-by-function-name.py
[ * ] Running Arophix Hook Test ...
Java_com_arophix_decompileapk_MainActivity_stringFromJNI called with:
ret: 0x200019
Если вы видите ошибку, как показано ниже:
$ frida.ServerNotRunningError: unable to connect to remote frida-server: closed
Помните, что вы запустили frida-server
на своем эмуляторе.
Тем временем на экране эмулятора вы должны увидеть текст, измененный на Frida is hooking this displayed text from Native layer by function name.
если успех.
Перехват функции C по адресу
Найдите скрипт из файлаooknative-by-function-address.py и запустите его, используя команду ниже, а затем нажмите кнопку запущенного приложения Android.
$ python3 hooknative-by-function-address.py
[ * ] Running Arophix Hook Test ...
[+] membase: 0xb2acd000
[+] addressOfStringFromJni: 0xb2ad1d80
[++] addressOfStringFromJni: 0xb2ad1d80
ret: 0x19
Если вы видите ошибку, как показано ниже:
$ frida.ServerNotRunningError: unable to connect to remote frida-server: closed
Помните, что вы запустили frida-server
на своем эмуляторе.
Тем временем на экране эмулятора вы должны увидеть текст, измененный на Frida is hooking this displayed text from Native layer by function address.
если успех.