代码编织梦想

0x00 环境及工具

一、工具

1.抓包工具 charles
2.逆向分析 IDA
3.hook工具 Frida

二、环境

在这里插入图片描述

0x01 开始分析

偶然遇到一个app,抓不到包,各种unpinning姿势也过不去。花了一早上时间一顿研究和学习,才知道是flutter应用。第一次遇到flutter应用,不知所措,查资料学习之。

一、flutter应用判断

如何判断一个应用为flutter应用?简单而快速的判定方式就是分析页面构成:
打开APP,执行命令:
adb shell dumpsys activity top
在这里插入图片描述命令执行完成后,输出的最后一段TASK,即当前手机最所显示的内容,即我们要逆向的APP的界面结构。显而易见是flutter的。同时可以通过日志grep flutter,如果有输出,自然也可以说明是flutter的。

二、正餐开始,flutter应用逆向分析绕过证书绑定

设置代理,使用中间人攻击进行https解密抓包,打开flutter app,会出现断网提示。
在这里插入图片描述
同时抓包失败
在这里插入图片描述

我也是第一次遇到flutter应用,先搜一下也没有现成文章,搜到一篇关于flutter过证书绑定的文章
学习前人的姿势,分析日志:如下图:
执行命令
adb shell logcat |grep flutter
看到错误日志如下:
在这里插入图片描述错误产生在handshake.cc文件的第354行。flutter是开源的,可以直接查看源代码,如下:
在这里插入图片描述

看起来也像是在做证书链校验,可以想到,使用frida hook让程序通过证书链校验即可,通过前面查阅的资料知道,这里不是最好的hook点,在文件ssl_x509.cc上有一个更好的函数可以让我们去hook。那么我们踏上前人搭好的桥梁,去更好的点,函数ssl_crypto_x509_session_verify_cert_chain上查看一下:
在这里插入图片描述如资料中所说,该函数返回值为布尔型,因此猜测,证书链校验成功,则该函数放回true,否则false。大致浏览了一下该函数,发现有字符串: ssl_client和ssl_server
前人告诉我们,flutter开发的app,证书校验链在libflutter.so中。于是可以想到,只要通过frida,hook住该函数的返回值,就可以unpinning,前人使用内存search的方式,基本来说是不太靠谱的,我们选择函数偏移的方式去hook,那么开始。上IDA。
1.搜索字符串:ssl_client或者ssl_server
在这里插入图片描述

2.双击跳到字符串定义
在这里插入图片描述3.查看交叉引用,运气不错,只有一个函数引用了该字符串:
在这里插入图片描述则猜测该函数即我们的目标函数ssl_crypto_x509_session_verify_cert_chain

4.尝试hook:
根据交叉引用获得了函数的偏移地址(即函数名3d087c)
编写hook脚本

function hook_ssl() {
	var base = Module.findBaseAddress("libflutter.so");
    var ssl_crypto_x509_session_verify_cert_chain = base.add(0x3d087c);
	Interceptor.attach(ssl_crypto_x509_session_verify_cert_chain, {
        onEnter: function(args) {
            console.log("\n解除证书绑定校验")
        },
        onLeave: function(retval) {
            console.log("校验函数返回值: " + retval);
            retval.replace(0x1);
            console.log("解除成功\n---------------------");
      }
  });
}
setImmediate(hook_ssl)

5.运行脚本:
frida -U <包名> -l <脚本名>
操作手机,刷新界面,期待成功。
在这里插入图片描述
然而,结果没有任何输出,说明未hook到任何函数。卧槽??
好家伙,研究了一天才知道,我分析的是32位so,但我测试机运行的是64位so。因此,换个so进行分析:
在这里插入图片描述同样的套路,找出函数偏移,进行分析,结果如下:
在这里插入图片描述

在这里插入图片描述在这里插入图片描述

很舒服!
事后我把我遇到的坑在群里吐槽了一下,在此特感谢肉丝姐(r0ysue),对32位so和64位so的判断方法给出了一个简单快捷的方案,为避免大家踩坑,直接放上肉丝姐的图
在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/yhsnihao/article/details/110477720

adb与遥控器按键相关的指令-爱代码爱编程

  输入按键   adb shell tai:/ $ input keyevent 172         或 intput keyevnet KEYCODE_GUIDE     输入文本 adb shell input text xxxxx adb shell input tex

游戏优化系列二:Android Studio制作图标教程-爱代码爱编程

作者 大家好,我叫Jack冯; 本人20年硕士毕业于广东工业大学,于2020年6月加入37手游安卓团队;目前主要负责海外游戏发行安卓相关开发。 系列目录 * 游戏优化系列一:海外谷歌应用适配相关 * 游戏优化系列二:Android Studio制作图标教程(**本章讲解**) * 游戏优化系列三:Unity游戏的黑屏问题解决方法   背景

2、Android开发初体验-爱代码爱编程

Android开发初体验 文章目录 Android开发初体验第一步:第二步:第三步:第四步:代码块第五步: 参考书目:《Android 编程权威指南》 本次将带你开发本书第一个应用, 并借此学习一些Android基本概念以及构成应用的UI组件。马上要开发的应用名叫GeoQuiz,它能给出一道道地理知识问题。用户点击TRUE或FALSE按钮来

Android与MVC设计模式(我的学习笔记3)-爱代码爱编程

Android与MVC设计模式提示:部分资源来源网络,仅供学习,侵权即删! 指导教材:Android编程权威指南 本教程为第二章操作 1.创建新类 在项目工具窗口中,右键单击com.example.ad0_c5_d3_26_1f_13032类包,选择Nex——Java Class,命名为Question,然后点OK按钮。 package com.al

linux环境下编译适用于andorid的ffmpeg和x264源码-爱代码爱编程

首先需要下载linux平台下的NDK,这里使用最新版的 下载好配置NDK环境 然后下载x264的源码 编译脚本 #!/bin/bash set -x export NDK=$NDK_ROOT export TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64 export API=21 fun

exposed beyond app through ClipData.Item.getUri()-爱代码爱编程

安卓调用摄像机录像的时候,出现了这个错误。 http://blog.csdn.net/qq_23179075/article/details/70314473 参考这个老哥说的: 在Application类里加东西。 其实就是自己写一个类,继承自Application: public class App extends Applicat

双尾蝎后门程序-爱代码爱编程

样本分析 投递手法 通过钓鱼邮件投递以IT从业者简历为主题的可执行文件,该文件通过长文件名+WORD图标的方式,伪装为文档诱骗收件人下载打开。流程图如下: 样本详细分析 该Delphi可执行文件运行后会通过窗体TForm1类中设置的3个按钮控件和4个计时器控件的响应事件,执行对应功能,如截图,下载文件,执行Shell代码等: 执行Timer后根据执

IOS逆向需用到的工具汇总-爱代码爱编程

1、Mac 上自带的一些命令工具 file:查看Mach-O的文件类型 file 文件路径 otool:查看Mach-O特定部分和段的内容 otool -L Mach-O文件 # 查看当前 Mach-O 文件的动态链接库。 lipo:常用于多架构Mach-O文件的处理 查看架构信息:lipo -info 文件路径导出某种特定

进程名称检测-爱代码爱编程

往期推荐 调试端口检测 调试与反调试–关键文件检测 模拟器检测 文件检测 一:分析进程名称检测的C代码 1.来到main函数,从main函数的coursecheck()开始分析,如下图所示。 2.直接查看调用的函数coursecheck(),如下图所示。 3.分析该函数,首先它定义几个char型的数组,如下图所示。 4.获取当

self-debugging反调试-爱代码爱编程

往期推荐 轮循检测技术 进程名称检测 调试端口检测 调试与反调试–关键文件检测 Self的英文意思是自己,顾名思义,self-debugging就是通过调试自身检测出是否被调试。 一 : self-debugging反调试原理 1.通过观察下图所知。,当前的进程就是父进程,也就是即将被调试的进程。 2.然后通过父进程来fork一个子进程

《逆向工程核心原理》学习笔记(一):代码逆向技术基础-爱代码爱编程

前言 开始学习逆向 从《逆向工程核心原理》这本经典开始 本篇笔记是第一部分:代码逆向技术基础 一、关于逆向工程 1、代码逆向工程 代码逆向工程(Reverse Code ENgineering, RCE)(吐槽下,英文缩写真的太乱了,代码执行漏洞也是RCE) 静态分析:不执行代码文件动态分析:调试分析代码流然后是些鸡汤 建议循序渐进 不要急躁贪婪

Java层反调试-爱代码爱编程

往期推荐 self-debugging反调试 轮循检测技术 进程名称检测 调试端口检测 安卓程序动态调试需要满足两个条件。 1.在AndroidMainfest.xml文件中,在application标签下,Android:debuggable=true。 2.系统默认调式,在build.prop(boot.img),ro.debugable