初步使用frida
Frida配置
1、下载frida-server解压push到手机、增加可执行权限
adb push frida-server /data/local/tmp/
adb shell
#管理员权限
su
cd /data/local/tmp
chmod 777 frida-server
#加&表示后台运行,也可以不加
./frida-server&
2、电脑安装frida
pip install frida
pip install frida-tools
可以直接安装frida-tools,系统默认会跟你安装对应的frida版本
3、测试安装
frida-ps -U
windows运行,端口转发到PC
adb forward tcp:27043 tcp:27043
adb forward tcp:27042 tcp:27042
frida使用
1、代码模板
`
点击查看代码
Java.perform(
function(){
//hook代码
}
)
2、hook方式
两种启动hook方式:
1、attach 进程名: APP启动后在hook,不能hook app启动阶段
2、spawn: 重启APP,适合hook app启动阶段
3、hook类
```
1、访问成员变量写法:
this.变量名.value
2、hook匿名类写法:
Java.use('类$类') smali文件中找
3、从匿名类/内部类访问外部类的属性写法:
this.this$0.value.外部类的属性名.value
4、新建一个对象写法 new
类.方法名.$new(参数)
例如: StringBuffer stringBuffer = new StringBuffer();
hook: var stringbuffer = Java.use('java.lang.StringBuffer').$new()
5、重载方法
类.方法名.overload(参数1、参数2...).implementation
6、hook 构造方法
类.$init()。implementation
```
详解一下:
点击查看代码
def on_message(message, data):
if message['type'] == 'send':
print("[*] {0}".format(message['payload']))
else:
print(message)
test = """
Java.perform(
function(){
var MainActivity = Java.use('com.example.seccon2015.rock_paper_scissors.MainActivity')
MainActivity.onClick.implementation = function(v){
this.onClick(v)
console.log('mmm:'+this.m.value)
console.log('nnn:'+this.n.value)
}
var TT = Java.use('com.example.seccon2015.rock_paper_scissors.MainActivity$1')
// 匿名类的调用
TT.run.implementation = function(){
//匿名类调用外部的变量
this.this$0.value.m.value = 1
this.this$0.value.n.value = 2
this.run()
}
}
)
"""
# 两种启动方式
# 启动方式1
process = frida.get_usb_device(-1).attach('com.example.seccon2015.rock_paper_scissors')
script = process.create_script(test)
script.on('message', on_message)
script.load()
sys.stdin.read()
# 启动方式2 spawn 重启APP 可以hook APP启动阶段
# device = frida.get_usb_device(-1)
# pid = device.spawn(['com.example.seccon2015.rock_paper_scissors'])
# process = device.attach(pid)
# script = process.create_script(test)
# script.on('message', on_message)
# print('[*] Running')
# script.load()
# device.resume(pid)
# sys.stdin.read()
查找程序包名的方法
1、找到开始文件中的package中的名称
2、进程中查找,过滤进程
pa-A | grep com.xxx