天天看点

针对安卓app的爬虫路程

本人接触app这块的爬取,在此记录一点所得,给初入app爬虫这块的一点指引吧(19.10.25修改)

1. 抓包,

  •  针对app抓包,网上文章有很多很多,我是使用fiddler挂代理抓包的,具体操作问度娘,能直接抓包就能搞定的app一般都是很小的项目,也不进行加密
  • 有些app是抓不到包的,原因大概有这么几个
    • app固定了自己的代理ip,所以你的请求他抓不到包,  --  hook
    • okhttp框架设置了NO_PROXY  --  hook
    • 自定义或设置了SSLSocketFactory相关   --  hook
    • 自己重写了http协议,使用inputStream流来处理  --  这种可以hook打印参数,抓包是不可能
    • hook 这块使用xposed或者frida 我一直都在用,很方便,帖子也很多

*** 拼多多app也是自己实现的okhttp3协议,其他的包都能拿到,但是从搜索-分类-拿商品列表时的包却没有,源码也只是能hook出参数,愣是不明白为啥不能抓包.白死不得七姐.有那个大佬知道指教下***

2.加密,

  • 很多时候抓包是可以抓,但是都有加密比较常见的是sign放在header里面进行校验,这种需分两种:1.加密是在Java层,2.加密在so层实现
  • 加密在java层的都好弄,反编译后很好还原出来
  • 加密在so层实现的就比较麻烦点,使用ida这个工具(静态分析/动态调试),如果加密算法简单-MD5的话很容易就还原回来,若算法是aes/des这种,一般都是变种,不是原方法,用Java还原难度比较大,可以考虑写安卓爬虫
  • 这里的难点在于加密是在so方法实现的这种比较花时间去分析

3. so加密

  •  so加密一般分这几种
  • 简单的加密算法(没有防护), 可以直接用ida静态分析so的伪C代码
  • 若需要参数可以使用ida动态调试,网上帖子很多,但很坑,
  • 调试so最好使用 : 安卓4.4及以下的真机+自己写个demo app加载目标so来调试,我曾经在安卓7.0的手机上浪费了一周的时间,高版本的安卓限制太多
  • so的变种加密(aes/des) 有的可以使用java实现后一致,有的是结果不一致,只能用C语言实现(无语中....)
  • 若找不到so中对应的方法,so就使用的动态注册...(目前我正在学到这里...)