逆向工程 - Frida - 如何連接到Android裝置做測試



參考資訊:
https://github.com/frida/frida
https://frida.re/docs/functions/
https://frida.re/docs/installation/
https://github.com/frida/frida/releases

PC

$ cd
$ wget https://github.com/frida/frida/releases/download/17.0.7/frida-server-17.0.7-linux-arm64.xz
$ xz -d frida-server-17.0.7-linux-arm64.xz
$ adb push frida-server-17.0.7-linux-arm64 /tmp

Android

$ su
# cd /tmp
# sleep 10000&
# ./frida-server-17.0.7-linux-arm64 -l 0.0.0.0:8888

main.py

import os
import sys
import frida

REMOTE_IP = "127.0.0.1"
REMOTE_PORT = 8888

def on_message(message, data):
    print(message)

device = frida.get_device_manager().add_remote_device(f"{REMOTE_IP}:{REMOTE_PORT}")
session = device.attach('sleep')
script = session.create_script("""
    rpc.exports.enumerateModules = () => {
      return Process.enumerateModules();
    };
""")

script.on("message", on_message)
script.load()

for m in script.exports.enumerate_modules():
    print(m)

PC上測試

$ adb devices
    List of devices attached
    XXXX device

$ adb forward tcp:8888 tcp:8888
$ python3 main.py 
    {'name': 'sleep.coreutils', 'base': '0x5575d00000', 'size': 90544, 'path': '/bin/sleep.coreutils'}
    {'name': 'linux-vdso.so.1', 'base': '0x7fb7c56000', 'size': 2312, 'path': 'linux-vdso.so.1'}
    {'name': 'libc.so.6', 'base': '0x7fb7a50000', 'size': 1739720, 'path': '/lib/libc.so.6'}
    {'name': 'ld-linux-aarch64.so.1', 'base': '0x7fb7c1d000', 'size': 250712, 'path': '/lib/ld-linux-aarch64.so.1'}
    {'name': 'libdl.so.2', 'base': '0x7fb5640000', 'size': 69648, 'path': '/lib/libdl.so.2'}
    {'name': 'libm.so.6', 'base': '0x7fb55a0000', 'size': 618520, 'path': '/lib/libm.so.6'}
    {'name': 'libpthread.so.0', 'base': '0x7fb5580000', 'size': 69648, 'path': '/lib/libpthread.so.0'}