天天看點

android平台HOOK架構彙總之Frida

0x00 前言

Frida是一款基于python + javascript 的hook架構,通殺android\ios\linux\win\osx等各平台,由于是基于腳本的互動,是以相比xposed和substrace cydia更加便捷,本文重點介紹Frida在android下面的使用。

Frida的官網為:http://www.frida.re/

https://www.frida.re/docs/home/

0x01 安裝和搭建Frida環境

首先要保證你的android手機已經root。

安裝easy_install:

sudo apt-get install python-setuptools
           

再通過easy_install安裝frida:

sudo easy_install frida
           

下載下傳frida-server到android手機上并且運作:

curl -O https://build.frida.re/frida/android/arm/bin/frida-server
adb push frida-server /data/local/tmp/
adb shell
su
cd /data/local/tmp/
chmod  frida-server
./frida-server
           

轉發android TCP端口到本地:

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

測試frida環境,如果出現android手機的程序清單說明搭建成功:

frida-ps -R
           
PID  Name
-----  --------------------------------------------
 2700  acceleratord
 2713  adbd
 2798  agnsscontrol
 2799  agnsslog
 2195  akmd09911
 8078  android.process.acore
31283  android.process.media
 2185  atcmdserver
 4939  chargelogcat
 2796  chr_logd
22856  com.android.browser
 7912  com.android.contacts
22417  com.android.gallery3d
....
           

0x02 得到android手機目前最前端Activity所在的程序

android平台HOOK架構彙總之Frida

其中get_front_app.py的内容如下:

import frida
rdev = frida.get_remote_device()
front_app = rdev.get_frontmost_application()
print front_app
           

0x03 枚舉android手機所有的程序

android平台HOOK架構彙總之Frida

enum_process.py内容如下:

import frida
rdev = frida.get_remote_device()
processes = rdev.enumerate_processes()
for process in processes:
	print process
           

0x04 枚舉手機所有已安裝的android APP應用

android平台HOOK架構彙總之Frida

enum_app.py内容如下:

import frida
rdev = frida.get_remote_device()
apps = rdev.enumerate_applications()
for app in apps:
	print app
           

0x05 枚舉某個程序加載的所有子產品以及子產品中的導出函數

import frida
rdev = frida.get_remote_device()
session = rdev.attach("com.tencent.mm")
modules = session.enumerate_modules()
for module in modules:
	print module
	export_funcs = module.enumerate_exports()
	print "\tfunc_name\tRVA"
	for export_func in export_funcs:
		print "\t%s\t%s"%(export_func.name,hex(export_func.relative_address))
           

0x06 hook android的native函數

如下代碼為hook某個程序的libc.so中的導出函數open

import frida
import sys
rdev = frida.get_remote_device()
session = rdev.attach("com.tencent.mm")
scr = """
Interceptor.attach(Module.findExportByName("libc.so" , "open"), {
    onEnter: function(args) {
        send("open("+Memory.readCString(args[0])+","+args[1]+")");
    },
    onLeave:function(retval){
	
    }
});
"""
script = session.create_script(scr)
def on_message(message ,data):
	print message
script.on("message" , on_message)
script.load()
sys.stdin.read()
           

0x06 hook android的java層函數  

轉自:http://www.voidcn.com/blog/autohacker/article/p-4979253.html

繼續閱讀