美文网首页
Xposed Hook某App Https请求证书校验

Xposed Hook某App Https请求证书校验

作者: 淡v漠 | 来源:发表于2020-03-01 01:18 被阅读0次

    前言

    话说已经好久没有写逆向相关的文章了,近日朋友发我一个某App,跟我说fidder抓包居然显示网络异常,然后说证书也安装了,居然还是显示网络异常。奇怪是其他app的https居然可以正常,唯独这个app死活就是网络异常。起初以为是他证书没安装上,后来自己拿来试了试,诶呦!,居然还真是.......
    没办法谁让遇到我这个小暴脾气了,必须盘它。


    盘它

    拿到Apk首先需要找到入手点,那么这个app入手点该怎么找呢?这里打开App直接到登录页输入一个长度不对手机号,看到提示 "请输入正确的手机号码",然后输入正确的手机提示网络异常。然后直接反编译Apk搜索字符串我看到如下代码。 之后我们向下看看,可以看到一个login方法,这里就是请求登录的post请求 我们顺藤摸瓜,进入AsyncHttpRunner.requestAndHeadJsonSign_postForRC 这个方法。我们可以看到他调用了一个HttpManager.requestAndHeadJsonNoThread这个方法。
    我们打开HttpManager类,这里可以看到他采用的是 Apache Jakarta Common 旗下的 HttpClient客户端。每次Get或者POST请求的时候都会调用getNewHttpClient方法,也就是这里方法里进行https证书设置,以及校验等。

    好了既然找到关键位置了,那么接下来就是如何过掉他这个证书校验的事情了。

    Hook大法

    我们可以看见当发生https请求的时候他创建了证书校验,那么我们禁止它创建就可以了,比如直接new DefaultHttpClient()、或者让https使用PlainSocketFactory.getSocketFactory()都是可以解决的。这里可以直接修改apk然后编译回编,或者使用xposed来hook也是可以的。

    这里如果采用修改apk的话就可以完美过掉证书校验,如果采用xposed的话你会神奇的发现你的hook不起作用。所以这里为了给解决某些app对xposed检测提供一种思路,我还是采用的hook大法。
    先看看我的hook代码如下。

    Class<?> mm = classLoader.loadClass("com.smart.sdk.android.http.net.HttpManager");
    Class<?> hp = classLoader.loadClass("com.smart.sdk.android.http.auth.HttpParameters");
    final Class<?> client = classLoader.loadClass("org.apache.http.impl.client.DefaultHttpClient");
    final Class<?> acpv = classLoader.loadClass("org.apache.http.conn.scheme.SchemeRegistry");
    final Class<?> scheme = classLoader.loadClass("org.apache.http.conn.scheme.Scheme");
    XposedHelpers.findAndHookMethod(mm, "getNewHttpClient", hp, int.class, int.class, Context.class, new XC_MethodReplacement() {
           @Override
           protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
                    XposedBridge.log("Hook成功了啊");
                    return client.newInstance();
                }
          });
    
    进行到这里,我们安装并激活插件,你会发现这段hook并没有起作用,起初以为是我找错了方法,或者是说压根就没有调用这个方法,后来分析来分析去才发现这个app做一个xp检测。

    我可以看到app一旦启动他就检测是否安装了xposed框架,如果发现了框架,那么立刻通过反射直接禁用xposed功能,那么你上边的hook代码也就不起作用了。
    如何过掉这个检测呢,其实也很简单就是我们自己重新编译一份XposedBridge.jar然后修改disableHooks名称并将编译之后的jar拷贝到系统 /system/framework 目录,这样app通过反射的时候就会失效,达到反检测的目的。
    因为/system 目录是系统底层目录,所以在拷贝的时候相对比较麻烦。所以这里为了方便我之后把编译好的XposedBridge.jar放到我们的插件里,然后通过获取root权限进行拷贝,最终效果如下。




    之后我们在打开目标app就可以正常进行hook了。

    参考文章

    https://github.com/rovo89/Xposed
    https://github.com/rovo89/XposedBridge
    https://bbs.pediy.com/thread-223713.htm
    https://www.52pojie.cn/thread-691584-1-1.html

    相关文章

      网友评论

          本文标题:Xposed Hook某App Https请求证书校验

          本文链接:https://www.haomeiwen.com/subject/eggghhtx.html