美團開源抓包神器Lyrebird


地址: Lyrebird Github

 

本人是 ubuntu18.04 桌面版,其它 windows 或 mac 系統部署類似,只要有 python3 環境均可使用。
以下為利用 python virtualenv 部署 python3 和 Lyrebird

# 利用virtualenv 創建名為 Lyrebird的python3.6.5 虛擬環境
cmd@TR:~$ pyenv virtualenv 3.6.5 Lyrebird
Requirement already satisfied: setuptools in /home/cmd/.pyenv/versions/3.6.5/envs/Lyrebird/lib/python3.6/site-packages
Requirement already satisfied: pip in /home/cmd/.pyenv/versions/3.6.5/envs/Lyrebird/lib/python3.6/site-packages

# 激活使用Lyrebird虛擬python3環境
cmd@TR:~$ pyenv activate Lyrebird
pyenv-virtualenv: prompt changing will be removed from future release. configure `export PYENV_VIRTUALENV_DISABLE_PROMPT=1' to simulate the behavior

# 檢查初始虛擬環境帶的py包
(Lyrebird) cmd@TR:~$ pip list
DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
pip (9.0.3)
setuptools (39.0.1)

# 升級下過老的py包
(Lyrebird) cmd@TR:~$ pip install --upgrade pip
(Lyrebird) cmd@TR:~$ pip install --upgrade setuptools

(Lyrebird) cmd@TR:~$ pip list
Package    Version
---------- -------
pip        10.0.1
setuptools 40.0.0

# 安裝lyrebird
(Lyrebird) cmd@TR:~$ pip install lyrebird

# 看下lyrebird 依賴安裝了其他哪些py包
(Lyrebird) cmd@TR:~$ pip list
Package          Version  
---------------- ---------
aniso8601        3.0.2    
asn1crypto       0.24.0   
beautifulsoup4   4.6.0    
blinker          1.4      
brotlipy         0.7.0    
certifi          2018.4.16
cffi             1.11.5   
chardet          3.0.4    
click            6.7      
colorama         0.3.9    
cryptography     2.2.2    
fire             0.1.3    
Flask            1.0.2    
Flask-RESTful    0.3.6    
Flask-SocketIO   3.0.1    
genson           1.0.1    
h11              0.7.0    
h2               3.0.1    
hpack            3.0.0    
hyperframe       5.1.0    
idna             2.7      
itsdangerous     0.24     
Jinja2           2.10     
kaitaistruct     0.8      
ldap3            2.5      
lyrebird         0.10.5   
MarkupSafe       1.0      
mitmproxy        4.0.3    
packaging        17.1     
passlib          1.7.1    
pip              10.0.1   
portpicker       1.2.0    
pyasn1           0.4.3    
pycparser        2.18     
pycryptodome     3.4.11   
pyOpenSSL        18.0.0   
pyparsing        2.2.0    
pyperclip        1.6.2    
python-engineio  2.2.0    
python-socketio  2.0.0    
pytz             2018.5   
requests         2.19.1   
ruamel.yaml      0.15.44  
setuptools       40.0.0   
six              1.11.0   
sortedcontainers 2.0.4    
tornado          5.0.2    
urllib3          1.23     
urwid            2.0.1    
Werkzeug         0.14.1   
wsproto          0.11.0  



# 查看下命令行參數幫助
(Lyrebird) cmd@TR:~$ lyrebird --help
WARNING: The proper way to show help is 'lyrebird -- --help'.
Showing help anyway.

Fire trace:
1. Initial component
2. Instantiated class "CommandLine" (/home/cmd/.pyenv/versions/3.6.5/envs/Lyrebird/lib/python3.6/site-packages/lyrebird/manager.py:127)
3. ('Could not consume arg:', '--help')

Type:        CommandLine
String form: <lyrebird.manager.CommandLine object at 0x7f4f83a07b00>
Docstring:   命令行入口

* lyrebird
以缺省參數啟動lyrebird

* lyrebird start
以缺省參數啟動lyrebird

* lyrebird v start
以輸出詳細日志模式啟動lyrebird

* lyrebird no-browser start
啟動lyrebird不默認打開瀏覽器

* lyrebird start --mock 9090 --proxy 4272 --data .
指定參數啟動lyrebird
參數:
    --mock 默認9090 , mock服務及前端端口
    --proxy 默認4272, 代理服務端口
    --data 默認./data, mock數據根目錄
    --name 默認lyrebird,服務別名(用於通過別名停止指定的lyrebird服務)

* lyrebird stop
停止lyrebird

* lyrebird stop --name foo
停止別名為foo的lyrebird

Usage:       lyrebird
             lyrebird no-browser
             lyrebird resource
             lyrebird server
             lyrebird start
             lyrebird stop
             lyrebird v


# 帶v 日志方式 啟動lyrebird服務
(Lyrebird) cmd@TR:~$ lyrebird v start
lyrebird Load config : {
    "version": "0.10.5",
    "proxy.filters": [],
    "proxy.port": 4272,
    "mock.port": 9090,
    "mock.data": "data",
    "mock.proxy_headers": {
        "scheme": "MKScheme",
        "host": "MKOriginHost",
        "port": "MKOriginPort"
    },
    "ip": "your ip "
}
lyrebird start on your ip:9090
 * Serving Flask app "MOCK" (lazy loading)
 * Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
 * Debug mode: on
mitmproxy start on your ip:4272  ***請在被測設備上設置代理服務器地址***
INFO - [mock_server] - 302  GET http://localhost:9090/
INFO - [mock_server] - 200  GET http://localhost:9090/ui/

 

小米手機設置代理參考

https://jingyan.baidu.com/article/1974b2895cb780f4b1f774b5.html
我本機是 ubuntu18.04 用的公司無線 wifi dhcp 獲得 IP ,手機也是連接的公司同一 wifi
根據日志輸出 “mitmproxy start on your ip:4272 請在被測設備上設置代理服務器地址” 提示,配置好手機該 wifi 代理的 ip 和端口 4272
被測設備上用瀏覽器打開 http://mitm.it 選 Android 提示下載 pem.crt 安裝,並安裝證書。

 

 

 

 

 

小米 mix2 miui9.6 安裝 mitmproxy 證書問題解決:

用手機自帶的瀏覽器 或者 Firefox(從日志來看小米瀏覽器被一個 url 為 sec.miui.com 的安全服務限制了,無法正常下載該 pem.crt 證書,Firefox 則是沒有什么提示,但再此點擊 Android 圖標又會提示 “此證書已在此前安裝為一個證書頒發機構”)

都無法正常喚起 “證書安裝程序” ,最后嘗試用了 Chrome ,終於點擊 Android 圖標下載文件 pem.crt 成功后提示並喚起了手機系統的 “證書安裝程序” ,此處還要輸入鎖屏密碼,然后就是一個 “為證書命名” 的提示框。輸入一個名字 lyrebird ,確定即正常提示安裝證書成功。

 

 

通過 Chrome 的下載管理來看該 pem 文件名

 


該證書憑據最后可以在設置 ->其他設置-> 系統安全-> 加密與憑據-> 信任的憑據-> 用戶下找到,名為 mitmproxy

 

然后在地址 http://localhost:9090/ui/ 便可以點擊 record 圖標 ,來開始錄制手機上操作 app 的請求。

界面只有 inspector 和 datamanager 解決 

其他界面是插件形式提供的,目前默認沒有集成插件。還是需要自己裝的。
安裝方式如下
pip install lyrebird-ios
pip install lyrebird-android
pip install lyrebird-api-coverage

Android 界面

lyrebird-android 
需要安裝該插件。目前 lyrebird 默認界面 inspector  DataMagnager
插件有 ios   api-coverage   android
像 overbridge 和大會里提到的其他 還未開放?

這個 Android 界面,我實驗了下 usb 連接真機,不開啟開發者模式中的 usb 調試相關 或 adb devices -l 命令 list 不出來真機,界面上刷新 Android 界面 是找不到你的真機的。
所以還是要開啟開發者模式相關。

 

 

可以看到真機界面(但非實時雙向的)實時日志,和其他快捷啟動 app 等

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM