安卓控件定位方法详解

如果我们用传统

findViewById这个组件去获取怎么获取呢?

解答:

然后ctrl+点击进去找到系统文件,就可以看到它是属于

他是属于

package androidx.appcompat.app;底下的
AppCompatActivity类文件的。

于是我们hook代码就这样写

Java.perform(function (){


    function showstack(){
        var log=Java.use("android.util.Log");
        var throwable = Java.use("java.lang.Throwable");
        var stackTraceString = log.getStackTraceString(throwable.$new());

        console.log(stackTraceString);

    }

    var appCompatActivity= Java.use("androidx.appcompat.app.AppCompatActivity");
    appCompatActivity.findViewById.overload().implementation= function (a){
        // showstack();
        //这里a是字节数字,所以要用JSON.stringify(a)来打印
        console.log("控件id:",a)
        var result=this.findViewById(a);
        // console.log("xxxx",result);
        return result;

    }





});

直接用frida -UF -l kongjianHook.js -o log.txt去执行,但是出现问题就是

控件是在文件前就执行了的,所以会报错

解决方案就是枚举法 Java.enumerateClassLoadersSync()直接输入这个神奇代码

但是 有可能不会跳出提示或者报错,只要重启一下手机或者电脑重新来一下就 可以了

这个是不对的,敲错了,已加载过的类

Java.enumerateLoadedClassesSync  

所以就要把这里进行替换android.support.v7.app.AppCompatActivity

当然启动也要不一样了

frida -Uf com.dodonew.online -l kongjianHook.js -o log.txt

这里f是启动包名,

刚启动 的时候时候要 改成

frida -Uf com.dodonew.online -l kongjianHook.js -o log.txt --no-pause

可是我手机系统问题,我这里只要直接输入

frida -Uf com.dodonew.online -l kongjianHook.js -o log.txt来 启动就可以了

不需要后面加--no-pasue,这个意思启动后进行停留然后启动脚本

通过adb里面Automator Viewer

然后得到控件id

去jadx查找控件id是多少,根据id找到相应东西

代码再进行改写成

Java.perform(function (){


    function showstack(){
        var log=Java.use("android.util.Log");
        var throwable = Java.use("java.lang.Throwable");
        var stackTraceString = log.getStackTraceString(throwable.$new());

        console.log(stackTraceString);

    }

    var btn_login_id = Java.use("com.dodonew.online.R$id").btn_login.vaule;
    console.log("控件id",btn_login_id);

    var appCompatActivity= Java.use("android.support.v7.app.AppCompatActivity");
    appCompatActivity.findViewById.implementation= function (a){
        if(a==btn_login_id){
            showstack();
            //这里a是字节数字,所以要用JSON.stringify(a)来打印
            console.log("控件id:",a)
            var result=this.findViewById(a);
        }

        // console.log("xxxx",result);
        return result;

    }





});

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值