文章参考自看雪:[原创]一种基于frida和drony的针对flutter抓包的方法

Flutter是Google使用Dart语言开发的移动应用开发框架,使用一套Dart代码就能快速构建高性能、高保真的iOS和Android应用程序。

由于Dart使用Mozilla的NSS库生成并编译自己的Keystore,导致我们就不能通过将代理CA添加到系统CA存储来绕过SSL验证。为了解决这个问题,就必需要研究libflutter.so


原文章是找特征,用frida内存扫描特征,不过这个特征每个app好像还不一样,做不到通用。

借用大佬的结论,直接将apk pull到电脑上,解压,在lib目录中找到libflutter.so。用IDA打开

搜索字符串ssl_client


在字符串面板ctrl+F搜索字符串ssl_client 找到了


双击进去

看交叉引用

鼠标放在函数位置按x搜索交叉引用(右键 list cross references也可)
可以找到并定位函数为sub_3B1834

双击进去看看,下面画红圈的就是特征的样子

找函数头

往上找,找到函数头

,或者f5看伪代码也可以

hook

使用github封装的一个hook脚本

然后把地址换成自己的0x3B1834

之所以address.add(0x01)是因为看到这么个说明:在32位ARM上, 对于ARM函数, 此地址的最低有效位必须设置为0, 对于Thumb函数, 此地址必须设置为1。

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(){
  // Change the offset on the line below with the binwalk result
  // If you are on 32 bit, add 1 to the offset to indicate it is a THUMB function: .add(0x1)
  // Otherwise, you will get 'Error: unable to intercept function at ......; please file a bug'
  var address = Module.findBaseAddress('libflutter.so').add(0x3B1834)
  hook_ssl_verify_result(address);
}
setTimeout(disablePinning, 1000)

接下来adb启动frida
进入app之后`frida –UF –l flutter_by_pass.js “(-UF 就是当前打开的app)
可以触发一下发包的动作,看有没有日志打印

有的话启动postern, charles进行抓包

分类: app逆向

站点统计

  • 文章总数:308 篇
  • 分类总数:19 个
  • 标签总数:190 个
  • 运行天数:950 天
  • 访问总数:33218 人次

浙公网安备33011302000604

辽ICP备20003309号