V2EX 首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Sponsored by
二向箔安全
​一对一的线上 web 安全培训服务
咨询微信:twosecurityrefer
Promoted by 二向箔安全
V2EX  ›  Python

关于 github 上一个链家爬虫代码的困惑

  •  
  •   eternal403 · 28 天前 · 1253 次点击

    想抓取链家的 app 数据,在 github 上找到一个看上去不错的项目: https://github.com/CaoZ/Fast-LianJia-Crawler,

    但是我对代码有两处有点疑惑,没看懂是怎么来的。

    1. 首先是 app/config.py 下面的这段代码
    self.lian_jia = {
                'ua': 'HomeLink7.7.6; Android 7.0',
                'app_id': '20161001_android',
                'app_secret': '7df91ff794c67caee14c3dacd5549b35'
            }
    

    作者是怎么知道 app_id 和 app_secret 的,我通过 Charles 抓包工具,看到 header 头信息有一大堆东西,没看到 app_id 和 app_secret 不知道作者是怎么试出来的。

    1. app/util/init.py

    get_token 这个方法,为什么作者知道 token 是这么产生的。

    def get_token(params):
        data = list(params.items())
        data.sort()
    
        token = config.lian_jia['app_secret']
    
        for entry in data:
            token += '{}={}'.format(*entry)
    
        token = hashlib.sha1(token.encode()).hexdigest()
        token = '{}:{}'.format(config.lian_jia['app_id'], token)
        token = base64.b64encode(token.encode()).decode()
    
        return token
    

    如果有哪位同学可以试试用 charles 抓取链家的包,查看 header 等相关信息。看看能不能找出相关规律。

    7 回复  |  直到 2017-11-22 18:29:42 +08:00
        1
    Kirscheis   28 天前
    反编译 apk 可以得到一些信息,其它信息一般是抓包之后猜测算法得到的。。
        2
    0987363   27 天前 via iPhone
    反编译 app 出来的吧 以前弄过斗鱼的 然后斗鱼写进 so 了。。
        3
    eternal403   27 天前
    @0987363 @Kirscheis 不知是不是我姿势不对,反编译了下链接的 apk,仍然没有找到代码,不知道是不是要处理混淆。不知道两位方不方便试试,谢谢。
        4
    forestyuan   27 天前
    兴许那段代码是 LJ 内部人士写的呢
        5
    eternal403   26 天前
    @forestyuan 我也考虑过,哈哈
        6
    caoz   24 天前   ♥ 2
    作者登场~

    我当时确实反编译了链家的安卓端 App,但是反编译了也没找到这些值到底在哪儿(毕竟不是专业 Java ...)😓 于是放狗一搜找到了一个项目: https://github.com/laopeng1990/realestate, 在 https://github.com/laopeng1990/realestate/blob/master/src/main/java/com/wpf/realestate/util/AuthUtils.java 找到了加密方式...

    不过后来知道了,这些值和加密部分是分别放到了 "libHomeLinkNdk.so" 和 "liblianjiajni.so" 中了,用 IDA Pro 打开处理下就可以看到了,比如 app_id 藏在这:

        7
    RuoYun   23 天前
    厉害了
    DigitalOcean
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   535 人在线   最高记录 3541   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.0 · 56ms · UTC 19:57 · PVG 03:57 · LAX 11:57 · JFK 14:57
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1