另一个生鲜App 抓包和mfsig签名分析(二) 针对flutter抓包

简介: 另一个生鲜App 抓包和mfsig签名分析(二) 针对flutter抓包

一、目标


拿到App之后,抓不到包是件很令人抓狂的事情。今天我们通过排除法来分析抓包失败的原因,并提供一个通用的 针对flutter抓包 的方案。


  • 抓包工具和环境介绍
  • 抓包失败的几种原因和对应的解决方案
  • 针对flutter抓包


今天我们分析的还是 某生鲜App v9.9.59


二、步骤

抓包工具和环境介绍


飞哥手头有两个不同的抓包环境,一台手机是通过手工设置代理到pc上,通过 mitmproxy 来抓包,另一台手机是不需要手工设置代理,通过手机上的 #Drony# 启动一个vpn,然后PC上用 Charles 来抓包。


两个环境的共同点是:都需要把对应的证书放到系统证书里面。


因为https需要通过证书获取的公钥来加密数据,而抓包工具伪装成中间人服务器,让App使用抓包工具的证书来实现分析https数据包的目的。


我们后面的故事都是围绕这个 证书 来展开。


抓包失败的几种原因和对应的解决方案

不走系统代理


最简单的抓包失败的原因是:app检测是否设置了代理,如果设置了,就不走这个代理,继续直接访问。


这样我们的第一种抓包环境就失效了。解决方法就是用第二种抓包环境,app发现不了被代理了。


使用QUIC或者Spdy协议


这个在某手App里出现过,我们的解决方法是利用App自身的配置,强制它继续使用https协议来解决。


SSL证书双向认证


91fans.com.cn/post/social… 里介绍过,把客户端证书搞出来,然后导入到抓包软件里解决。


Java层的 SSL Pinning


APP代码内置仅接受指定域名的证书,而不接受操作系统或浏览器内置的CA根证书对应的任何证书,通过这种授权方式,保障了APP与服务端通信的唯一性和安全性。


Xposed的插件 JustTrustMe和SSLUnPinning 还有Objection的 android sslpinning disable 命令都是对付它的。


Native层的 SSL Pinning


Native层也就是so里面做的SSL Pinning,目前没有通用的解决方案,只能见招拆招,具体情况具体去搞。


今天我们遇到的就是 so里面做的SSL Pinning,导致抓不到包。

针对flutter抓包


在对这个生鲜App的分析中,我们发现只有很少的数据包被截获,明显有很多包被漏掉了。


所以毫不犹豫的上第二台手机了。16.png


这次要好一些,但是还是有些图片无法显示。应该还是有些包漏了。


我们用排除法,搜quic、spdy,然后再试试是不是ssl证书双向认证。


坏消息是都不对。 好消息是我们发现它的lib文件夹里面有个 #libflutter.so#。


早就听说flutter不好搞了。既然确定了它的身份,就好说了。


看雪上找到了一篇文章

一种基于frida和drony的针对flutter抓包的方法

function hook_ssl_verify_result(address)
{
    Interceptor.attach(address, {
        onEnter: function(args) {
            console.log("Disabling SSL validation")
        },
        onLeave: function(retval)
        {
            console.log("Retval: " + retval)
            retval.replace(0x1);
        }
    });
}
function disablePinning()
{
    var m = Process.findModuleByName("libflutter.so");
  console.log(m);
    var pattern = "2d e9 f0 4f a3 b0 81 46 50 20 10 70"
    var res = Memory.scan(m.base, m.size, pattern, {
        onMatch: function(address, size){
            console.log('[+] ssl_verify_result found at: ' + address.toString());
            // Add 0x01 because it's a THUMB function
            hook_ssl_verify_result(address.add(0x01));
        }, 
        onError: function(reason){
            console.log('[!] There was an error scanning memory');
        },
        onComplete: function()
        {
            console.log("All done")
        }
    });
}


由于这个生鲜App加壳了,并且so的加载也需要时间,所以我们在js中加上延迟10s。

setTimeout(main, 10000);

17.png


这次效果不错。


三、总结


libflutter.so版本不同,不要硬搬教程的 pattern, 先确定你的手机环境是64位还是32位,然后用Ida打开Apk中的libflutter.so, 搜索字符串 ssl_client 来定位函数。

ADD R1, PC  ; "ssl_client"


定位到这条指令所在的函数,然后取函数开头前10来个字节做 pattern 即可。


遇到问题多在lib里面翻翻,说不定有惊喜。18.png


问: "如何是道?" 曰:"只在目前。"  问:"为甚么不见?"  曰:"瞎。"


TIP: 本文的目的只有一个就是学习更多的逆向技巧和思路,如果有人利用本文技术去进行非法商业获取利益带来的法律责任都是操作者自己承担,和本文以及作者没关系,本文涉及到的代码项目可以去 奋飞的朋友们 知识星球自取,欢迎加入知识星球一起学习探讨技术。有问题可以加我wx: fenfei331 讨论下。


关注微信公众号: 奋飞安全,最新技术干货实时推送

相关文章
|
27天前
|
开发框架 监控 .NET
【Azure App Service】部署在App Service上的.NET应用内存消耗不能超过2GB的情况分析
x64 dotnet runtime is not installed on the app service by default. Since we had the app service running in x64, it was proxying the request to a 32 bit dotnet process which was throwing an OutOfMemoryException with requests >100MB. It worked on the IaaS servers because we had the x64 runtime install
|
3月前
|
安全
【Azure App Service】App service无法使用的情况分析
App Service集成子网后,如果子网网段中的剩余IP地址非常少的情况下,会在App Service实例升级时( 先加入新实例,然后在移除老实例 )。新加入的实例不能被分配到正确的内网IP地址,无法成功的访问内网资源。 解决方法就是为App Service增加子网地址, 最少需要/26 子网网段地址。
|
4月前
【Azure Function App】本地运行的Function发布到Azure上无法运行的错误分析
【Azure Function App】本地运行的Function发布到Azure上无法运行的错误分析
|
4月前
|
开发框架 缓存 .NET
【App Service】在Azure App Service中分析.NET应用程序的性能的好帮手(Review Stack Traces)
【App Service】在Azure App Service中分析.NET应用程序的性能的好帮手(Review Stack Traces)
|
2月前
|
JSON 小程序 JavaScript
uni-app开发微信小程序的报错[渲染层错误]排查及解决
uni-app开发微信小程序的报错[渲染层错误]排查及解决
625 7
|
2月前
|
小程序 JavaScript 前端开发
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
716 1
|
1月前
|
小程序 数据挖掘 UED
开发1个上门家政小程序APP系统,都有哪些功能?
在快节奏的现代生活中,家政服务已成为许多家庭的必需品。针对传统家政服务存在的问题,如服务质量不稳定、价格不透明等,我们历时两年开发了一套全新的上门家政系统。该系统通过完善信用体系、提供奖励机制、优化复购体验、多渠道推广和多样化盈利模式,解决了私单、复购、推广和盈利四大痛点,全面提升了服务质量和用户体验,旨在成为家政行业的领导者。
|
2月前
|
JavaScript 前端开发 小程序
uniapp一个人开发APP关键步骤和考虑因素
uniapp一个人开发APP关键步骤和考虑因素
138 1
uniapp一个人开发APP关键步骤和考虑因素
|
2月前
|
JavaScript 前端开发 UED
Vue与uni-app开发中通过@font-face巧妙引入自定义字体
Vue与uni-app开发中通过@font-face巧妙引入自定义字体
111 9
|
2月前
|
缓存 小程序 索引
uni-app开发微信小程序时vant组件van-tabs的使用陷阱及解决方案
uni-app开发微信小程序时vant组件van-tabs的使用陷阱及解决方案
224 1