python的frida实现app抓包_APP爬虫|逆向神器 frida 初试

前言

frida 真的是 app 逆向的神器,当你遇上他的时候,就会爱上他。这篇文章主要是通过自己写个 app 的 demo,然后一步步的 hook 它。之后会有系列的文章介绍 frida 对其他 app 的应用。

知识准备

frida 基础知识

android 知识

环境

android studio android 开发工具

已 root 的安卓手机

android 和 python 的 frida 环境

描述

之前在如何让 app 不走代理的文章中写了一个小的 app 的 demo。现在我准备一步一步的 hook 这个 demo。以便能加深对 frida 的理解。

源码

以下是 demo APP 的源码

public void onClick(View view) throws IOException {

new Thread(this).start();

}

@Override

public void run() {

Looper.prepare();

OkHttpClient okHttpClient = new OkHttpClient.Builder().

proxy(Proxy.NO_PROXY).

build();

Request request = new Request.Builder()

.url("http://www.baidu.com")

.build();

Response response = null;

try {

response = okHttpClient.newCall(request).execute();

Toast.makeText(this, Objects.requireNonNull(response.body()).string(), Toast.LENGTH_SHORT).show();

} catch (IOException e) {

Log.e("ioerror",e.getMessage());

}

Looper.loop();

}

一:hook 掉 onClick 方法

第一步:hook 掉 onClick 方法,代码如下

Java.perform(

function (){

// 通过反射获得MainActivity

var mainActivity = Java.use('com.example.myapplication.MainActivity');

// 获得onClick钩子

var onClick = mainActivity.onClick;

// 重写

onClick.implementation=function (view){

//事前

console.log(view)

// 事中

var result =  onClick.call(this,view)

// 事后

return result;

}

}

)

结果如下:

二:hook 掉 Toast 的 makeText 方法

目的是让让 toast 出我们自己定义的内容,代码如下:

Java.perform(

function () {

// 获得Toast组件

var Toast = Java.use('android.widget.Toast')

var makeText = Toast.makeText

var String = Java.use('java.lang.String')

makeText.overload('android.content.Context', 'java.lang.CharSequence', 'int').implementation=function (context,content,time) {

var hookContent = String.$new('hook掉了')

return this.makeText(context,hookContent,time)

}

}

)

hook 结果

三:hook 掉 OkHttp 中的 Response

hook 掉 OkHttp 的 Response 构造方法,并打印出请求的 url 和响应码。

Java.perform(

function (){

var Response = Java.use("okhttp3.Response");

var init =  Response.$init;

init.implementation=function (request,protocol,message,code,Handshake,Headers,ResponseBody, Response1, Response2, Response3, long1,long2, Exchange){

if(ResponseBody){

console.log(request.url()+'-----'+code)

}

return this.$init(request,protocol,message,code,Handshake,Headers,ResponseBody, Response1, Response2, Response3, long1,long2, Exchange)

}

}

)

最终结果:

总结

通过步骤 1 学会了使用 frida 如何进行 hook 操作

通过步骤 2 学会了如何调用构造方法

通过步骤 2 学会了如何 hook 存在方法重载的函数

通过步骤 3 hook 了 okhttp 的 Response 构造方法,获得了请求 url 和响应码

除了讲解了常用语法之外,步骤 3 也为我们 hook 其他东西打开了空间。

作者:阳光下的小树

https://me.csdn.net/u013356254

每周送书活动还在继续,本周送书如下:

书籍简介:

主要讲解数据分析与大数据处理所需的技术、基础设施、核心概念、实施流程。从编程语言准备、数据采集与清洗、数据分析与可视化,到大型数据的分布式存储与分布式计算,贯穿了整个大数据项目开发流程。本书轻理论、重实践,目的是让读者快速上手!

上周分享最多者 小黑 。恭喜您中奖,请尽快私我地址噢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值