以微信和 QQ 为例,说说怎样抓取 APP 内数据

2016/9/15 posted in  数据

许多产品都在转战移动互联网平台,甚至其中一些产品没有 Web 版只有移动客户端,那么怎样获取 APP 中的数据呢?

需要清楚的是,并不是所有的 APP 的数据都能获取,这取决于 APP 与服务端的数据传输是否加密。这一点上,美国的应用在安全性上通常做得比较好,大多采用加密传输,而国内很多初创公司的产品,或者在技术上或者在资金上都不太重视,所以很多数据都可以获得。

概念

  • 透明与加密

    不太严谨地说,使用 HTTP 协议传输的内容是可以被监听的,可以清楚地看到请求的返回内容。
    而 HTTPS 则是加密的,虽然可以监听到,但难以破解,故无法知道传输内容。

  • 抓包

    Sniffer, Packet analyzer

  • DOM

    Document Object Model

  • HTTP

    Hypertext Transfer Protocol

    HTTP Debuging Proxy, Request/Response

工具

  • Chrome 开发者工具
  • cURL
  • Postman
  • Charles/TcpDump/WireShark/Fidder
  • Surge/Replica
软件 平台 功能 特色
Chrome 开发者工具 PC 版 Chrome 监听 监听当前页面的网络请求与返回
Chrome 流量工具 PC 版 Chrome 监听 监听 Chrome 全局的网络请求
Charles PC 监听 简明易懂的抓包工具,可设置代理监听移动端
Surge iOS + Mac 监听 代理 + 抓包
Replica iOS 监听 Surge 作者出品,据说更专业
cURL 命令行 请求 在命令行发起网络请求,自由灵活,支持很多参数
Postman PC 请求 可视化发起网络请求,诸多人肉增效

怎样快速发起网络请求?

  • GET 请求,直接在浏览器里打开即可
  • 其他请求,使用 Postman 或 cURL
  • 有一些软件(如 Chorme 等)支持重复请求(Replay)

案例一:查看和重复微信文章统计数据请求

通过这个案例,熟悉使用 Chrome 开发者工具查看网络请求与返回内容的基本方法,了解 JSON 数据格式,练习使用 cURL 和 Postman 发起网络请求。

步骤:

  1. 安装简直数据肋手
  2. 阅读使用文档后,在要求的客户端中点击微信文章链接,打开页面
  3. 在 Chrome 开发者工具中查看网络请求
  4. 分析 getappmsgext 和 appmsg_comment 的返回结果
  5. 尝试 Replay
  6. 复制 cURL 请求命令,在命令行中发起请求
  7. 在 Postman 中发起请求

案例二:微信文章变量分析

以下是简直数据助手的一部分核心代码,演示了请求阅读点赞数接口的使用方法。

  // 以 ext 方式获取阅读点赞数                                                     
  var appmsgextUrl = 'https://mp.weixin.qq.com/mp/getappmsgext?__biz=' + a.biz + '&appmsg_type=' + a.appmsg_type + '&mid=' + a.mid + '&sn=' + a.sn + '&idx=' + a.idx + '&scene=' + a.scene + '&title=' + encodeURIComponent(a.title) + '&ct=' + a.ct + '&devicetype=' + a.devicetype + '&version=&f=json&r=0.41129520173508016&is_need_ad=1&comment_id=' + a.comment_id + '&is_need_reward=1&both_ad=1&reward_uin_count=54&uin=' + a.uin + '&key=' + a.key + '&pass_ticket=' + a.pass_ticket + '&wxtoken=' + a.wxtoken + '&devicetype=' + a.devicetype +       '&clientversion=11020201&x5=1'; 
                                                                                   
  var exthr = createXmlHttpRequest();                                              
  exthr.open('POST', appmsgextUrl, false);                                         
  exthr.setRequestHeader('Content-Type', 'application/json');                      
  var param = 'is_only_read=1';                                                    
  exthr.send(param);                                                               
                                                                                   
  var ext = JSON.parse(exthr.response);                                            
                                                                                   
  a.appmsg_ext = ext;
  

微信文章相关的变量,可以打开任一篇微信文章,查看源码。

案例三:爬 QQ 号信息

通过这个案例,熟悉发现和爬取数据的基本方法,并了解将其程序化的基本思路。

我们发现有一个页面,可以查看 QQ 号对应的个人信息。

http://ti.qq.com/qcard/index.html?sid=AcV5FHA5WQN7czGam8HWHeII&qq=22294&appid=537045799&version=iphone-6.3.0.440&type=1

使用 Chrome 开发者工具查看网络请求,发现有一个接口可以查询 QQ 号的信息:

右键 more_profile_card,点击 Replay,可以重复请求。

右键 more_profile_card,点击 copy as cURL,可以到终端里执行。

然后,我们把它程序化:

#!/bin/sh
for i in {10000..10010}
do 
  echo "QQ:"$i;
  curl "http://ti.qq.com/cgi-bin/more_profile_card/more_profile_card" -H "Pragma: no-cache" -H "Cookie: pvid=6468515432; _ga=GA1.2.1415664572.1453970790; ssuid=5381432944; _gscu_661903259=57075059n4szku18; __v3_c_review_11558=0; __v3_c_last_11558=1461080483833; __v3_c_visitor=1460012604265105; uid=144512100; sd_userid=33861463623562904; sd_cookie_crttime=1463623562904; luin=o0364701349; lskey=00010000b9667beb99907d1fd667658c983286fd4eb44260f7571f5c19526529d0220c42ef609921ab696a7d; verifysession=h02sOmD5hhaRfNHRFodTDO0XF5dIpRP8cVttaYqrJ2At8m5op-iF4Evhpz40aU8QO4MzuugdL7AOPLsDEB3ElgP4gAUHamtKFu0; FTN5K=5f4db08b; ptui_loginuin=icewent@gmail.com; ptcz=fd444fcc896b8eedfdbc6ae892dba1ff32affc8e8b0c2e44787a10b317e61d0e; qm_username=364701349; qm_sid=654d042436406a54074fe297c11ee670,qcGlEZzlMZEJPUjc3dDIycDd4ZWM3eGNBbEFNLThzTml1YThSS0oqWVdkOF8.; pgv_info=ssid=s6883196480; pgv_pvid=7242657295; o_cookie=364701349; ptisp=cnc; RK=hFHTzgfDZg; ptwebqq=a70145fde22c29382f1641a1444a44ae0e74f7b0b4bc88a804e7f28ea02c7c57; pt2gguin=o0364701349; uin=o0364701349; skey=@tQgafwdBK" -H "Origin: http://ti.qq.com" -H "Accept-Encoding: gzip, deflate" -H "Accept-Language: en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4" -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36" -H "Content-Type: application/x-www-form-urlencoded" -H "Accept: */*" -H "Cache-Control: no-cache" -H "Referer: http://ti.qq.com/qcard/index.html?sid=AcV5FHA5WQN7czGam8HWHeII&qq=${i}&appid=537045799&version=iphone-6.3.0.440&type=1" -H "Proxy-Connection: keep-alive" --data "_q=${i}&bkn=603276416&src=mobile" --compressed | json_reformat
done
  1. 复制以上代码(需要更改为最新 Header),保存为 qq.sh
  2. 执行 chmod +x qq.sh
  3. 执行 ./down.sh
  4. 查看输出
QQ:22294
{
    "ec": 0,
    "profile": [
        {
            "age": 0,
            "birthday": {
                "day": 0,
                "month": 0,
                "year": 0
            },
            "college": "海南师范大学",
            "company": "",
            "constellation": 0,
            "email": "",
            "gender": 255,
            "hometown_area": "",
            "hometown_city": "阿德拉尔",
            "hometown_country": "阿尔及利亚",
            "hometown_state": "",
            "location_area": "",
            "location_city": "",
            "location_country": "",
            "location_state": "",
            "nick": "22294",
            "occupation": 5,
            "personal": ""
        }
    ]
}

题外:试试 100001 到 100010,这些可都是腾讯权贵的 QQ 号。

获取更多数据及服务咨询,请关注微信公众号 toobigdata