一、逆向分析

首先感谢王同学提供的样本,因为王同学那天找到我咨询我说有一个应用Fiddler抓包失败,其实对于这类问题,我一般都会这么回答:第一你是否安装Fiddler证书了,他说他安装了。第二你是否用了我之前说的那个Xposed框架JustTrustMe,不了解这个框架的同学可以查看这里:Python爬取应用「英语流利说」的配音视频数据;他说了也用了。到这里我就没理由不帮他看了,自己下载了应用安装之后,的确有这个问题:

看到了,这里就是这样的提示,也没看到具体的请求参数啥的,所以这个就引发了我的兴趣,那么不多说了直接爆破吧,突破口很简单,直接全局搜这个接口api.izuiyou.com即可:

搜索结果很多,主要看纯接口那个,通过两三次的点击浏览最后定位到这一处:

到这里就看到了,其实他内部用的是okhttp进行网络请求的,使用AsyncTask类进行操作,但是在构建okhttp的时候他做了很多设置操作,首先是参数设置:

看到这个c类其实是设置okhttp的拦截器,这里简单看一下应该是post方式请求会把参数进行加密处理,我们看看那个加密代码:

这个不多说了,依然采用底层加密操作,到这里我们就直接hook它:

然后安装模块运行即可,然后我们手机不挂代理访问,这样就能正常拉取数据了,看看加密的都是啥信息,我们在首页进行下拉刷新操作:

看到了下拉数据接口是recommend的,然后参数就是请求参数信息,看到最后加密之后的只有一个sign字段了,应该是把参数放到so层进行加密处理了,那么这个加密逻辑不是本文的介绍重点,后续会继续单独介绍如何动态调试so来弄出加密算法。继续回到刚才设置了okhttp的拦截器之后,就设置okhttp的SSLSocketFactory和X509TrustManager值就是和证书相关的:

然后这里他自定义了一个SSLSocketFactory类,这个类中可以自定义的Socket信息:

一般都是在回调方法createSocket中处理通信的Socket信息:

然后就是okhttp的设置证书的方法调用了,后面的解决方案就是hook这个方法来

当然还有设置域名检查的方法HostnameVerifier,这里不多介绍了。那么现在可以看到抓包失败可能就是这三个值引起的,这个大家一定要熟悉okhttp框架的大致用法和原理,而且现在几乎很多应用都在用这个okhttp框架了,并且google官方已经把这个框架集成到系统中替换原来的apache的http框架了。所以后续如果抓包失败都可以直接分析应用中的这个框架即可。

到这里我们大致找到关键点了,不过这里需要说明一个现象就是抓包失败,在应用界面会看到有一个loading一直在转圈圈也就是这里有一个超时时间,诡异的是如果超时了,数据可以正常加载。但是这个超时太长了几乎几分钟。虽然最终可以看到数据也可以抓到包(文章开始说抓不到包是因为太慢了没心等待)。但是得解决这个问题不然等几分钟没法进行后面操作了。所以还得继续看这个问题吧。上面已经定位到问题大致就是okhttp设置了证书那些值导致的问题,那么是哪些值呢?我们先看看SSLSocketFactory这个类:

这个类的createSocket方法中处理了很多逻辑,那么我们在hook这个方法打印参数信息:

我们在方法调用前打印参数信息,方法调用结束之后打印结束信息,然后运行模块看日志信息:

我们挂了Fiddler代理之后看到打印的参数值信息了,不过可惜的是结束日志没有打印出来,那么问题就出在这个方法了,但是上面有好几处代码怎么定位到是哪个代码等待呢?这个我们可以选择对每个方法调用进行hook然后查看日志,但是这样太费劲了,这时候就需要一个技巧就是如果想定位到哪个方法等待,那么可以进行插入日志代码,看打印信息,但是我们加入很多日志,所以要区分是哪行日志打印了,所以这里有一个技巧就是通过获取当前方法被调用的行数来作为打印的信息,代码大致如下:

这样我们只需要调用log这个方法即可,因为这个方法是无参数的,在插入smali代码的时候有一条基本原则就是尽量把功能模块弄到一个static无参函数中,这样对于插入非常高效便捷也不会出错。有了这个java代码,然后用我之前写的java2smali工具直接运行即可,不了解这个工具的同学可以查看这里:Android中一键转化java2smali工具原理解析;然后就得到了对应的smali代码,然后我们对于这个app呢?不要去直接apktools反编译,因为反编译失败的,我们可以直接操作dex转化成smali即可,这个要用到baksmali和smali这两个工具,我们直接解压apk获取到classes.dex文件,然后执行命令:java -jar baksmali.jar -o classes classes.dex 其中classes是反编译dex之后的smali文件夹目录。然后把我们上面的MyLog.smali放到指定目录下,记住一定要有全路径,比如这里是cn.wjdiankong.log.MyLog,那么就要放到cn/wjdiankong/log/MyLog.smali,没有目录就自己手动新建即可。然后在上面想要插入代码的地方直接插入代码:invoke-static {}, Lcn/wjdiankong/log/MyLog;->log()V 这里我放了好几个:

记住放的地方别瞎乱放入,一般都在move-result...www.huarenyl.cn/ 语句之后也就是方法调用结束之后插入,不然回编译dex会报错的。插入之后就在用smali进行回编译:java -jar smali.jar classes -o classes.dex 其中classes是反编译的smali目录,classes.dex是回编译之后的dex。成功回编译得到新的dex之后,为了验证插入成功,可以用Jadx打开进行查看:

我们看到好几处都插入日志了,并且日志是携带行号的,这样就能区分是哪里的日志打印结果了,好了把这个插入代码的dex在塞到原来的apk中,然后二次签名即可,因为这个应用没有签名校验,所以直接看打印日志:

然后在回过头看看代码:

但是这个createSocket方法是系统的了?得去看源码查看为何等待那么久?对到这里我没去深入看了,因为不是本文研究的重点了,不过可以告诉大家如果感兴趣可以自己写个demo然后用okhttp访问一下接口也是这个createSocket方法等待很久。

二、解决方案

我们问题找到了,解决办法就简单了,为了能够正常抓包,直接把这个okhttp的证书hook修改成系统默认的即可:

然后拦截之前分析的那个设置okhttp的证书代码方法:

然后运行模块之后就可以愉快的抓包啦:

看到了这里就可以愉快的抓到数据包了,其实这里虽然我们知道了解决办法,但是其实内部的原因还是没弄清楚,就是知道原因是okhttp内部的问题,其实这个搜索可以发现内部实现机制的原因,不过这个对于我们不是重点,www.baohuayule.com 那么通过这个样本我们又可以总结一个www.wanmeiyuele.cn 遇到抓不到包的问题解决方案了,那就是全局搜SSLSocketFactory,然后看看应用是否设置了证书信息。如果有就拦截替换成系统默认的证书即可。

三、抓包失败解决方案

通过以往知道的知识以及本文的案例,那么我们就可以总结一下app中抓包失败的解决方案大致如下:

  • 第一、确认Fiddler证书安装正确
  • 第二、是否安装Xposed模块www.leyou1178.cn  JustTrustMe信任所有证书
  • 第三、查看应用中使用的okhttp中是否设置了SSLSocketFactory

其实除了这三个还有其他方式,还有其他方式,不过不在本文介绍了,后面会详细介绍如何防止自己的应用被被人恶意抓包,因为如果应用被人抓包其实很多破解操作就变的很简单了。把这个入口做的安全会对后面的防护有一定效果。

Android逆向之旅---爆破一款资讯类应用「最右」防抓包策略原理分析相关推荐

  1. Android逆向之旅---爆破资讯类应用「最右」的防抓包策略

    一.逆向分析 首先感谢王同学提供的样本,因为王同学那天找到我咨询我说有一个应用Fiddler抓包失败,其实对于这类问题,我一般都会这么回答:第一你是否安装Fiddler证书了,他说他安装了.第二你是否 ...

  2. Android逆向之旅---爆破开启快手App的长视频拍摄权限功能

    一.功能说明 在前几天有人问我快手发布了内侧发布长视频的功能,他找快手小助手申请了但是没有回复,所以我就有空通过代码层面让他有这个功能看看效果如何,这个其实网上已经有很多人在说这个功能了,我们百度一下 ...

  3. android黑科技系列——爆破一款应用的签名验证问题

    一.前言 在之前的文章中说过Android中的安全和破解是相辅相成的,为了防止被破解,很多应用做了一些防护策略,但是防护策略也是分等级,一般简单的策略就是混淆代码和签名校验,而对于签名校验很多应用都是 ...

  4. 5、frida进阶-Android逆向之旅---Hook神器家族的Frida工具使用详解

    本文转载自:https://www.cnblogs.com/qwangxiao/p/9255328.html 一.前言 在逆向过程中有一个Hook神器是必不可少的工具,之前已经介绍了Xposed和Su ...

  5. Android逆向之旅---静态方式分析破解视频编辑应用「Vue」水印问题

    一.故事背景 现在很多人都喜欢玩文艺,特别是我身边的UI们,拍照一分钟修图半小时.就是为了能够在朋友圈显得逼格高,不过的确是挺好看的,修图的软件太多了就不多说了,而且一般都没有水印啥的.相比较短视频有 ...

  6. Android逆向之旅---Android中分析抖音和火山小视频的数据请求加密协议(IDA动态调试SO)

    一.前言 最近萌发了一个做app的念头,大致什么样的app先暂时不说,后面会详细介绍这个app的开发流程和架构,不过先要解决一些技术前提问题,技术问题就是需要分析解密当前短视频四小龙:抖音,火山,秒拍 ...

  7. Android逆向之旅--疯狂兔子无敌跑跑 内购破解教程

    感谢「一块硬币」同学投稿,也热烈欢迎其他同学来投稿,分析是一种快乐,也是一种精神! 今日偶然看到一个还算热门的游戏,看到里面有内购的方法.尝试破解一下 1.拖入AK后重打包,一切顺利安装到手机上后发现 ...

  8. Android逆向之旅---Android中的GG大玩家应用破解教程分析

    之前介绍了如何破解手机端的破解神器MT管理器:点击查看:一直有人让我出一篇关于这个工具如何使用破解教程,可是发现好多应用搞不定,所以就一直没去弄了.今天感谢BinCrack同学的投稿研究,分析教程很详 ...

  9. android 微信朋友圈图文编辑器,做朋友圈的「集赞机」:微信朋友圈生存手册 Android 篇...

    一年几度的「朋友圈杯旅游.美食.自拍大赛」已接近尾声,这一次你有没有再创佳绩呢?作为一项我国人们「喜闻乐见」的装逼活动,朋友圈状态已经成了判定一个人逼格的重要依据,然而根据我多年的研(zhuang)究 ...

最新文章

  1. Linux进程间通信一 System V 共享内存简介与示例
  2. 与 30 家公司过招,得到了这章面试心法
  3. brew更新的时候不更新某个应用_这样用 Git 想不升职加薪都难!
  4. Python 绘制出酷炫的三维图
  5. pycharm查看方法源码
  6. hdu 4496 并查集 逆向 并查集删边
  7. IBASE component valid to field
  8. IDEA 实用功能Auto Import:自动优化导包(自动删除、导入包)
  9. LeetCode 617合并二叉树-简单
  10. win7-64bit 下oracle11g plsql 的正确安装
  11. 就在刚刚,人工智能微专业来啦
  12. oracle dataguard 日志传输,从alert日志看Oracle 11g DataGuard日志传输
  13. ADO访问Excel 2007
  14. 文本摘要 ACL2021
  15. win8系统中chm文件打不开怎么办
  16. 完美解决:“已损坏,无法打开。 您应该将它移到废纸篓。”
  17. VMware虚拟磁盘管理器用法帮助 用法:vmware-vdiskmanager.exe
  18. 中国移动湖南公司2022校园春季招聘正在进行中
  19. Groovy快速入门指南
  20. Unity游戏设计与实现 南梦宫一线程序员的开发实例pdf

热门文章

  1. C和C++结构体的区别
  2. STM32的IIC应用详解2
  3. 改变MATLAB仿真出来的图的线条颜色表
  4. 贫血模型,充血模型(领域驱动设计)
  5. 《spring揭秘》读书笔记三
  6. Informatica PowerCenter使用介绍-转载
  7. 008PHP文件处理——文件操作r w (用的比较多) a x(用的比较少) 模式 rewind 指针归位:...
  8. Cookie简单使用方法
  9. HTTP协议基础知识点点滴滴
  10. Matlab基本函数-conj函数