🛠 FRIDA must for Mobile AST
Салют,
Сегодня посмотрим с тобой на тулу, которая становится крайне полезной для тестирования мобильных клиентов с первых шагов. Рекомендую сразу смотреть в ее сторону, потому что она поможет тебе правильно выстраивать понимание анализа защищенности мобильного приложения.
Frida — это динамический инструмент для перехвата вызовов в процессах и последующего инжектирования. Работает в связке клиент (CLI/ Python/ Node.js) и рантайм внутри процесса целевого приложения. Также используют Frida Gadget как встроенную библиотеку.
Помогает
• перехватывать и модифицировать вызовы функций хуками
• изменять аргументы и выводы результатов
• воздействовать на память процесса в рантайме
• обходить клиентские проверки (root/ jailbreak detect, SSL pinning, лицензирование)
• делать живой динамический анализ без исходников и перекомпиляции
Команды
$ frida-ps -U # процессы на USB‑устройстве
$ frida-ps -ai # приложения с иконками (mobile)
$ frida-trace -U -i "com.example.app.auth.LoginManager.validateCredentials" com.example.app # android трассировка без написания JS
$ frida-trace -i "SSL_*" -f /usr/bin/curl # трассировка всех функций SSL_* в нативном бинарнике
$ frida-trace -i "fopen" -p <PID> # трассировка всеx вызовов fopen в текущем процессе
Пример
$ frida -U -f -n com.example.app -l script.js # загрузить JS‑скрипт attach по имени пакета через USB
Java.perform(function () {
var LoginManager = Java.use("com.example.app.auth.LoginManager");
// Перехватываем метод validateCredentials(String user, String pass)
LoginManager.validateCredentials.implementation = function (user, pass) {
console.log("[*] validateCredentials called");
console.log(" user:", user);
console.log(" pass:", pass);
// Можно менять параметры
// user = "test@example.com";
// pass = "P@ssw0rd!";
var result = this.validateCredentials(user, pass);
console.log(" result:", result);
return result;
};
});
QA auto
import frida, sys
JS_CODE = """
Java.perform(function () {
var Cls = Java.use("com.example.app.auth.LoginManager");
Cls.validateCredentials.implementation = function (user, pass) {
send("validateCredentials: " + user + " / " + pass);
return this.validateCredentials(user, pass);
};
});
"""
def on_message(message, data):
print("[*] Message:", message)
device = frida.get_usb_device()
pid = device.spawn(["com.example.app"])
session = device.attach(pid)
script = session.create_script(JS_CODE)
script.on("message", on_message)
script.load()
device.resume(pid)
sys.stdin.read()
Итого:
• Позволяет динамически наблюдать и изменять поведение приложений без исходников и перекомпиляции
• Идеален для AppSec‑задач на уровне mobile/desktop‑клиентов, крипто‑логики, протоколов, анти‑фрод и анти‑тампер механизмов
• Требует аккуратности и понимания внутренних API и платформенных особенностей
• Практически незаменим в pentest’ах мобильных приложений, когда нужно обходить защиты и «заглядывать внутрь» рантайма
#toolchain #sast #appsec #reco #dast #mast
