在外围获取APP的重要信息

网络抓包,这类的术语,大家应该听过不少了。

不管怎么表达,本质都是分析网络交互时的数据包,以取得想要的信息。

我们有可能会遇到这样的场景:“对方这个App是怎么实现的?它发送的网络请求有没有带上时间限制?”、“获取这个资源的网络地址是什么,要不要带token?我能够模拟发送吗?” ...

在研究某个应用程序时,分析网络数据包,往往就是第一个手段。

本文解决一个问题:通过抓包分析出重要信息。

小白:何为抓包?

小程:就是截获网络上收发的数据包。

小白:网络上那么多数据包,怎么知道哪些是有用的?

小程:只截获目标app的数据包就缩小了范围,但即便是缩小了范围,也需要进一步分析与排查。

小白:在垃圾堆里找坏人的行动时间与地点吗?这是使徒行者2的桥段啊,你有没有看过?

小程:我在说抓包!不是垃圾堆!不是使徒行者!

小白:你抓,你抓,不要抓急嘛……

抓包的工具有很多,适合在不同的平台上使用。

这里只介绍charles的使用。

小白:都有什么样的抓包工具呢?

小程:比如wireshark、tcpdump、tcpflow、charles、fiddler、sniffer等等。

小白:为什么只介绍charles,难道其它的不好用吗?

小白:不是其它的不好用,是我一次只讲一个东西!

小白:你......

Charles,是mac上截取网络数据包的工具。

官网:<http://www.charlesproxy.com&gt;。

(1)破解charles

用破解的charles.jar,覆盖到程序包内Contents/Java目录即可(比如4.0.1版本)。

(2)使用charles

charles运行后,就可以看到截获到的数据包。

charles的视图分“按结构”跟“按顺序(时间先后)”,按顺序时可以筛选。

两个视图都可以选择特定的url,再选择focus,这样就重点观察这个url的相关请求与响应,不会跳来跳去。

mac上,抓https包,需要安装ssl证书:

help->ssl proxying ->install charles root cer..,
同时要在keychain中信息这个证书(简介->信任->ssl设置为始终信任)。

对于https包,确定url后,要右击选择enable ssl proxying,才可以做到解密https包

可以右键选择breakpoints,这时会监控这个url的相关行为并下断点(可以修改发送请求等),在发送请求时、收到回复时、正在接收response body时,都会触发断点。触发断点后,可以执行“取消(即让其继续执行)”、“中止”、“执行”等操作,比如可以修改请求的值后再执行“execute”。

(3)演示:获取appstore的app的历史版本

iphone上使用的一些app,新版本还不如旧版本好使。

虽然appstore会把很旧的版本的下载链接给隐藏掉,但存货还是在的。

如何通过itunus拿到某个app的所有历史版本的信息,并下载到历史版本呢?

操作如下:

打开charles,再打开itunes并搜索到目标app,再下载这个app,会观察到
https://p23-buy.itunes.apple.com 是目标url,focus这个url。

对这个url选择enable ssl proxying,退出charles。

启动charles,删除掉itunes上已下载的目标aap,刷新并重新下载。

这时,在目标url下面的buyProduct页面的contents的response部分,
会显示一个array,是一堆id串,
这个就是不同版本的下载id(用xml text来查看,可拷贝)。

再次删除已下载的app,并对目标url加上breakpoints,再次下载app。

在发送request时会触发断点,选择edit request页面并选择
xml text查看模式,把下载id替换成目标下载id,
之后不断点击execute或取消掉断点再执行。

这时,itunes会下载到目标版本的app,之后可以找到对应的ipa,并同步到手机。

以“微信”为例,大概的步骤是这样的:

(a)下载微信时,在charles上focus目标url,并激活ssl:

(b)删除已下载的微信,启动charles后,重新下载微信,留意目标url下面的内容:

(c)删除已下载的微信,对目标url加上breakpoints,再次下载,修改请求,再execute:


(d)下载到最旧版本的微信:

(4)演示:抓取qq音乐歌手详情的信息

操作如下:

charles,proxy->proxy setting,port使用8888,
勾选enalbe transperent http proxying,开启代理。

help->local ip address,查看charles代理的ip地址。

手机,如iphone,wifi信息->http代理,填写服务器(charles的代理ip)
与端口(8888)。

手机会连接上charles,允许它连接。

对于https协议,手机上需求安装ssl的证书:
在safari上输入http://charlesproxy.com/getssl,跳转安装证书。

锁定目标url,即可拿到数据。
比如,对于iphone上的qq音乐的歌手详情,目标url是
https://u.y.qq.com,focus它,
右键打开ssl proxy,就可以拿到详情信息。

大概的演示是这样的:

(a)charles开启代理:

(b)手机连上代理后,对https://u.y.qq.com特别处理,可以看到歌手信息:

(5)演示:获取“抖音短视频”的歌曲下载链接

小白:我知道!这个抖音短视频很好玩的,所有歌曲都只是副歌部分。它的下载链接是可以用的吗?歌曲是否加密了?

小程:可以用,歌曲至少现在是没有加密的。

抖音,大概有50几万首歌曲。

可以通过搜索接口或者分类歌曲接口,来取得歌曲列表信息。歌曲列表信息是json格式的内容,其中包括这样的信息:

"play_url": {
    "url_list": [
        "http://p3.pstatp.com/obj/29c90000eb8b5ca6fff2"
    ],
    "uri": "29c90000eb8b5ca6fff2"
}, 

url_list就是歌曲下载链接。除了这个,还可以找到歌手名、歌曲名等。

小白:为什么不详细说说请求链接是什么呀?

小程:因为演示只是为了学习,不应该涉及太多商业的内容。

小白:我去!



在外围获取APP的重要信息

原文地址:http://blog.51cto.com/13136504/2061697

时间: 2024-08-03 00:27:52

在外围获取APP的重要信息的相关文章

iOS获取app图标和启动图片名字(AppIcon and LaunchImage&#39;s name)

在某种场景下,可能我们需要获取app的图标名称和启动图片的名称.比如说app在前台时,收到了远程通知但是通知栏是不会有通知提醒的,这时我想做个模拟通知提示,需要用到icon名称:再比如在加载某个控制器时,想设置该控制器的背景图片为启动图片,需要用到启动图片名称. 而事实上icon图片放在系统AppIcon文件夹里,启动图片放在系统LaunchImage文件夹里,取这些图片的名称和其他一般资源图片名称不一样. 为了方便举例子,咱们先简单粗暴点 假设当前项目只支持iPhone设备,并且只支持竖屏:而

MonkeyRunner 之如何获取APP的Package Name和Activity Name

MonkeyRunner 之如何获取APP的Package Name和Activity Name   最近尝试学习使用monkeyrunner进行Android自动化测试,一开始均是使用点击屏幕坐标的方法来运行应用程序,可是点击屏幕坐标的方法比较麻烦,且通用性差.通过度娘我知道可以使用device.startActivity("package name /activity")这个函数来直接启用安装在手机中的app,可是如何获得activity却成了关键,现将获取activity的方法总

获取App应用信息

??安卓开发一般都需要进行apk的更新管理,常用操作老司机已为你封装完毕,经常有小伙伴问怎么进行管理,那我告诉你,你可以用这份工具进行管理,具体可以查看源码,现在为你开车,Demo传送门. 站点 获取App应用版本信息 → AppApplicationMgr getAppName : 获取本地apk的名称 getVersionName : 获取本地Apk版本名称 getVersionCode : 获取本地Apk版本号 getMetaData : 根据key获取xml中Meta的值 getAppI

[转]获取app的内部储存路径

首先内部存储路径为/data/data/youPackageName/,下面讲解的各路径都是基于你自己的应用的内部存储路径下.所有内部存储中保存的文件在用户卸载应用的时候会被删除. 一. files1. Context.getFilesDir(),该方法返回/data/data/youPackageName/files的File对象.2. Context.openFileInput()与Context.openFileOutput(),只能读取和写入files下的文件,返回的是FileInput

2、获取APP CPU占用率

前面已经介绍过如何获取包名和主活动名.这里不再过多赘述.我们依旧采取两种方案实现APP CPU占有率 Windows下获取APP CPU占用率 adb shell "dumpsys cpuinfo | grep com.begoit.studyplan" python脚本实现APP 冷/热启动时间 #/usr/bin/python #encoding:utf-8 import csv import os import time #控制类 class Controller(object)

使用Fidder从安卓模拟器获取APP打开网址

大家都知道H5游戏其实是网页,但是有些APP或者微端不显示网址链接.这里给大家介绍介绍一种,利用Fiddler进行抓包,获取APP打开的网址的方法.有人说何必多此一举呢,直接用模拟器玩游戏就好了.的确,直接用没毛病.但是如果获取到网址了,我们无论是Mac,Ipad还是手机,只要浏览器就能打开玩,而且节省资源. 废话不多说,这里演示的是Fiddler+网易MuMu模拟器,当然真实安卓手机也是一样的.Fiddler只是提供一个代理,需要将手机的代理指向 PC 机,不能互相访问是不行的.只是简单地教你

Appium+Python自动化 -获取 app 包名和 activity

方法一: ①手机通过USB连接电脑 ②打开手机上被测app ③在电脑上 dos命令窗口,输入命令 adb shell dumpsys window w | findstr \/ | findstr name= 或 adb shell dumpsys window |findstr mCurrent 或 adb shell "dumpsys window w|grep \/|grep name=|sed 's/mSurface=Surface(name=//g'|sed 's/)//g'|sed

ios 获取app版本号

let infoDictionary = Bundle.main.infoDictionary!let appversion = infoDictionary["CFBundleShortVersionString"] as! String   //获取app的版本号 let deviceId = UIDevice.current.identifierForVendor?.description ?? ""   //可以作为标识设备的唯一编号 原文地址:https:

使用adb 命令获取APP包名

最近开始使用adb了,感觉以前记得的命令又是从0开始了,所以由基础的开始总结起,好好让自己回顾一下. 方法一.获取APP包名 1.先连接上手机,使用命令    adb shell am monitor 2.打开想要获取包名的APP即可,以微信为例,如下就是我们想要的包名 方法二.获取APP包名 1.启动手机的app 2.使用adb shell dumpsys window | findstr mCurrentFocus  命令,可以查看当前启动中的应用信息 原文地址:https://www.cn