分享一种针对uni-app相对通用的抓包方案

news2024/9/21 13:44:29

PART1,前言

近年来混合开发APP逐渐成为主流的开发模式,与传统的开发模式相比混合开发极大的提升了开发效率,同时跨平台的特性也降低了开发成本,一直以来混合开发被诟病的性能问题随着技术的发展也得到改善。技术的发展往往是一把双刃剑,混合开发模式的出现导致“一次编码,多端运行”变成了现实,除此之外混合开发的APP相比原生开发的APP逆向成本也有了一定提升,这就给了黑灰产足够的诱惑:低成本、难逆向。混合开发模式的出现和快速发展给了黑灰产、病毒木马可乘之机,为应对未来的威胁我们应该做好技术储备,目前市面主流的混合开发框架有三款:uni-app、React Native和Flutter,三款框架各有优劣,从成本而言uni-app可能是三款框架中最好上手、最快开发、支持最多平台的,同时抓包可以算是最常见的逆向手段,我便对几个用uni-app框架开发的APP进行分析,尝试寻求一种相对通用的抓包方案。

PART2,关于uni-app

概念

uni-app是什么?了解一种技术或者框架最好的渠道就是官网,从uni-app官网可得知“uni-app 是一个使用 Vue.js 开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、Web(响应式)、以及各种小程序(微信/支付宝/百度/头条/飞书/QQ/快手/钉钉/淘宝)、快应用等多个平台”,简单翻译下uni-app就是一款使用Vue开发的一套代码多端运行的混合开发框架。

uni-app的优势

官网也介绍了uni-app的优势,其中大多数的优势React Native、Flutter等其他混合开发框架也具备,这里着重说几点uni-app与其他框架比较的优势:
1、uni-app实现真正意义上的“一套代码多端运行”,支持更多的平台,提升开发效率。
2、与Flutter相比,uni-app使用Vue进行开发无需学习新的语言,开发成本较低。

底层原理浅析

上图取自官网uni-app功能框架图,其实我们只需要关注native.js部分提及“使用JS直接调用IOS API”和“使用JS直接调用Android API”大致就可以了解uni-app的运行原理,uni-app在Android或IOS设备运行时从架构上可以分成视图层和逻辑层,其中视图层负责页面渲染,而逻辑层负责执行业务逻辑,最终业务逻辑的执行会直接调用Android或IOS的原生API实现,除此之外页面渲染最终也会利用原生UI组件。所谓一套源码多端运行,也是因为uni-app可以使用条件编译实现不同平台的特性编码。

如何逆向uni-app

关于如何逆向uni-app,正好赶上最近ChatGPT比较火,我也体验了一把号称ChatGPT同根同源的平替“Claude”,得到的答案如上图所示。从图中可以看出Claude建议从几个方面考虑如何逆向,由于我本人是开发出身所以看到第8条建议的时候内心是非常认同的,“阅读uniapp的开发文档与源码示例,可以得到官方提供的一些框架结构与说明信息”,其实之前通过官网我们已经大致清楚了uni-app的功能框架图,并且确定uni-app的逻辑实现最终是通过native.js直接调用Android或IOS的原生API实现。因此我们只需要对官方提供的源码示例(Demo)进行分析,必定会找到一些较为通用的逆向技巧,接下来便以Android为例开始一步步分析,获取一种针对uni-app较为通用的抓包方案。

PART3,抓包实战

加上官网下载的Demo,我的手里一共有三个apk,直接挂代理用BurpSuite等抓包工具抓包的话,毫无疑问三个都是抓包失败,并且另外两个apk是加固的,为了最快的达成目的,我直接逆向Demo一步步探索相对通用的抓包方案:

第一步,思路分析

简单看了下Demo,我脑海瞬间出现4种抓包方案:
1.暴力破解

还是看官网!从API介绍可以了解到,uni-app是通过uni.request(OBJECT)发起请求,并且从上图参数说明中可以看到一个用于验证ssl证书的参数“sslVerify”,所以理论上只要我们能够把这个参数修改为false,即可管不ssl证书验证,那么如何修改该参数呢? 

上图为Demo的文件目录部分截图,我们可以从assets目录下找到uni-app的前端代码,所以我们可以通过修改对应的代码后二次打包关闭ssl证书验证,也可以通过定制系统将整个资源包替换来实现同样的功能,那是相当暴力!但是对加固的应用而言,相关代码是经过混淆保护的,很难定位关键代码,这种思路就不通用了。
2.更改网络安全配置
 

上图为官方Demo的安全配置文件,可以看出debug模式是同时信任系统证书和用户证书的,那么我们可以通过二次打包或者定制ROM对apk的manifest文件进行修改,将debuggable属性修改为true,当然我们也可以直接对安全配置文件进行修改,设置信任用户证书,但是这种思路可能无法覆盖全部的请求,并且逆向两个加固的apk看了下并没有安全配置文件,因此也是不通用的。
3.Hook bypass ssl pinning
通过Hook来破解证书钢钉,在原生APP逆向时是一个常见的思路,对于uni-app其实也是完全可行的,不过个人感觉既然能够Hook,没必要再借助BurpSuite等工具进行抓包了,于是没有进一步验证,但是理论上是绝对可行的,当然还一个主要的原因是许多应用都会检测代理,看起来这种思路也不是那么通用。
4.报文自吐
该思路也是本文接下来要分享的思路,其实很简单,就是通过逆向分析官方Demo,从而确定网络请求框架,然后对网络请求框架进行分析,确定Hook的关键函数,最后打印请求报文和响应报文。

第二步,顺藤摸瓜

使用Jadx打开官网Demo,待反编译完成后查看文件目录,可看到上图红框中对应的目录,基本可以判断uni-app所开发的APP是通过OkHttp这一框架实现网络请求,只不过对应的包名与OkHttp官方包名有所不同,猜测是为了适配uni-app做了一定的改动,但是万变不离其宗,整体的思路应该是相同的。

第三步,照猫画虎

OkHttp作为目前可以说是安卓开发最主流的网络通信框架,用起来也是比较简单的,其支持同步请求和异步请求两种方式,首先需要实例化一个OkHttpClient对象,OkHttpClient有两个构造方法,可以通过传入一个构建好的Builder来设置相关参数,也可以采取默认的构造方,这时候就可以设置不走代理、证书钢钉等配置。
然后构建一个Request对象,其实就是请求,结合最后获得的Response即可得到完整的网络报文。
接下来就是真正的请求了,无论是异步还是同步请求,都需要调用OkHttpClient对象的newCall(Request)方法,而newCall方法最终会调用RealCall的newRealCall方法获取到一个RealCall对象,异步请求对应RealCall的enqueue方法,而同步请求则对应execute方法,如果继续阅读OkHttp框架源码不难发现enqueue最终还是会回到execute,因此只关注该方法即可。

继续跟进getResponseWithInterceptorChain方法,我们可以看到这个方法会创建一个Interceptor的List,并且会向里添加一系列的元素,Interceptor是一个接口,所有的拦截器都要实现该接口,请记住这一点后面会用到。 

最终通过chain.proceed(originalRequest)获取到Response对象,也就是响应对象。
再次回到本文的主题,如何抓包呢?所谓抓包其实就是对应用网络通信过程中的请求和响应报文进行截获,也就是前面提及到的Request和Response对象,只要能获取到这两个对象就可以实现相关报文的打印。
前面提及到所有的拦截器都会实现Interceptor接口,目前网上有很多自定义拦截器实现的抓包方案,frida提供了一个名为“registerClass”的api注册接口类,借助这个api可以方便的创建一个自定义拦截器,然后获取Request和Reponse对象。
如果不喜欢frida,非要用xposed实现呢?Xposed并未听说会支持注册接口,那么我么不妨换一种思路,我们的目的本质上是获取Request和Reponse对象,回顾OkHttpClient是如何使用的?其实完全可以对RealCall这个类的getResponseWithInterceptorChain方法进行Hook,通过反射获取到Request对象originalRequest,然后通过getResult获取到返回值,也就是Reponse对象,后面就是报文的打印了,网上可抄的案例很多。
前面其实已经分享了两种OkHttpClient的通用抓包方案:基于Frida、基于Xposed,那么对于uni-app的抓包来说也是小事一桩了,无非就是找到对应的目标类和目标方法即可,关键代码如下图所示: 

第四步,大功告成

最后就是简单的验证了,通过验证官网Demo及手头另外两个加固的apk都是可以正常抓到报文的,所以理论上这算是一种针对uni-app相对通用的抓包方案,大功告成。

 

PART4,总结与展望

Ok,到此接近文章的尾声了,其实本文分享的内容也是比较简单的,无非就是官网资料对uni-app框架有一个初步的认识和了解,判断其业务逻辑最终还是由原生实现,进一步借助官方Demo确定网络请求框架后照葫芦画瓢根据OkHttpClient的通用抓包方案稍加改造即可实现对uni-app相对通用的抓包。
其实混合开发的APP必定会涉及原生与Web端的交互,因此无论是React Native、uni-app,还是Flutter都可以用类似的思路进行分析,比如RN的模块、Flutter的引擎层等等都可以成为我们开始逆向工作的下手点。

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/932139.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue3+uni——watch监听props中的数据(组件参数接收与传递defineProps、defineEmits)

案例说明 A页面引用的子组件B A页面 <template><view>//引用组件<serviceOrder change"change" :list"list" :current"type"></serviceOrder></view> </template><script setup>import serviceOrd…

智慧课堂学生行为检测评估算法

智慧课堂学生行为检测评估算法通过yolov5系列图像识别和行为分析&#xff0c;智慧课堂学生行为检测评估算法评估学生的表情、是否交头接耳行为、课堂参与度以及互动质量&#xff0c;并提供相应的反馈和建议。智慧课堂学生行为检测评估算法能够实时监测学生的上课行为&#xff0…

基于Jenkins自动化部署PHP环境---基于rsync部署

基于基于Jenkins自动打包并部署Tomcat环境_学习新鲜事物的博客-CSDN博客环境 准备git仓库 [rootgit ~]# su - git 上一次登录&#xff1a;五 8月 25 15:09:12 CST 2023从 192.168.50.53pts/2 上 [gitgit ~]$ mkdir php.git [gitgit ~]$ cd php.git/ [gitgit php.git]$ git --b…

Heikin-Ashi怎么用,FPmarkets澳福找到3个使用环境

所有赚到钱的交易者都在告诉你Heikin-Ashi是个能赚到钱的交易指标&#xff0c;但是没有一个赚到钱的交易者告诉你如何使用Heikin-Ashi交易指标赚到钱。其实很简单&#xff0c;只要理解Heikin-Ashi的这3个使用环境&#xff0c;如果不好使&#xff0c;FPmarkets澳福帮你账户充值1…

pytest pytest.ini 配置日志输出至文件

创建pytest.ini 文件 [pytest] log_file pytest_log.txt log_file_level INFO log_file_date_format %Y-%m-%d %H:%M:%S log_file_format %(asctime)s | %(filename)s | %(funcName)s | line:%(lineno)d | %(levelname)s | %(message)s import pytest import loggingdef …

基于Hadoop的MapReduce网站日志大数据分析(含预处理MapReduce程序、hdfs、flume、sqoop、hive、mysql、hbase组件、echarts)

需要本项目的可以私信博主&#xff01;&#xff01;&#xff01; 本项目包含&#xff1a;PPT&#xff0c;可视化代码&#xff0c;项目源码&#xff0c;配套Hadoop环境&#xff08;解压可视化&#xff09;&#xff0c;shell脚本&#xff0c;MapReduce代码&#xff0c;文档以及相…

【附安装包】EViews 13.0安装教程|计量经济学|数据处理|建模分析

软件下载 软件&#xff1a;EViews版本&#xff1a;13.0语言&#xff1a;英文大小&#xff1a;369.46M安装环境&#xff1a;Win11/Win10/Win8/Win7硬件要求&#xff1a;CPU2.0GHz 内存4G(或更高&#xff09;下载通道①百度网盘丨64位下载链接&#xff1a;https://pan.baidu.com…

Win系统设置开机自启项及自定义自启程序

Win系统设置开机自启项及自定义自启程序 分用户自启动和系统自启动两种形式&#xff1a; 1. 用户自启动目录&#xff1a;C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 用快速键打开&#xff1a; Win键R键&#xff0c;输入shell:…

连接数据库报错:2003-Can’t connect to Mysql server on ‘localhost’(10061)

今天在进行配置数据库的时候发现如下问题&#xff1a; 数据库出现2003错误&#xff0c;连接失败。 主要原因是我们的数据库服务没有开&#xff0c;winr&#xff0c;输入services.msc&#xff0c;打开本地服务 找到Mysql服务&#xff0c;右键启动即可。

响应式布局bootstrap使用

响应式布局 学习目标 能够说出响应式原理 能够使媒体查询完成响应式导航 能够使用Bootstrap的栅格系统 能够使用bootstrap的响应式工具 1.响应式原理 1.1响应式开发原理 就是使用媒体查询针对不同宽度的设备进行布局和样式的设置,从而适配不同设备的目的 1.2响应式布局容器…

什么是Promise对象?它的状态有哪些?如何使用Promise处理异步操作?以及 async、await

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ Promise对象⭐ 创建Promise对象⭐ 使用Promise处理异步操作⭐ async、await⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅…

FFmpeg5.0源码阅读——FFmpeg大体框架

摘要&#xff1a;前一段时间熟悉了下FFmpeg主流程源码实现&#xff0c;对FFmpeg的整体框架有了个大概的认识&#xff0c;因此在此做一个笔记&#xff0c;希望以比较容易理解的文字描述FFmpeg本身的结构&#xff0c;加深对FFmpeg的框架进行梳理加深理解&#xff0c;如果文章中有…

一篇文章带你实现队列的接口

目录 一&#xff0c;什么是队列 二&#xff0c; 队列的存储结构 1.顺序队列 2.循环队列 3.链队列 三&#xff0c;队列的接口实现 3.1初始化队列 3.2队尾入队列 3.3队头出队列 3.4获取队列头部&#xff0c;尾部元素 3.5获取队列中有效元素个数 3.6销毁队列 四&#x…

python实现卡尔曼滤波代码详解

Kalman滤波算法的原理可以参考&#xff1a; 卡尔曼滤波理解 python中filterpy库中实现了各种滤波算法&#xff0c; 其中就包括了kalman滤波算法。 具体实现代码&#xff1a; https://github.com/rlabbe/filterpy/blob/master/filterpy/kalman/kalman_filter.py 本文针对该代码…

0825hw

//冒泡排序 void Bubble_sort(Sp p) {for(int i1;i<p->len;i){for(int j0;j<p->len-i;j){if(p->arr[j]>p->arr[j1]){int tp->arr[j];p->arr[j]p->arr[j1];p->arr[j1]t;}}} } //简单选择排序 void Simple_sort(Sp p) {for(int i1;i<p->l…

Unreal5(虚幻5)学习记录 快捷键

虚幻5学习记录 快捷键 世界场景中漫游&#xff08;镜头移动): 按住鼠标右键 键盘的W(前) S(后) A(左) D(右) E(上) Q(下)键 透视 透视 ALTG 上部分 ALTJ 底视图ALTSHIFTJ 左视图 ALTK 右视图 ALTSHIFTK 前视图 ALTH 后视图 ALTSHIFTH 内容浏览器 Ctrl Space 内容浏览器…

【FPGA】 3-8译码器 —— 组合逻辑 | 熟悉语法及开发环境

文章目录 1. 设计输入2. 分析综合3. 功能仿真4. 板爷调试 继续熟悉基于vivado的FPGA开发流程。。学习一些新语法 3-8 译码器的应用我们接下来还会用到~ 创建工程 观众老爷们别管了&#xff0c;咱板子也不一定一样~ 1. 设计输入 编码画框图&#xff0c;vivado支持较弱使用IP&…

天津Java培训班怎么选? Java适合什么人学?

Java在许多移动和桌面应用程序中都容易学习和使用&#xff0c;还有很多Java工具可以让开发人员和初学者轻松使用&#xff0c;如果你考虑从事计算机领域的工作&#xff0c;或者希望提高编程技能&#xff0c;那么学习Java是一个好选择。 为什么推荐学Java 需求量大&#xff1a;…

【C++初阶】模拟实现list

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;C航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&#x1…

Minio如何禁止桶遍历

说明&#xff1a;Minio是文件资源服务器&#xff0c;相当于免费的OSS&#xff0c;安装参考&#xff1a;Minio使用及整合起步依赖&#xff1b; 如果你的桶&#xff08;Bucket&#xff09;权限设置的是“Private”&#xff0c;那么可能会有数据泄露的风险。像别有用心的用户&…