阳光肥肥 发表于 2021-3-19 09:58

爬取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-25 18:27

怕冷菌 发表于 2021-3-19 23:17
大佬厉害!!!请问大佬QQ机器人对接的是什么数据库

啊这我用mirai做的qq机器人 本身不限制数据库

阳光肥肥 发表于 2022-3-21 15:25

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()

阳光肥肥 发表于 2021-3-19 10:11

不好意思 抓包用的是httpcanary 上面打错了。。

lidongdong94 发表于 2021-3-19 10:23

大湿,厉害厉害

羽刃 发表于 2021-3-19 10:34

gayhub又被墙了吗?打不开了{:301_983:}

hnwang 发表于 2021-3-19 11:00

感谢 懂了 马上去爬

GMCN 发表于 2021-3-19 11:35

牛啊,大佬

xh123 发表于 2021-3-19 12:01

哈哈哈,没想到大佬是道友啊

徘徊的猫 发表于 2021-3-19 12:11

好厉害,膜拜

LiangMaxwell 发表于 2021-3-19 13:02

牛啊,看见粉红色app我就啪的一下点进来了,很快啊

wshijiu008 发表于 2021-3-19 13:04

谢谢分享辛苦了
页: [1] 2 3 4
查看完整版本: 爬取picacg每日推荐