另一个生鲜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 讨论下。


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

相关文章
|
9天前
|
开发框架 监控 .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
|
2月前
|
安全
【Azure App Service】App service无法使用的情况分析
App Service集成子网后,如果子网网段中的剩余IP地址非常少的情况下,会在App Service实例升级时( 先加入新实例,然后在移除老实例 )。新加入的实例不能被分配到正确的内网IP地址,无法成功的访问内网资源。 解决方法就是为App Service增加子网地址, 最少需要/26 子网网段地址。
|
3月前
【Azure Function App】本地运行的Function发布到Azure上无法运行的错误分析
【Azure Function App】本地运行的Function发布到Azure上无法运行的错误分析
|
3月前
|
开发框架 缓存 .NET
【App Service】在Azure App Service中分析.NET应用程序的性能的好帮手(Review Stack Traces)
【App Service】在Azure App Service中分析.NET应用程序的性能的好帮手(Review Stack Traces)
|
1月前
|
Android开发 iOS开发 容器
鸿蒙harmonyos next flutter混合开发之开发FFI plugin
鸿蒙harmonyos next flutter混合开发之开发FFI plugin
|
1月前
|
开发者
鸿蒙Flutter实战:07-混合开发
鸿蒙Flutter混合开发支持两种模式:1) 基于har包,便于主项目开发者无需关心Flutter细节,但不支持热重载;2) 基于源码依赖,利于代码维护与热重载,需配置Flutter环境。项目结构包括AppScope、flutter_module等目录,适用于不同开发需求。
74 3
|
17天前
|
传感器 开发框架 物联网
鸿蒙next选择 Flutter 开发跨平台应用的原因
鸿蒙(HarmonyOS)是华为推出的一款旨在实现多设备无缝连接的操作系统。为了实现这一目标,鸿蒙选择了 Flutter 作为主要的跨平台应用开发框架。Flutter 的跨平台能力、高性能、丰富的生态支持和与鸿蒙系统的良好兼容性,使其成为理想的选择。通过 Flutter,开发者可以高效地构建和部署多平台应用,推动鸿蒙生态的快速发展。
130 0
|
19天前
|
Dart 安全 UED
Flutter&鸿蒙next中的表单封装:提升开发效率与用户体验
在移动应用开发中,表单是用户与应用交互的重要界面。本文介绍了如何在Flutter中封装表单,以提升开发效率和用户体验。通过代码复用、集中管理和一致性的优势,封装表单组件可以简化开发流程。文章详细讲解了Flutter表单的基础、封装方法和表单验证技巧,帮助开发者构建健壮且用户友好的应用。
60 0
|
1月前
|
开发框架 移动开发 Android开发
安卓与iOS开发中的跨平台解决方案:Flutter入门
【9月更文挑战第30天】在移动应用开发的广阔舞台上,安卓和iOS两大操作系统各自占据半壁江山。开发者们常常面临着选择:是专注于单一平台深耕细作,还是寻找一种能够横跨两大系统的开发方案?Flutter,作为一种新兴的跨平台UI工具包,正以其现代、响应式的特点赢得开发者的青睐。本文将带你一探究竟,从Flutter的基础概念到实战应用,深入浅出地介绍这一技术的魅力所在。
77 7
|
1月前
|
编解码 Dart API
鸿蒙Flutter实战:06-使用ArkTs开发Flutter鸿蒙插件
本文介绍了如何开发一个 Flutter 鸿蒙插件,实现 Flutter 与鸿蒙的混合开发及双端消息通信。通过定义 `MethodChannel` 实现 Flutter 侧的 token 存取方法,并在鸿蒙侧编写 `EntryAbility` 和 `ForestPlugin`,使用鸿蒙的首选项 API 完成数据的读写操作。文章还提供了注意事项和参考资料,帮助开发者更好地理解和实现这一过程。
57 0

热门文章

最新文章