我们团队在开发过程中,测试接口时,常使用fiddler抓包查看请求报文和响应报文快速定位问题所在,这可比在代码中打断点看数据高效一万倍……

然而fiddler只能抓http包,如果是https,有可能因为证书问题抓不到包。

而这种场景一般都出现在,需要黑别家app,查看一些小秘密。

没错,这次我们由于业务需要,得分析某竞品,自然不能倒在这抓包的第一步,所以下面记录下使用Xpose绕过自定义证书验证的全过程。

反编译APK

常见的套路,apk后缀改zip解压,拿到dex文件,这里一般会有多个dex,全部拷到dex2jar目录下。

接下来我们要使用d2j-dex2jar.bat 把dex反编译成jar。

最简单的方式,把d2j-dex2jar.bat和dex文件都拖到终端命令框,回车。

把反编译的jar丢到gui,然后:

得到java源文件,到此为止我们就拿到了混淆后的java文件。

接下来就要考验大家对代码的敏感度了,因为核心代码都是abc这样的字母,我们要靠它们找到代码中疑似设置httpClinet的地方。

定位https

这里推荐使用EditPlus,可以全局搜索字符串,快捷键是Ctrl + Shift + F5

我们直接全局搜httpClinet,找到对应代码段:

private static DefaultHttpClient a(boolean paramBoolean){……KeyStore ks= KeyStore.getInstance(KeyStore.getDefaultType());ks.load(null, null);b localb = new b(ks, paramBoolean);localb.setHostnameVerifier(b.ALLOW_ALL_HOSTNAME_VERIFIER);BasicHttpParams localBasicHttpParams = new BasicHttpParams();localBasicHttpParams.setParameter("http.protocol.cookie-policy", "netscape");HttpConnectionParams.setSocketBufferSize(localBasicHttpParams, 8192);HttpConnectionParams.setStaleCheckingEnabled(localBasicHttpParams, false);HttpConnectionParams.setConnectionTimeout(localBasicHttpParams, 20000);HttpConnectionParams.setSoTimeout(localBasicHttpParams, 20000);HttpProtocolParams.setUseExpectContinue(localBasicHttpParams, false);SchemeRegistry localSchemeRegistry = new SchemeRegistry();//注册http协议localSchemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));//注册https协议localSchemeRegistry.register(new Scheme("https", localb, 443));DefaultHttpClient localDefaultHttpClient = new DefaultHttpClient(new ThreadSafeClientConnManager(localBasicHttpParams, localSchemeRegistry), localBasicHttpParams);localDefaultHttpClient.setRedirectHandler(new f());……}

可以看到https协议用了自己的证书,却信任全部证书……那就很简单了,只要勾住SchemeRegistry中的register方法,把其第二个参数(证书)替换成http证书即可。

Hook

直接上代码:

public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {if (!lpparam.packageName.equals("目标包名"))return;classLoader = lpparam.classLoader;//勾住android入口函数XposedHelpers.findAndHookMethod("android.app.Instrumentation", lpparam.classLoader, "newActivity", ClassLoader.class, String.class, Intent.class, new XC_MethodHook() {@Overrideprotected void beforeHookedMethod(XC_MethodHook.MethodHookParam param) throws Throwable {}@Overrideprotected void afterHookedMethod(MethodHookParam param) throws Throwable {ClassLoader realClassLoader = lpparam.classLoader;final Class<?> acpv = XposedHelpers.findClass("org.apache.http.conn.scheme.SchemeRegistry", realClassLoader);XposedBridge.hookAllMethods(acpv, "register", new XC_MethodHook() {@Overrideprotected void afterHookedMethod(MethodHookParam param) throws Throwable {super.afterHookedMethod(param);}@Overrideprotected void beforeHookedMethod(MethodHookParam param) throws Throwable {Scheme s = (Scheme) param.args[0];if (s.getDefaultPort() == 443) {//这里把证书替换成http证书param.args[0] = new Scheme("https", PlainSocketFactory.getSocketFactory(), 443);}super.beforeHookedMethod(param);}});super.afterHookedMethod(param);}});}

由于目标代码信任全部证书,所以这里只是简单的替换证书。

对于Xpose再提一点,每次更新了hook代码,都要在Xpose框架里重启手机让hook代码生效。

对于更严格的,验证了自定义证书的目标,可以使用现成的轮子: JustTrustMe

轮子将APK中所有用于校验SSL证书的API都进行了Hook,真狠呐……

虽然有现成的轮子,不过对于简单的东西,能自己动手实现一番,何乐而不为呢?

如何使用Xpose绕过APP自定义证书验证去抓Https包相关推荐

  1. WCF 安全性 之 自定义证书验证

    案例下载 http://download.csdn.net/detail/woxpp/4113172 客户端调用代码 通过代理类 代理生成 参见 http://www.cnblogs.com/woxp ...

  2. SSL证书验证原理和https加密

    1.首先了解一下数字证书: 它有点像身份证,是由权威的CA机构颁发的,证书的主要内容有:公钥(Public Key).ISSUER(证书的发布机构).Subject(证书持有者).证书有效期.签名算法 ...

  3. ios微信抓https包提示证书安全警告解决办法

    我是用charles来运行抓包,但是发现抓https的包会提示证书安全警告,很多帖子都说了安装描述文件,我也进行了这一步,但照样没用,找了10几篇帖子终于看到一篇与其他不一样的了,根据步骤一步步就解决 ...

  4. Android 根证书管理与证书验证

    PKI 体系依赖证书执行极为关键的身份验证,以此确认服务端的可信任性.证书验证在 SSL/TLS 握手过程中完成,验证过程通常包含三个步骤: 验证证书的合法性:这一步主要是验证证书是由合法有效的 CA ...

  5. WCF分布式安全开发实践(6):传输安全模式之自定义X509Certificate证书验证

    今天继续WCF分布式安全开发实践(6):传输安全模式之自定义X509Certificate证书验证.本文介绍的内容主要是:主要是传输安全模式的UserNamePassword身份验证方式,基于WSHt ...

  6. 记录一次安卓app ssl证书绕过

    记录一次安卓app ssl证书绕过 导入bp证书 使用adb push命令将bp证书导入到/sdcard/目录下安装 使用magisk并下载安装always trust user certificat ...

  7. 安卓 flutter app证书绑定校验抓包绕过

    目录 0x00 环境及工具 一.工具 二.环境 0x01 开始分析 一.flutter应用判断 二.正餐开始,flutter应用逆向分析绕过证书绑定 0x00 环境及工具 一.工具 1.抓包工具 ch ...

  8. 移动安全-APP证书校验与抓包

    文章目录 APP单向认证 SSLPinning 突破单向认证 VPN流量抓取 网络请求框架 Packet Capture APP单向认证 如果你是干web安全的,当你在测试目前大多数的手机APP应用程 ...

  9. [免费专栏] Android安全之绕过直连、HOST校验、系统证书校验、代理检测、双向认证抓HTTPS数据

    也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 Android安全付费专栏长期更新,本篇最新内容请前往: [ ...

  10. iOS中https的证书验证

    文/大风歌飞鼎折覆餗(简书作者) 原文链接:http://www.jianshu.com/p/f10f6df67d66 著作权归作者所有,转载请联系作者获得授权,并标注"简书作者" ...

最新文章

  1. 在centos7中静默安装oracle11g
  2. boost的multi_index的使用
  3. java流式传输对象_Java性能:面向教学与流式传输
  4. 浅谈常见的NoSQL技术方案和选型
  5. 人工智能用python还是java_人工智能选择python还是java语言
  6. [论文阅读] Boosting Salient Object Detection with Transformer-based Asymmetric Bilateral U-Net
  7. 中国官员:大数据产业发展需全球携手
  8. 差分约束系统 POJ 3169 Layout
  9. matlab分析矩阵与线性变换
  10. 七十首绝对好听的冷门歌曲(转)
  11. 微信小程序企业号注册
  12. linux 下 packet_mmap 前篇 (抓包实现)
  13. 亚马逊后台付款表(Custom Transaction)详解
  14. 复函数图像怎么画_excel根据表格数据绘制函数图像-怎样用excel画函数图
  15. 「前端」尚妆 UI 组件库工程实践(weex vue)
  16. 如何通俗理解设计模式及其思想
  17. Unity线性空间UI的问题
  18. 加油站都需要什么手续_开办加油站需要办哪些手续?
  19. x86、amd、arm和GPU
  20. i.e., namely, that is区别

热门文章

  1. oracle 英文 简历,英文优秀个人简历模板范文
  2. msc用户无法登陆问题记录
  3. python写连点脚本_python鼠标连点器-测试版
  4. ProE 5.0免安装版软件安装教程
  5. 2017第25届春季中西部(重庆)医疗器械展览会会刊(参展商名录)
  6. 用matlab的dsp软件仿真,基于MATLAB的DSP软件仿真
  7. 黑色商务中国风禅茶一味产品宣传介绍PPT模板
  8. Cisco 模拟器rstp生成树
  9. 深入游戏变速底层原理以及内核变速的实现
  10. CuteFTP下载包含中文的文件,无法下载的问题