15.安卓逆向-frida基础-HOOK类方法1

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!

内容参考于:图灵Python学院

本人写的内容纯属胡编乱造,全都是合成造假,仅仅只是为了娱乐,请不要盲目相信。

工具下载:

链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd=6tw3

提取码:6tw3

复制这段内容后打开百度网盘手机App,操作更方便哦

上一个内容:14.安卓逆向-frida基础-编写hook脚本2

上一个内容里写了Frida的脚本语法怎么玩着,本次接着上一个内容进行实操,搞在逆向的时候HOOK的一些东西

比如:

hook okhttp的方法 HttpUrl、Request、addHeader,通过hook HttpUrl方法得到请求地址,通过hook Request得到请求和相应,通过hook addHeader得到请求头

hook json数据,有些app会把参数放到json里面去,app和服务器交互通过会使用json格式

hook 排序算法,有些app会把参数放到排序算法中

hook String字符串转换,有的app在加完密之后会使用String的方法进行转字符串

hook StringBuilder,有些app会使用StringBuilder添加参数

hook 按钮点击事件

然后首先是hook java特殊类型

`下图红框位置它有使用HashMap

然后上图红框里调用了show方法,下图show方法的内容,做的是把Map里的数据拿出来用StringBuilder进行拼接,然后如果想看东西的话,需要hook show方法

代码和效果图:

function demo1(){
    var utils = Java.use("com.luoge.com.BufferMap")
    utils.show.implementation = function(map){
        console.log("\n")
        console.log("参数1--》"+map)
        // console.log("\n")
        var res = this.show(map)
        console.log("返回值--》"+res)
        return res
    }
}


Java.perform(function (){ // 调用java代码也就是getCalc方法
    demo1()
})

Map类型取值一般要用下方红框的写法

function demo1(){
    var utils = Java.use("com.luoge.com.BufferMap")
    utils.show.implementation = function(map){
        console.log("\n")
        var key = map.keySet()
        var it = key.iterator()
        var result = ""
        while(it.hasNext()){
            var keystr = it.next()
            var valuestr = map.get(keystr)
            result += valuestr
        }

        console.log("循环处理的数据:", result)


        console.log("参数1--》"+map)
        // console.log("\n")
        var res = this.show(map)
        console.log("返回值--》"+res)
        return res
    }
}


Java.perform(function (){ // 调用java代码也就是getCalc方法
    demo1()
})

向map里添加数据

function demo1(){
    var utils = Java.use("com.luoge.com.BufferMap")
    utils.show.implementation = function(map){
        console.log("\n")
        var key = map.keySet()
        var it = key.iterator()
        var result = ""
        while(it.hasNext()){
            var keystr = it.next()
            var valuestr = map.get(keystr)
            result += valuestr
        }

        console.log("循环处理的数据:", result)

        map.put(" 添加的k", " 添加的值")
        console.log("参数1--》"+map)
        // console.log("\n")
        var res = this.show(map)
        console.log("返回值--》"+res)
        return res
    }
}


Java.perform(function (){ // 调用java代码也就是getCalc方法
    demo1()
})

hook okhttp

hook请求抓包,有些抓包软件抓不到东西,这就需要采用hook 发送请求的类来抓包,这里hook okhttp,如果app不用okhttp它也是没办法抓包

function demo2() {// hook 请求
    var Builder = Java.use("okhttp3.Request$Builder")
    Builder.newCall.overload('okhttp3.HttpUrl').implementation = function (a){
       console.log()
       var res = this.url()
       return res
    }
}

function demo3() {// hook 请求和响应
    var OkHttpClient = Java.use("okhttp3.OkHttpClient")
    OkHttpClient.newCall.overload('okhttp3.Request').implementation = function (a){
        console.log()
        console.log("入参:", a.url().toString())// 请求地址
        var call = this.newCall(a)
        console.log("newCall")
        var response = call.execute();
        console.log("返回值:", response.body().string())// 请求返回值
        return call
    }
}

function demo4(){ // hook请求头
    var Builder = Java.use("okhttp3.Request$Builder")
    Builder["addHeader"].implementation = function (str1, str2){
        console.log("key:", str1)
        console.log("val:", str2)
        var result = this["addHeader"](str1, str2)
        return  result
    }


}

function demo5() {// hook 请求和响应
    var OkHttpClient = Java.use("okhttp3.OkHttpClient")
    OkHttpClient.newCall.overload('okhttp3.Request').implementation = function (request){
        console.log()
        console.log("请求地址:", request.url().toString())// 请求地址

        var headers = request.headers() // 获取请求头
        console.log("请求头:", headers.toString())

        var method = request.method()// 获取请求的方式,post、get
        console.log("请求方式:",method)
        var requestBody = request.body()
        if(requestBody === null){
            return this.newCall(request)
        }
        const FormBody = Java.use("okhttp3.FormBody")// 获取表单
        if(request.method() !== null && requestBody.getClass()!==null && requestBody.getClass().getName() === "okhttp3.FormBody"){
            var formBody = Java.cast(requestBody, FormBody)// cast是用来转类型的,它会把requestBody转成FormBody类型
            console.log("请求体(Body)")
            for (var i = 0; i < formBody.size(); i++) {
                console.log(formBody.name(i)+":"+formBody.value(i))
            }
        }

        return this.newCall(request)
    }
}

Java.perform(function (){ // 调用java代码也就是getCalc方法
    // demo1()
    // demo2()
    demo5()
})


img

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值