frida初体验

来源:互联网 发布:隐式intent传递数据 编辑:程序博客网 时间:2024/06/15 13:04

另外可以参考一个乌云drops的安卓APP动态调试-IDA实用攻略
在看apk逆向的题时,看到这个writeup,它谈到可以用frida来动态插桩,使用Frida你能够在包括安卓在内的许多平台上使用JavaScript来 hook 代码。
参考:
http://www.jianshu.com/p/ca8381d3e094

Frida是一款基于python + javascript 的hook框架,通杀android\ios\linux\win\osx等各平台,基于脚本的交互。

先在你的主力机上安装frida

pip install frida

下载完之后,就会可以使用frida, frida-ps等命令了。
然后下载frida-server待传到android的目录下,执行服务程序
到这个页面,https://github.com/frida/frida/releases,找到frida-server相关的,比如frida-server-10.1.2-android-arm.xz,下载下来之后,解压

unxz frida-server-10.1.2-android-arm.xz

得到一个frida-server-10.1.2-android-arm,这是一个arm平台32位的ELF文件

$ file frida-server-10.1.2-android-arm                                      [3:04:01]frida-server-10.1.2-android-arm: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /system/bin/linker, stripped

可重命名也可不,然后将其传到android的目录下

$ adb push frida-server-10.1.2-android-arm /data/local/tmp/                 [3:04:06][100%] /data/local/tmp/frida-server-10.1.2-android-arm

在android上添加执行权限,然后执行

root@hammerhead:/data/local/tmp # chmod 777 frida-server-10.1.2-android-armroot@hammerhead:/data/local/tmp # ./frida-server-10.1.2-android-arm

然后转发TCP端口到本地

$ adb forward tcp:27042 tcp:27042$ adb forward tcp:27043 tcp:27043

测试frida环境,如果出现android手机的进程列表说明搭建成功:

frida-ps -R                                                               [3:09:24]  PID  Name-----  ---------------------------------------------- 2140  DaemonServer22053  adbd22849  android.process.acore 8574  android.process.media  251  bridgemgrd 1225  com.android.nfc 1199  com.android.phone22766  com.android.providers.calendar20319  com.android.settings 1042  com.android.systemui21756  com.android.vending 1161  com.baidu.netdisk 1310  com.baidu.netdisk:bdmoservice21334  com.baidu.netdisk:bdservice_v1 4381  com.eg.android.AlipayGphone ...

得到android手机当前最前端Activity所在的进程

Python 2.7.12 (default, Sep 28 2016, 18:41:32)[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.38)] on darwinType "help", "copyright", "credits" or "license" for more information.>>> import frida>>> rdev = frida.get_remote_device()>>> print rdevDevice(id="tcp", name="Local TCP", type='remote')>>> front_app = rdev.get_frontmost_application()>>> print front_appApplication(identifier="siir.es.adbWireless", name="adbWireless", pid=5967)

枚举android所有运行的process

>>> processes = rdev.enumerate_processes()>>> for process in processes:...     print process...Process(pid=1, name="init")Process(pid=178, name="ueventd")Process(pid=236, name="healthd")Process(pid=238, name="servicemanager")Process(pid=239, name="vold")Process(pid=240, name="rmt_storage")Process(pid=241, name="netd")Process(pid=242, name="debuggerd")Process(pid=243, name="rild")Process(pid=244, name="surfaceflinger")Process(pid=245, name="zygote")

//TODO hook android的native函数
//TODO hook android的java层函数

原创粉丝点击