本文转载自:https://www.jianshu.com/p/263a3392ee82
解决方案确立了,接下来无非就是验证加实现,这里还是以Mac
为例。
来来来,看看苹果的系统中心好不好攻占,首先,咋们来确立系统中心数据的存储方式,进入终端:
cd `getconf DARWIN_USER_DIR`/com.apple.notificationcenter/db2
ls
db db-shm db-wal
可以看到,有三个文件,哎,好熟悉,SQLite
呗。
打开:
分别有以下几个表:
可能有点多,但我们只需要关注两个表就行:
建表语句分别如下:
create table app
(
app_id INTEGER
primary key,
identifier VARCHAR,
badge INTEGER
);
create table record
(
rec_id INTEGER
primary key,
app_id INTEGER,
uuid BLOB,
data BLOB,
request_date REAL,
request_last_date REAL,
delivered_date REAL,
presented Bool,
style INTEGER,
snooze_fire_date REAL
);
在app表的这行,可以看到微信应用的id
是35
。
app_id identifier
35 com.tencent.xinwechat
知道应用id
后就可以直接在record
表里面直接找到通知消息:
SELECT app_id,data, presented, delivered_date FROM record WHERE app_id IN (35) ORDER BY delivered_date DESC;
得到结果如下:
[图片上传失败...(image-51e74e-1571723510570)]
一切顺利,但定睛一看,中间那一大串是什么?不要慌,里面bplist
,给了很大的提示。
在Python的世界里,没有什么问题是引入一个第三方包解决不了的,如果有,那么引入两个第三方包就可以了。
pip install biplist
利用biplist
会将那一串加载成我们人类可以看懂的语言。
好像没有一点阻碍,那就可以直接编码实现了。
算了,不多说,多了我也说不出来,直接开源吧,见 https://github.com/howie6879/examiner ,不要吝啬你的Star(可点击阅读原文)。
git clone https://github.com/howie6879/examiner
cd examiner
# 推荐使用pipenv 你也可以使用自己中意的环境构建方式
pipenv install --python=/Users/howie6879/anaconda3/envs/python36/bin/python3.6 --skip-lock
接下来只需要在根目录构建自己的监控脚本就行,比如监控微信,监理文件命名为 wechat_app.py
:
from examiner.notification import notification_factory
def get_data(app_names: list):
os_notification = notification_factory(app_names)
info_list = os_notification.get_target_notification()
for each in info_list:
# 自行实现监控逻辑以及处理方案
print(each)
if __name__ == "__main__":
app_names = ["WeChat"]
get_data(app_names)
和上一篇比起来,这代码,不需要配置、不需要提前准备什么,只需要在列表里面填上你想监控的目标应用即可(我顺便支持了多应用),你可以同时监控钉钉和微信等等
自己可以慢慢玩,一般会这样输出:
{'title': '老胡的储物柜', 'subtitle': '', 'body': '测试消息监控,任何应用都行', 'delivered_date': datetime.datetime(2019, 10, 20, 21, 40, 26, 428654), 'presented': 1, 'app_identifier': 'com.tencent.xinwechat', 'app_name': 'WeChat', 'md5': '75e24e2ccc502f01c101fcbd3637950b'}