欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]Frida实现okhttp3.Interceptor

[原创]Frida实现okhttp3.Interceptor

https://bbs.pediy.com/thread-252100.htm
珍惜Any用xposed实现了okhttp3的Interceptor,我这里发一个frida实现okhttp3的Interceptor

function hook_okhttp3() {

    Java.perform(function () {

        var ByteString = Java.use("com.android.okhttp.okio.ByteString");

        var Buffer = Java.use("com.android.okhttp.okio.Buffer");

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

        var MyInterceptor = Java.registerClass({

            name: "okhttp3.MyInterceptor",

            implements: [Interceptor],

            methods: {

                intercept: function (chain) {

                    var request = chain.request();

                    try {

                        console.log("MyInterceptor.intercept onEnter:", request, "\nrequest headers:\n", request.headers());

                        var requestBody = request.body();

                        var contentLength = requestBody ? requestBody.contentLength() : 0;

                        if (contentLength > 0) {

                            var BufferObj = Buffer.$new();

                            requestBody.writeTo(BufferObj);

                            try {

                                console.log("\nrequest body String:\n", BufferObj.readString(), "\n");

                            } catch (error) {

                                try {

                                    console.log("\nrequest body ByteString:\n", ByteString.of(BufferObj.readByteArray()).hex(), "\n");

                                } catch (error) {

                                    console.log("error 1:", error);

                                }

                            }

                        }

                    } catch (error) {

                        console.log("error 2:", error);

                    }

                    var response = chain.proceed(request);

                    try {

                        console.log("MyInterceptor.intercept onLeave:", response, "\nresponse headers:\n", response.headers());

                        var responseBody = response.body();

                        var contentLength = responseBody ? responseBody.contentLength() : 0;

                        if (contentLength > 0) {

                            console.log("\nresponsecontentLength:", contentLength, "responseBody:", responseBody, "\n");

                            var ContentType = response.headers().get("Content-Type");

                            console.log("ContentType:", ContentType);

                            if (ContentType.indexOf("video") == -1) {

                                if (ContentType.indexOf("application") == 0) {

                                    var source = responseBody.source();

                                    if (ContentType.indexOf("application/zip") != 0) {

                                        try {

                                            console.log("\nresponse.body StringClass\n", source.readUtf8(), "\n");

                                        } catch (error) {

                                            try {

                                                console.log("\nresponse.body ByteString\n", source.readByteString().hex(), "\n");

                                            } catch (error) {

                                                console.log("error 4:", error);

                                            }

                                        }

                                    }

                                }

                            }

                        }

                    } catch (error) {

                        console.log("error 3:", error);

                    }

                    return response;

                }

            }

        });

        var ArrayList = Java.use("java.util.ArrayList");

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

        console.log(OkHttpClient);

        OkHttpClient.$init.overload('okhttp3.OkHttpClient$Builder').implementation = function (Builder) {

            console.log("OkHttpClient.$init:", this, Java.cast(Builder.interceptors(), ArrayList));

            this.$init(Builder);

        };

        var MyInterceptorObj = MyInterceptor.$new();

        var Builder = Java.use("okhttp3.OkHttpClient$Builder");

        console.log(Builder);

        Builder.build.implementation = function () {

            this.interceptors().clear();

            //var MyInterceptorObj = MyInterceptor.$new();

            this.interceptors().add(MyInterceptorObj);

            var result = this.build();

            return result;

        };

        Builder.addInterceptor.implementation = function (interceptor) {

            this.interceptors().clear();

            //var MyInterceptorObj = MyInterceptor.$new();

            this.interceptors().add(MyInterceptorObj);

            return this;

            //return this.addInterceptor(interceptor);

        };

        console.log("hook_okhttp3...");

    });

}

用spawn方式启动app
frida -U --no-pause -f xxx -l hook.js

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功