使用小黄鸟(HttpCanary)+模拟器(VMOS Pro)对手机APP进行抓包

 

 

 最近接触app开发,苦于app端不能像网页端可以F12看请求信息,对于后端来说当接口出现异常却不能拿到请求参数是很苦恼的,

因为之前了解过逍遥模拟器,先使用了模拟器对appj进行抓包,但发现这一款app在模拟器上面卡的很,根本玩不转。

后面找到了一个可以在手机上直接抓包的工具——httpcanary(小黄鸟)。

起初我使用的是一个比较老一点的安卓机(安卓机A),版本低,直接安装了小黄鸟,跟着小黄鸟上面的提示安装好对应的证书就可以直接抓包。

后面在使用安卓机A的过程中,屏幕小,性能不高,于是出巨资买了一个版本较高的安卓机B之后发现直接安装小黄鸟竟然不能抓包了。

经过了解才知道高版本的安卓机B没有开发者权限,如果需要打开开发者权限又需要一系列的申请和刷机操作,

后面了解到VMOS PRO 虚拟机可以解决此问题。

 

 

软件下载地址(百度网盘):

链接:http://pan.baidu.com/s/1jUtzlaqUahFdGarRSwLWKA?pwd=1f1g
提取码:1f1g

以下这3个就是我们需要用到的手机软件 :

安装成功之后的app图标,JustTrustMe是没有图标的哦。          

                             

 

1、安装:JustTrustMe

    在真机上安装JustTrustMe.apk

 

 

2、安装虚拟机:VMOS Pro

                         

 

 

  

 

 

 

 

  

 

 

  

 1) 选择创新全自动 

 2) 进入虚拟机桌面->设置->打开超级用户和Xposed

 3) 虚拟机桌面添加->导入JustTrustMe和需要被抓包的app

 4) 虚拟机桌面Xposed->模块->添加JustTrustMe

 5) 关闭虚拟机回到真实机桌面

 

 注:如果在安装的过程中提示让模拟机更新,不要更新,

 更新后超级用户和Xposed需要付费才能使用,

如果介意此版本不是正版的朋友可以去app商店下载正版,付费开超级用户和Xposed。

 

3、安装小黄鸟:HttpCanary

安装HttpCanary.apk在真实机(这个不是安装在虚拟机里面的哦)

 

 

HttpCanary->设置->目标应用->需要被抓包的软件(VMOS Pro)。

 

4、进入抓包流程

打开虚拟机(VMOS Pro)->打开真机上的小黄鸟(HttpCanary)->在虚拟机中操作需要被抓包的app;

注意:一定要先打开虚拟机再打开小黄鸟,不然无法抓包哦。

 

 

最后这个抓包就完成了,成功拿到我们需要的接口请求参数了。

 

小编啰嗦几句:

小黄鸟+虚拟机的组合在安卓系统和鸿蒙系统中都可以使用。

苹果系统的用户自己试一试罗(本人没有试过苹果系统是否也能抓包) 

 

本文转载于网络 如有侵权请联系删除

相关文章

  • 手把手教你Tomcat配置环境变量以及验证方法

    大家好,又见面了,我是你们的朋友全栈君。场景现在要将Tomcat配置进环境变量。实现以win7为例,找到桌面计算机图表,右键属性。或者打开计算机,找到系统属性。然后找到高级系统设置找到环境变量点击系统变量下的新建找到Tomcat所在目录变量名为:CATALINA_BASE内容为Tomcat所在路径,这里是上面的路径如图:点击确定同理再新建系统变量,变量名为:CATALINA_HOME变量内容同上。然后在系统变量下找到Path变量点击编辑将;%CATALINA_HOME%\lib;%CATALINA_HOME%\bin复制追加在后面点击确定后关闭。验证方法打开cmd,输入:startup回车后能启动Tomcat则配置成功。发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/136128.html原文链接:https://javaforall.cn

  • HashMap在JDK7.0及之前和JDK8.0及之后区别(一下全告诉你)

    前言我们在学习集合的时候,出去list就是map集合使用比较多,今天主要说一下常用的HashMap底层的进化 干货jdk7.0之前数组+链表阈值:30 jdk8.0开始数组+链表+二叉树阈值:30 HashMap底层在1.8之前是基于数组和链表组成形成一个哈希表 首先数组的优点: 查找元素效率高由于数组这个数据结构的特点 他们是等大连续所以当我们想要查找某个元素的时候 只要计算偏移量给可以时间复杂度是O(n) 链表的优点: 链表的数据结构导致他们在添加删除元素的时候效率高 他们通过保存地址指向形成一个链表结构彼此相连接 当我们想要往链表里面添加或者删除一个元素的时候 只需要修改地址指向就可以时间复杂度是O(n) 当我们想要往HashSet/HashMap集合里面添加元素的时候 元素被装进那个小组我们是需要根据hahCode()算出 哈希码值然后根据哈希码值%分组组数看余数 通过余数判断应该去哪一个小组[查找进入的小组] 所以哈希表的表头应该用数组存储这个余数方便查找 但是进入该小组之后如果发现这个小组里面有元素需要 在详细作比较如果比较完之后发现该小组里面的元素 没有和新来的元素一样那

  • 案例:绘制Matplotlib动态图

    学习zhenguo老师的Python课已经一个星期了,自己感觉已经学有小成,刚好昨天老师在接单群里发了一个100元的单子,我毫不犹豫的接了,不仅可以检验自己能否学以致用,还能赚顿小龙虾的钱(50元~)。开发需求这个单子的要求,是使用Python中的matplotlib库绘制动态的折线图,需求描述虽然很简单易懂,但是也要好好分析一下。Matplotlib库这个库也算是Python数据开发必学的库之一了,它主要的功能就是绘制图表,而且实现也非常简单,几行代码就可以绘制出直方图、折线图、散点图、饼图等等常用的图表,一些复杂的数据分析图表它也可以胜任。这里分享一个网址:www.matplotlib.org.cn/gallery/#lines-bars-and-markers,大家可以看看Matplotlib绘图的一些案例,作为自己开发的参考。核心问题Matplotlib库绘制一张静态的折线图比较简单,给定X轴和Y轴的数据集就行,但是想要绘制动态的折线图,就要想办法让绘制出来的图片动起来。其实这个问题理解起来也不难,Matplotlib绘图是生成一张图片,让它动起来的原理就像是动画片,不断生成新

  • 选择篇(081)-下面代码的输出是什么?

    asyncfunctiongetData(){ returnawaitPromise.resolve("Imadeit!"); } constdata=getData(); console.log(data);复制A:"Imadeit!"B:Promise{<resolved>:"Imadeit!"}C:Promise{<pending>}D:undefined答案:C异步函数始终返回一个promise。await仍然需要等待promise的解决:当我们调用getData()并将其赋值给data,此时data为getData方法返回的一个挂起的promise,该promise并没有解决。如果我们想要访问已解决的值"Imadeit!",可以在data上使用.then()方法:data.then(res=>console.log(res))这样将打印"Imadeit!"

  • C++ 动态新闻推送 第32期

    C++动态新闻推送第32期从reddit/hackernews/lobsters/meetingcpp摘抄一些c++动态本期把国庆节这两周的断更补上周刊项目地址|在线地址|知乎专栏腾讯云+社区欢迎投稿,推荐或自荐文章/软件/资源等,请提交issue资讯编译器信息最新动态推荐关注hellogcc公众号OSDTWeekly2021-09-22第117期OSDTWeekly2021-09-22第118期十月了,cppcon要在十月底。到时候会有很多视频分享文章DidyouknowaboutC++2XproposaltoaddMultidimensionalsubscriptoperator?多维数组的支持!c++23提案。说不定会过。CompilerExplorer试玩儿template<classT,autoDimensions>classmdarray2{ public: template<classI1,classI2>constexprT&operator[](I1i1,I2i2){ returnvs_[i1][i2]; } private: std

  • Window安装构建神器Jenkins

    Jenkins是什么?  Jenkins是一款开源CI&CD软件,用于自动化各种任务,包括构建、测试和部署软件。支持各种运行方式,可通过系统包、Docker或者通过一个独立的Java程序。是解放人工集成部署的自动化构建神器。Jenkins中文网 Jenkins有哪些优势:CI&CD的简单介绍:DevOps,CI,CD,自动化简单介绍 Jenkins安装包下载:https://www.jenkins.io/zh/download/ Windows配置Java环境:  因为Jenkins是Java程序,所有在安装之前我们需要把java环境配置好。windows环境配置javajdk Jenkins安装程序包安装:1、双击安装包进行安装2、设置向导3、选择安装文件夹4、选择登录类型5、选择jenkins服务运行端口6、选择java主目录7、自定义设置  选择其他需要和Jenkins一起安装的服务,点击Next。 8、安装jenkins9、完成安装Jenkins初次访问密码设置:  点击完成安装后输入本地ip+设置端口(如:http://localhost:8099/),当你是

  • 用python的matplotlib画标

      先看实现的效果,有一个形象的认识。 这样一副图怎么画出来呢?用python将变得很简单,看代码吧!importmath importpylabaspl importnumpyasnp defgd(x,m,s): left=1/(math.sqrt(2*math.pi)*s) right=math.exp(-math.pow(x-m,2)/(2*math.pow(s,2))) returnleft*right defshowfigure(): x=np.arange(-4,5,0.1) y=[] foriinx: y.append(gd(i,0,1)) pl.plot(x,y) pl.xlim(-4.0,5.0) pl.ylim(-0.2,0.5) # ax=pl.gca() ax.spines['right'].set_color('none') ax.spines['top'].set_color('none') ax.xaxis.set_ticks_position('bottom

  • 【leetcode刷题】T141-把二叉搜索树转化成更大的树

    木又连续日更第97天(97/100)木又的第141篇leetcode解题报告二叉树类型第31篇解题报告leetcode第538题:把二叉搜索树转化成更大的树https://leetcode-cncom/problems/convert-bst-to-greater-tree/【题目】给定一个二叉搜索树(BinarySearchTree),把它转换成为累加树(GreaterTree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。例如: 输入:二叉搜索树: 5 /\ 213 输出:转换为累加树: 18 /\ 2013 复制【思路】本题可以考虑“右-根-左”的递归遍历方式,使用sum累加右子树的值:node->val+=sum,sum=node->val。【代码】python版本#Definitionforabinarytreenode. #classTreeNode(object): #def__init__(self,x): #self.val=x #self.left=None #self.right=None classSolution(object):

  • NASA宣布设计机器人众包竞赛的第一批获胜者

    编译:chux出品:ATYUN订阅号NASA(美国国家航空航天局)将设计机器人部分众包。今天,它宣布了哪些团队提交的方案可以采纳。机械工程专业学生NinoWunderlin,概念工程师MyrdalManzano和软件开发人员AmitBiswas将看到他们的附件和部署机制适合Astrobee,这是一款自由飞行的机器人,旨在取代自2006年以来在国际空间站上运行的三台麻省理工学院设计的机器人(ISS)。它是NASA对SPHERES研究的一部分,是“同步位置保持接合和重新定向实验卫星”的缩写。到2019年,这种立方体形状的Astrobee正式部署,它将配备摄像头,传感器,触摸屏和机械臂,以及激光系统,可在国际空间站狭窄的宿舍和走廊导航。Astrobee将执行设备监控,传感器测试,声级监控,空气质量分析和其他杂务等任务。NASA位于休斯顿约翰逊航天中心的任务控制中心将使用它自动执行任务。Astrobee的设计目标是在国际空间站的生命周期内保持活跃状态,计划于2024年“退休”。NASA于2016年启动了Freelancer.com计划,即NASA系统架构任务,它向公众开放,但申请人必须完成学术

  • Github 开源项目贡献指南:项目维护者的最佳实践

    原文【OpenSourceGuides——BestPracticesforMaintainers】作为一个项目的维护者意味着什么如果你维护者一个很多人都在用的项目,你可能就会意识到你写代码的时间变少了而回答issue的时间变多了。在项目开始之初,你会不断尝试着实现自己的新想法,在知道自己想要什么的基础上决定项目的走向。一旦你的项目开始流行之后,你会发现你的大部分时间都花在和用户以及贡献者打交道上。维护一个项目需要的不仅仅是写代码的能力。有些时候会有一个你意想不到的的事情要应付,但是这对一个项目的成长也很重要(相对于代码来说),我们收集了一些小技巧来让你的生活变得更轻松,从写文档到管理社区。记录项目的进展对于一个项目的维护者来说写文档是最重要的事情之一。文档不仅说清楚了你的想法是什么,而且还帮助别人在问问题之前理解你需要什么和接下在希望做什么。即使你不想长篇大论,对要点略说一二也比啥都不写要好。写下你的项目的发展方向从写下你的项目目标开始。把他们加到README,或者创建一个单独的VISION文件。如果还有什么其他的老古董能帮助人们了解这方面的信息,比如项目管理路线图,也把他们公开吧。有

  • [spring]spring注入属性值的两种方式以及作用域

    4.IOC创建对象的过程 使用无参构造创造 设定为有参后,就会报错! 对象在被注册进去的时候,就被实例化了,直接使用就好。 5.IO注入 (1)前面的构造器注入 (2)set注入 <?xmlversion="1.0"encoding="UTF-8"?> <beansxmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd"> <beanid="user"class="cn.itnanls.User"> <!--构造注入——参数类型注入--> <!--<constructor-argtype="java.lang.Int

  • Netty章节十一:Thrift多语言案例

    本案例使用Java与Python两种语言进行互相调用测试Thrift IDL文件(.thrift文件) #定义命名空间:namespace语言名路径 namespacejavathrift.generated namespacepypy.thrift.generated #定义类型别名 typedefi16short typedefi32int typedefi64long typedefboolboolean typedefstringString #定义一个消息/对象/结构体关键字struct structPerson{ 1:optionalStringusername, 2:optionalintage, 3:optionalbooleanmarried } /*说明: 唯一标记数:修饰符数据类型属性名 修饰符:默认就是optional required必须的,必须存在,必须赋值 optional可选的,可以不使用 */ #定义一个异常,数据传递时/方法调用是可能出现的异常关键字exception #服务端如果出现异常的话直接抛给客户端,让客户端catch处理 excep

  • 小程序tabbar和navigator一起使用点不动

    在项目开发中我遇到这样的一个问题,页面需要navigator链接跳转一个页面,tabbar也需要导航到这个页面,最开始还没有添加tabbar的时候,navigator都能够正常跳转,但是当加上tabbar的时候,tabbar能跳转,navigator就点击不动了。 一脸蒙逼的我开始以为是逻辑处理上出了问题,排查了半天也没发现哪儿有问题,控制台也不报错,心累。。。 后来又开始查navigator、tabbar的属性,怀疑是有什么属性问题,通过观察发现navigator有个open-type属性,值为switchTab,果不其然,将他加上,就没问题了 &Tip:项目中navigator、tabbar有指定导航到同一个页面的话,在navigator标签里加上open-type="switchTab",就能解决navigator点击不动的情况  

  • NSURL

    1.NSURL的简介   URL是对可以从互联网上得到的资源的位置和访问方法的一种简介的表示,是互联网上标准资源的地址。URL可能包含远程服务器上的资源位置,本地磁盘上的文件的路径,甚至任意一段编码的数据。NSURL是为了方便我们操作。 2.NSURL的用途 (1)对于代表本地文件的url,您也可以直接操作这些文件的属性。例如,修改文件的最后修改日期。 (2)可以使用url进行网络通信。例如,您可以使用NSURLSessionNSURLConnection,和NSURLDownload类来访问远程资源的内容。 (3)可以使用url读写本地文件。例如,你可以通过一个本地文件的URL,调用stringWithContentsOfURL方法,得到NSString格式的文件内容。 (4)可以使用url进行通讯。例如:可以用openURL:方法来拨打电话。 3.举例 (1)URL的初始化    NSURL*url=[NSURLURLWithString:@"http://www.baidu.com/search?id=1"]; (2)UTF8编码  &nb

  • C++的Enum hack

    从一个例子开始吧 classGame{ private: staticconstintGameTurn=10; intscores[GameTurn]; }; 复制 对于支持类内初始化的C++编译器,这段代码可以编译通过。 但是较老的C++编译器,可能不支持类内初始化,这样我们的静态常量,必须要在类外初始化。如下: classGame{ private: staticconstintGameTurn; intscores[GameTurn]; }; constintGame::GameTurn=10; 复制 如果没有intscores[GameTurn];,这段代码就可以用不支持类内初始化的编译器通过了。 但因为intscores[GameTurn];用到了GameTurn,而GameTurn的值不能确定。所以会报如下错误。 enum_hack.cpp:5:error:arrayboundisnotanintegerconstant 复制 这种情况下,如果我们仍然不想用硬编码的数字指定数组的大小,就可以考虑这篇文章的主角:enumhack了。 使用enumhack的技巧,其思想就是把

  • 开工大吉

    本博客开通于2020年6月,工作三年多了,零零散散记过一些东西,过段时间就落灰了,此博客专门用于记录自己学习的东西,希望能够持之以恒,好记性不如烂笔头,温故而知新,相信不久的将来,我也可以会成为一个大神的,加油! 一篇好的博客首先有好看的排版,本篇文章是该博客的第一篇文章。搜博博客园的时候会发现,有的博主写的文章非常清晰,有的博主写的文章看起来就乱糟糟的,以下是改造自己博客园的过程。后续还要继续优化。 1.查看别人的样式 看了很多博客,有一个博主的排版我非常喜欢,网上一通搜索加实践,终于明白个八九。 首先找到你喜欢的页面F12查看源码,选择isource 2.将CSS以及皮肤配置到自己的博客园

  • leetcode.1027 Longest Arithmetic Sequence 最长等差数列

    给定一个整数数组 A,返回 A 中最长等差子序列的长度。 回想一下,A 的子序列是列表 A[i_1],A[i_2],...,A[i_k] 其中 0<=i_1<i_2<...<i_k<=A.length-1。并且如果 B[i+1]-B[i]( 0<=i<B.length-1)的值都相同,那么序列 B 是等差的。 提示: 2<=A.length<=2000 0<=A[i]<=10000   用Go语言写点算法题,熟悉一下这门语言吧~ 这道题最好的写法应该是动态规划,而且对使用空间什么的有比较好的优化。 我在这就不讲这些了,能使用Go顺利写出就可以了。 【思路】对每个遍历经过的数字都建立一个diff:len的map,相当于动态规划,但由于用到了map(Go语言里map都是指hashmap),运算时间一般般。时间复杂度还是O(n^2),比暴力求解还是好上不少的。 代码: funclongestArithS

  • Numpy入门 - 数组基本运算

    本节主要讲解numpy数组的基本运算,包括两数组相加、相减、相乘和相除。   一、两数组相加add importnumpyasnp arr1=np.array([[1,2,3],[4,5,6]]) arr2=np.array([[1,2,1],[2,1,2]]) result=np.add(arr1,arr2) print(result)复制 [[244] [668]]复制 二、两数组相减subtract importnumpyasnp arr1=np.array([[1,2,3],[4,5,6]]) arr2=np.array([[1,2,1],[2,1,2]]) result=np.subtract(arr1,arr2) print(result)复制 [[002] [244]]复制 三、两数组相乘multiply importnumpyasnp arr1=np.array([[1,2,3],[4,5,6]]) arr2=np.array([[1,2,1],[2,1,2]]) result=np.multiply(arr1,arr2) print(result)

  • 办公白领必须掌握的28个技巧

    前言 一个人的时间和精力是有限的,如何能够在最短时间内掌握一些办公必备技巧呢? 所以,小编和各位读者分享的是: 办公室人员必备技巧 Excel办公必备技巧

  • Python全栈之路系列之线程与进程

    WhatisaThread? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位,一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。 在同一个进程内的线程的数据是可以进行互相访问的。 线程的切换使用过上下文来实现的,比如有一本书,有a和b这两个人(两个线程)看,a看完之后记录当前看到那一页哪一行,然后交给b看,b看完之后记录当前看到了那一页哪一行,此时a又要看了,那么a就通过上次记录的值(上下文)直接找到上次看到了哪里,然后继续往下看。 WhatisaProcess? 一个进程至少要包含一个线程,每个进程在启动的时候就会自动的启动一个线程,进程里面的第一个线程就是主线程,每次在进程内创建的子线程都是由主线程进程创建和销毁,子线程也可以由主线程创建出来的线程创建和销毁线程。 进程是对各种资源管理的集合,比如要调用内存、CPU、网卡、声卡等,进程要操作上述的硬件之前都必须要创建一个线程,进程里面可以包含多个线程,QQ就是一个进程。 继续拿QQ来说,比如我现在打卡了QQ的聊天窗口、个人信息窗口、设置窗口等,那么

  • MySQL中的全文索引

      之前曾经发表了一篇关于SQL Server全文索引的文章。现在将MySQL全文索引的配置过程记录一下。 Step1:创建Student表    CREATE TABLE `student` (   `id` INT(11) NOT NULL AUTO_INCREMENT,   `studentname` VARCHAR(16) NOT NULL,   `address` VARCHAR(256) DEFAULT '北京',   `gender` TINYINT(4) NOT NULL,   `mymoney` DECIMAL(18,2) DEFAULT NULL,   PRIMARY KEY (`i

相关推荐

推荐阅读