爬取picacg每日推荐
最近想给自己的qq机器人添加一个每日本子推荐的功能,于是尝试爬了一下picacg的每日本子推荐那么好 怎么爬? 使用httpcanny抓包然后python爬虫构造发送请求
抓个包看看
多抓两次,可以发现其中会变得东西有
time 时间戳
nonce估计是和时间一起加密的
signature 经过某种加密算法得出的签名
现在我们要想办法去生成nonce和signature
我之前已经把apk拖到androidkiller里了,现在搜一下time,nonce,signature 看看能不能找到相关函数
搜完之后发现 time和 signature都有很多结果,而nonce只有一个
那我们到相应的地方 使用java反编译软件 查看
ok 找到了time,nonce,signature 其中time就是时间戳,nonce是用uuid随机生成,signature在164行说了就是这个c(这里我没截到)
现在signature由MyApplication.bx().c()生成去看相关函数定义
发现蛋疼了 有三个函数有关系 hl.C(),stringConFromNative(),getStringSigFromNative()
后两个函数一看native那就是在so里面的 一会儿再看 先看hl.C()
好 看一下函数 把传入的两个参数全部转小写,然后调用了SHA256的Hmac算法
现在回过头看stringConFromNative(),getStringSigFromNative()
把apk改名为zip,去lib/arm64-v8a/下找到so文件 丢到IDA里面
找到相关函数,可以按f5转换为c代码
最后只觉得自己菜,看不懂这个代码,,,
还好在github上找到了相关dalao的代码
https://github.com/AnkiKong/picacomic
https://github.com/tonquer/picacg-windows
相关函数python实现如下
def ConFromNative(datas):
key = ""
# v6 = datas
v37 = str(datas)
v7 = str(datas)
v35 = str(datas)
v36 = str(datas)
v8 = str(datas)
# v9 = datas
# v10 = datas
# v33 = v9
# v34 = v6
key += v37
key += v7
key += v35
key += v36
key += v8
return key
def SigFromNative():
key = "~*}$#,$-\").=$)\",,#/-.'%(;$[,|@/&(#\"~%*!-?*\"-:*!!*,$\"%.&'*|%/*,*"
key = list(key)
# v5 = int[] 32bit
# BYTE1(v5) = 100;
key = chr(100)
# LOWORD(v5) = 14161;
key = list((14161).to_bytes(2, 'little').decode("utf-8"))
# *(int *)((char *)&v5 + 3) = 1768835429;
key = list((1768835429).to_bytes(4, 'little').decode("utf-8"))
# LOBYTE(v5) = 86;
key = chr(86)
# HIBYTE(v5) = 80;
key = chr(80)
# qmemcpy((char *)&v5 + 1, "RM4", 3);
key = list("RM4")
# qmemcpy((char *)&v5 + 3, "CA}b", sizeof(int));
key = list("CA}b")
# LOWORD(v5) = 22351;
key = list((22351).to_bytes(2, 'little').decode("utf-8"))
# qmemcpy((char *)&v5 + 1, "EV`", 3);
key = list("EV`")
# qmemcpy((char *)&v5 + 1, "<>M7pddUBL5n", 12);
key = list("<>M7pddUBL5n")
# *(_WORD *)((char *)&v5 + 1) = 28227;
key = list((28227).to_bytes(2, 'little').decode("utf-8"))
# qmemcpy((char *)&v5 + 2, "9\\RK", sizeof(int))
key = list("9\\RK")
# BYTE1(v5) = 57;
key = chr(57)
# HIBYTE(v5) = 55;
key = chr(55)
# HIBYTE(v5) = 51;
key = chr(51)
# BYTE2(v5) = 48;
key = chr(48)
return "".join(key)
最后上一张成功截图
怕冷菌 发表于 2021-3-19 23:17
大佬厉害!!!请问大佬QQ机器人对接的是什么数据库
啊这我用mirai做的qq机器人 本身不限制数据库 fkmol 发表于 2022-3-21 14:52
看完了 现在唯一不知道的就是HashKey(_src,_key)的_src,_key是什么 源码加密的我也看了 但追不到源
翻了下 当时这部分代码好像被折叠了 截图没用注意
datas = [
'https://picaapi.picacomic.com', 'collections',
now,
nonce,
'GET',
'C69BAF41DA5ABD1FFEDC6D2FEA56B',
'2.2.1.3.3.4',
'45'
]
_src = ConFromNative(datas)
_key = SigFromNative() 不好意思 抓包用的是httpcanary 上面打错了。。 大湿,厉害厉害 gayhub又被墙了吗?打不开了{:301_983:} 感谢 懂了 马上去爬 牛啊,大佬 哈哈哈,没想到大佬是道友啊 好厉害,膜拜 牛啊,看见粉红色app我就啪的一下点进来了,很快啊
谢谢分享辛苦了