其实所谓抓取APP数据和抓取网页数据是存在肯定的不同,抓取网页数据能够采纳模仿拜访网站而后抓取网页接管内容的模式进行数据抓取。而APP则更偏向于通过截获数据传输包的模式进行(Wireshark和Fiddler+Python)。
一般来说,咱们用WireShark+Fiddler来获取大部分数据是没有多大问题的。但这里有个问题是,如果你碰到的是用SSL/TLS等加密伎俩加密过的网络数据的时候,往往咱们只能大刀阔斧。在过来的话,如果咱们领有的该传输会话的私钥的话咱们还是能够将它提供给WireShark来让其对这些加密数据包进行解密的,但这曾经是想当年还用RSA进行网络数据加密的年代的事件了。当今大家都曾经逐步拥抱前向加密技术PFS的时代了,所以该办法就不再实用了。因为前向加密技术的目标就是让每个数据交互都应用的是不同的私钥,所以你像以前RSA时代一样想只用一个私钥就能把整个session会话的网络数据包都破解进去的话是不可能的了(其实能够也通过相似浏览器的Session Key性能解决)。
1.App数据抓取剖析
但凡能够看到的APP数据都能够抓取。
剖析钻研过不下300个APP抓包。
50%的app,通过抓包软件就能够剖析出抓取参数并抓取到信息。
30%的app,可能须要适当的反编译,剖析出加密算法并抓取到信息。
10%的app,可能加固,须要脱壳,而后反编译,剖析出加密算法并抓取到信息。
10%的app,通过各式各样的签名,证书,设施绑定等办法,暗藏加密算法。
总的来说,没有不能抓取的app,只是工夫老本的问题。
2.爬取思路
1.抓包
2. HOOK
2.1.抓包
有代码教训或APP开发的同学都很容易了解,其实很多APP,走的都是webservice通信协定的形式,并且因为是公开数据,而且大部分是无加密的。所以只有对网络端口进行监测,对APP进行模仿操作,即可晓得APP外面的数据是如何获取的。
咱们只须要写代码模仿其申请,无论POST还是GET,即可失去该申请所返回的信息。再通过对返回的信息结构化解析,即可失去咱们想要的数据。
public static void main(String[] args) {
Spider.create(new GithubRepoPageProcessor())
//从https://github.com/****开始抓
.addUrl("https://github.com/****")
//设置Scheduler,应用Redis来治理URL队列
.setScheduler(new RedisScheduler("localhost"))
//设置Pipeline,将后果以json形式保留到文件
.addPipeline(new JsonFilePipeline("D:\\data\\webmagic"))
//开启5个线程同时执行
.thread(5)
//启动爬虫
.run();
}
2.2.HOOK技术
HOOK技术是一种走操作系统内核的技术,因为安卓零碎是开源的,所以能够借助一些框架批改内核,从而实现你要的性能。HOOK的模式,咱们走的是Xposed框架。Xposed是一款能够在不批改任何其余开发者开发的利用(包含零碎服务)的状况下,扭转程序运行的一个开源框架服务。基于它能够制作出许多功能强大的模块,以此来达到应用程序依照你的志愿运行的目标。
如果把安卓手机看做一座城堡,那Xposed能够让你领有一个上帝视角,城里的运作细节尽收你眼底,还能让你插一手扭转城堡的运作法则。
什么意思呢?简略的说就是你能够通过他,自动化的管制你的APP。如果将咱们的APP开在模拟器上,咱们能够通过编码,通过他通知APP这一步干什么,下一步干什么。你把它了解成相似按健精灵或游戏打怪外挂就能够了。
而他每走一步,APP与服务端交互的数据,均可获取下来。这种形式宽泛用于一些成熟的APP。比方某信采集。
public class HookActivity implements IXposedHookLoadPackage {
@Override
public void handleLoadPackage(LoadPackageParam lpparam) throws Throwable {
final String packageName = lpparam.packageName;
XposedBridge.log("--------------------: " + packageName);
try {
XposedBridge.hookAllMethods
(Activity.class, "onCreate", new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param)
throws Throwable {
XposedBridge.log("=== Activity onCreate: " + param.thisObject);
}
});
} catch (Throwable error) {
XposedBridge.log("xxxxxxxxxxxx: " + error);
}
}
}
3.须要爬的坑
坑一:签名算法
以某信的文章列表页及某信息页为例,对其http拜访进行抓包,会发现其url的一个外围参数是咱们无奈晓得如何生成的,这就导致,咱们不可能间接用该url进行信息爬取;签名算法如果无奈破解,HTTP这条路就是绝路了。
坑二:http爬取回来的信息和页面显示不统一
以某信的某信息页为例,比照间接拜访某信页面及http爬取的信息,可显著发现http爬取到的信息较少。造成得两种形式都用,能力既关照速度又关照完整性。
坑三:模拟器中的坑
APP自动识别你的运行环境进行屏蔽,最厉害的还是某信,连你是用模拟器关上还是真机关上,是什么内核的,全副进行限度。已经见过牛人,找某手机厂商专门定做真机来配合。
坑四:帐号的坑
这个坑就有点大了,要找号、养号,都不是件容易的事件,更惨的是封号,真真让你一夜回到解放前。
4.难度评估
1.一星
此类app没有进行非凡的防护,能够间接在网页拜访app中申请的url
艰难点:无
2.二星
此类app应用的cookie和session等技术,对数据的申请须要cookie等信息
艰难点:
1、申请头须要附带cookie值
3.三星
此类app在发动申请时,在headers中增加md5验证字段,该字段对申请的url的参数进行非凡的解决而后进行hash;如果想爬这类app,须要对app进行反向编译,通过大量的代码浏览,剖析该app的hash算法和参数拼接;
艰难点:
1、反编译
2、Android代码的浏览能力
3、破费大量工夫和精力也不肯定能找到,这是最蛋疼的。。。。
4.四星
此类app对申请发动url申请,后盾收到申请后在返回的数据中,针对无效数据进行加密,所以在用抓包工具进行剖析时,无奈看到具体的数据;如果想爬取这类app,只能先去反编译,而后剖析出如何对申请数据加密的算法,只有实现了算法的破解能力进行数据的剖析。
艰难点:
1、无奈通过抓包工具对所需数据进行剖析
2、反编译
3、Android代码的浏览能力,寻找加密数据的算法
3、破费大量工夫和精力也不肯定能找到,这是最蛋疼的。。。。
5.工具
1. 抓包工具
mac零碎 Wireshark
Mac零碎 charles
windows Fiddler
2.反编译
Apktool,dex2jar,jd-gui-windows
Jadx-gui
能间接反编译dex文件,不便好用
JD-GUI
须要将dex文件转到jar文件,能够跳转函数
JEB
用的较少
3.hook 工具
Xposed
Frida
TiToData:业余的短视频、直播数据接口服务平台,网址: TiToData
笼罩支流平台:抖音,快手,小红书,TikTok,YouTube
发表回复