APP爬虫| 逆向神器 frida 初试

本文介绍了使用frida进行APP逆向分析的过程,通过编写一个简单的Android应用DEMO,逐步演示如何hook点击事件、Toast的makeText方法和OkHttp的Response,以加深对frida工具的理解。在实践中,学习了hook基本操作、调用构造方法以及处理方法重载的技巧,为更深入的APP逆向分析打下基础。
摘要由CSDN通过智能技术生成

前言

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

知识准备

  • frida 基础知识
  • android 知识

环境

  • as 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其他东西打开了空间。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全村之希望

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值