首页
社区
课程
招聘
js cookie反爬实战
发表于: 2021-9-26 11:16 8924

js cookie反爬实战

2021-9-26 11:16
8924

js cookie 反爬

理论基础

取自《Python-3反爬虫原理与绕过实战》
Cookie不仅可以用于Web服务器的用户身份信息存储或状态保持,还能够用于反爬虫。大部分的爬虫程序在默认情况下只请求HTML文本资源,这意味着它们并不会主动完成浏览器保存Cookie的操作。Cookie反爬虫指的是服务器端通过校验请求头中的Cookie值来区分正常用户和爬虫程序的手段,这种手段被广泛应用在Web应用中,例如浏览器会自动检查响应头中是否存在Set-Cookie头域,如果存在,则将值保存在本地,而且往后的每次请求都会自动携带对应的Cookie值,这时候只要服务器端对请求头中的Cookie值进行校验即可。服务器会校验每个请求头中的Cookie值是否符合规则,如果通过校验,则返回正常资源,否则将请求重定向到首页,同时在响应头中添加Set-Cookie头域和Cookie值。

实战

观察

打开开发者工具,切换页面,看一看我们要爬取的目标的接口url是哪个

发现目标就是一串类似uuid的url,再看看html,那么其实这一串uuid组成的url我们是可以通过a标签获得的,现在只要爬取我们的目标的具体信息即可

看一下我们的具体信息在html中是何种表现形式

可以看到也是一个a标签的形式,那么我们的思路就明确了

1
2
3
4
随便找一个uuid的url=>
通过详细信息的a标签中的链接爬取所有的详细信息=>
通过下一页的a标签中的链接访问下一页的url=>
一直循环直到页空的尽头

那我们写一个简单的爬虫看看能不能爬取到,直接用网站

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import requests
 
cookies = {
    'Hm_lvt_9511d505b6dfa0c133ef4f9b744a16da': '1631673117',
    'ASP.NET_SessionId': 'xel3j5xxd5fxgu5rgv0cf2ms',
    'spvrscode': 'abdc551c0bd7f81cca4e2804c23afe646e1a1904a5570f1e626ce42731a8b2bb7e2ac5430a0b4c2671adf2973523fe3be72a87e6e56c76657e1ac381a254570e7ac433db747372123549b582c4dfa98f60816aca302433f60fddfbff563c19556c1cb013f26eadbd5d81d8ffc0a22fae8275c1fd42b386c2ef1d085048ae3a9a544793a7c2307dd2',
    'Hm_lpvt_9511d505b6dfa0c133ef4f9b744a16da': '1631685108',
}
 
headers = {
    'Connection': 'keep-alive',
    'sec-ch-ua': '"Microsoft Edge";v="93", " Not;A Brand";v="99", "Chromium";v="93"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"Windows"',
    'Upgrade-Insecure-Requests': '1',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36 Edg/93.0.961.47',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    'Sec-Fetch-Site': 'same-origin',
    'Sec-Fetch-Mode': 'navigate',
    'Sec-Fetch-User': '?1',
    'Sec-Fetch-Dest': 'document',
    'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
}
 
response = requests.get('https://www.***.***/15022E858978-A7C0-4D99-A602-967A31FB4828.html', headers=headers, cookies=cookies)
print(response.text)


可恶世上果然没有简单的事情,我们遇到了高手,可以和学员说这个是个高手耶稣来了也救不了。。。。。。那是不可能的,继承自肉丝老师服务第一的传统,有困难就要解决,解决不了也要硬解决,还是拿起我的水壶边喝水边分析吧。拿出我多年未见的老朋友burpsuit(上次一别以是一年),一点一点的试一下,发送到repeater,一个一个的删除参数,最后终于定位到了是cookie中的spvrscode=,当它为空的时候会返回一串js代码,当cookie过期的时候他就会返回非授权访问,那么现在就用之前的cookie通杀脚本来进行定位cookie是如何生成的。

1
2
3
4
5
6
7
8
9
10
11
var cookie = document.cookie;
document = Object.defineProperty(document, 'cookie', {
  get: function () {
    console.log('getter: ' + cookie);
    return cookie;
  },
  set: function (value) {
    console.log('setter: ' + value);
    cookie = value
  }
});

先把数据和cookie都清一清,然后注意这里他会网页重定向刷新一次网页,这时候如果我们在script上下断点执行一次hook直接放开的话,重定向就会把我们的hook给刷新掉,所以可以使用油猴脚本hook或者在每个断点都运行一下hook脚本

最终定位到了这里

就是一个查看一下ck的值,看看是不是我们想要的结果

就是我们想要的cookie的值,那么这里就可以开始逆向工作了,一步一步的回溯ck是怎样生成的

1
ck=_0x3cc240(0x90) + b + _0x3cc240(0x8b) + exp[_0x3cc240(0x95)]() + ';'
1
2
3
_0x3cc240(0x90)='spvrscode='
b='e73fbff4ed0cd6bdd7a2b41a2b2c915ce7b0b047552752268c1ea11adfc9b5422c33f2ec7cfdc9fe0b7df5ca707503f80b0039c93e8636c6ac1063c135494a1a6254d35b623e2f4803a67ac44ec8c7e99f517d25fbec1f7dfbfb569004d7eef408ad6e675c4562172112e4e1da5f359d25e07e80915b71794669e0f88c6f11b39a0e5d34695d5bc9'//目标
...//剩下作用不大

接着追b

1
2
3
4
5
b = escape(encryptvrscode)
encryptvrscode='e73fbff4ed0cd6bdd7a2b41a2b2c915ce7b0b047552752268c1ea11adfc9b5422c33f2ec7cfdc9fe0b7df5ca707503f80b0039c93e8636c6ac1063c135494a1a6254d35b623e2f4803a67ac44ec8c7e99f517d25fbec1f7dfbfb569004d7eef408ad6e675c4562172112e4e1da5f359d25e07e80915b71794669e0f88c6f11b39a0e5d34695d5bc9'//目标
encryptvrscode = encrypted[_0x3cc240(0x97)][_0x3cc240(0x8f)]()
_0x3cc240(0x97)='ciphertext'
_0x3cc240(0x8f)='toString'

那么就继续追踪encrypted,探索一下子是个牛马对象

1
2
3
4
5
var keyHex = CryptoJS['enc'][_0x3cc240(0xa3)][_0x3cc240(0xa4)](a)
      , encrypted = CryptoJS[_0x3cc240(0xa2)][_0x3cc240(0x8a)](b, keyHex, {
        'mode': CryptoJS[_0x3cc240(0xaf)]['ECB'],
        'padding': CryptoJS[_0x3cc240(0xa9)][_0x3cc240(0x99)]
    })

CryptoJS....,眼前一亮,蓝师傅说过的加密库,翻译一下即可

1
2
3
4
5
6
7
8
_0x3cc240(0xa3)='Utf8'
_0x3cc240(0xa4)='parse'
a='eb74960d'
_0x3cc240(0xa2)=`DES`
_0x3cc240(0x8a)='encrypt'
_0x3cc240(0xa9)=`pad`
_0x3cc240(0x99)=`Pkcs7`
b='E04A051E2E4370CE3F2AB90D7ECF6CFAC225C8B8FC6076977E8546DC17C7F890D3D442529EEE9941C3BDE3766931B7C846F43BBB36E02E3ED90B87B40A96AEDF'//此b非彼b所以下面的结果和前面的不一样,下面用新的b开始

翻译一下

1
2
3
4
5
var keyHex = CryptoJS['enc']['Utf8']['parse']('eb74960d')
      , encrypted = CryptoJS[`DES`]['encrypt'](b, keyHex, {
        'mode': CryptoJS[`mode`]['ECB'],
        'padding': CryptoJS[`pad`][`Pkcs7`]
    })

这时候可以去看一下百度上CryptoJS的使用案例,我们就知道它的加密流程了,官方使用流程大概如下

1
2
3
4
5
6
7
8
9
10
var CryptoJS = require("crypto-js");
 
// Encrypt
var ciphertext = CryptoJS.AES.encrypt('my message', 'secret key 123').toString();
 
// Decrypt
var bytes  = CryptoJS.AES.decrypt(ciphertext, 'secret key 123');
var originalText = bytes.toString(CryptoJS.enc.Utf8);
 
console.log(originalText); // 'my message'

其实这就是一个DES加密的ECB模式,那么我们可以找一个网站试一下(密钥又换了又刷新了一下)


可以看到一模一样,那么我们就知道了这是个标准算法,python能够简单的实现,那么现在还有一个问题就是key和b是哪来的,向上追溯可以发现是js中自带的

1
2
  var a = '7a957fbd';
var b = '06D9057FAC69E1AE39B3A37E03AFDCBD4ADF15025C574F066CC2955184438E628FC2C4B99FB54308949051450B883FF2AB5155516482D79AB0B22FF8553ACD7C';

over,可以开始写程序了

1
2
3
4
5
第一次访问随便找一个uuid的url得到js=>
第二次携带cookie访问url得到我们要的html数据=>
通过详细信息的a标签中的链接爬取所有的详细信息=>
通过下一页的a标签中的链接访问下一页的url=>
一直循环直到页空的尽头

这里我选择了,直接调用js代码,也可以写正则匹配拿到message和key,并且补环境也用了之前的代码,跑一遍js还是缺环境了,安装一个CryptoJS

1
npm install crypto-js

然后导入,发现结果

1
2
3
var CryptoJS = require("crypto-js");
......
console.log(ck)

 

那么现在就可以写我们的脚本进行爬取了,成功得到cookie的值,期间需要加入一个getcookie函数,和使用execjs这个之前都讲过这里不再赘述了,落地加载js(其实不落地也行)

1
2
3
4
5
6
7
8
9
10
11
12
13
response = requests.get('https://****.***.***/15022E858978-A7C0-4D99-A602-967A31FB4828.html', headers=headers, cookies=cookies)
pattern = re.compile("<script>(.*)</script>",re.S)
jscode = pattern.findall(response.text)[0]
with open("./MyProxy.js", "r") as f:
    envcode = f.read()
 
getcookie="function getcookie(){return document.cookie;}"
allcode = envcode + jscode+"\n"+getcookie;
with open("./allcode.js", "w") as f:
    f.write(allcode)
ctx = execjs.compile(allcode)
spvrscode = ctx.call("getcookie")
print(spvrscode)


但是要注意,这个网址是spvrscode与sessionid一一对应的,所以要定义类来进行统一会话,最终代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
class spider:
    def __init__(self):
        self.session = requests.session()
 
    def getdata(self, url):
        headers = {
            'Connection': 'keep-alive',
            'Pragma': 'no-cache',
            'Cache-Control': 'no-cache',
            'sec-ch-ua': '" Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"',
            'sec-ch-ua-mobile': '?0',
            'Upgrade-Insecure-Requests': '1',
            'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36',
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
            'Sec-Fetch-Site': 'same-origin',
            'Sec-Fetch-Mode': 'navigate',
            'Sec-Fetch-User': '?1',
            'Sec-Fetch-Dest': 'document',
            'Accept-Language': 'zh-CN,zh;q=0.9',
        }
 
        response = self.session.get(url, headers=headers)
        html = response.text
        if "******" not in response.text:
            pattern = re.compile("<script>(.*)</script>",re.S)
            jscode = pattern.findall(response.text)[0]
            with open("./MyProxy.js", "r") as f:
                envcode = f.read()
 
            getcookie = "function getcookie(){return b;}"
            allcode = envcode + jscode + "\n" + getcookie;
            with open("./allcode.js", "w") as f:
                f.write(allcode)
            ctx = execjs.compile(allcode)
            spvrscode = ctx.call("getcookie")
            requests.utils.add_dict_to_cookiejar(self.session.cookies, {"spvrscode": spvrscode})
            response = self.session.get('***********', headers=headers)
            html = response.text
            print(self.session.cookies.values())
 
 
if __name__ == '__main__':
    s=spider();
    s.getdata("https://***********")

得到了html

 


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 3
支持
分享
最新回复 (30)
雪    币: 15003
活跃值: (6213)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
版主你这个反爬虫是不是有点牵强?好像python不能设置cookie似的。
“大部分的爬虫程序在默认情况下只请求HTML文本资源,这意味着它们并不会主动完成浏览器保存Cookie的操作”?这是论点不知道哪里得来的?别人这样写是因为有些网页的确不需要cookie,如果发现爬不了需要cookie肯定会设置cookie.
2021-9-26 11:41
0
雪    币: 3796
活跃值: (1882)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
tDasm 版主你这个反爬虫是不是有点牵强?好像python不能设置cookie似的。 “大部分的爬虫程序在默认情况下只请求HTML文本资源,这意味着它们并不会主动完成浏览器保存Cookie的操作”?这是论点不 ...

Python可以接收发送Cookie,requests Session也可以,但是,有的网站比较狗,用JS来处理Cookie,这时前面说的方法就不好使了,就得逆向JS了。

最后于 2021-9-26 14:42 被欧阳休编辑 ,原因:
2021-9-26 14:41
0
雪    币: 15003
活跃值: (6213)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
欧阳休 tDasm 版主你这个反爬虫是不是有点牵强?好像python不能设置cookie似的。 “大部分的爬虫程序在默认情况下只请求HTML文本资源,这 ...
文不对题。js处理Cookie同反爬有毛关系?你不用python用其它语言获取网页同样有这个问题。anywhere,你都要先搞清Cookie的机制才能用编程语言获取其HTML文本资源.
2021-9-26 16:05
0
雪    币: 3796
活跃值: (1882)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
tDasm 文不对题。js处理Cookie同反爬有毛关系?你不用python用其它语言获取网页同样有这个问题。anywhere,你都要先搞清Cookie的机制才能用编程语言获取其HTML文本资源.
python默认会加载执行网页中的js?有的网站用js加密处理Cookie,你敢说没有一点反爬的作用?还有毛关系!“其它语言获取网页同样有这个问题”,有问题是不是要解决?解决这个问题不叫能做反爬?楼主的文章不能算做反爬?
2021-9-27 14:37
0
雪    币: 15003
活跃值: (6213)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
欧阳休 python默认会加载执行网页中的js?有的网站用js加密处理Cookie,你敢说没有一点反爬的作用?还有毛关系!“其它语言获取网页同样有这个问题”,有问题是不是要解决?解决这个问题不叫能做反爬?楼主 ...

4字:得不偿失。
4字:文不对题。你反爬并没成功。你设置Cookie,python跟着设置 Cookie,你不能你变了,不准python变?(好像刻舟求剑?)你用js设置cookie,python跟着调用js处理cookie,你怎么反爬了?前面我就说了,如果python没有Cookie这个功能,这篇文章反爬就成立了。

最后于 2021-9-27 16:53 被tDasm编辑 ,原因:
2021-9-27 16:24
0
雪    币: 3796
活跃值: (1882)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
tDasm 欧阳休 python默认会加载执行网页中的js?有的网站用js加密处理Cookie,你敢说没有一点反爬的作用?还有毛关系!“其它语言获取网页同样有 ...

你认为Python有Cookie这个功能就能轻易反反爬?你认为JS反爬仅仅是设置一下Cookie?它在什么情况下才会设置Cookie?它就没有其它校验了吗?你要知道Python并不是完整的浏览器!这篇文章也许在你这位大牛看来是一些很简单的东西,但是对于新手来说多少会有些许启发,你硬要挑刺的话,文章标题确实不太对,应该叫做反反爬!

最后于 2021-9-27 19:06 被欧阳休编辑 ,原因:
2021-9-27 17:36
0
雪    币: 3796
活跃值: (1882)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
tDasm 欧阳休 python默认会加载执行网页中的js?有的网站用js加密处理Cookie,你敢说没有一点反爬的作用?还有毛关系!“其它语言获取网页同样有 ...
其实你说得对,确实是文不对题,反爬跟反反爬是两个不同的概念,我也是熬夜熬糊涂了!
2021-9-27 19:53
0
雪    币: 342
活跃值: (789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
你没必要理会  tDasm 这个人,他只会喷!!!
哈哈
我感觉这人就会扯一些有的没的,然后扣一些字眼!!然后看也不看就BB!!
你可以看看他的回复。
把鸿蒙说的1文不值
把我司的风控&头条的风控说的一文不值,
宿华 和 张一鸣 应该招这个人 每年能节约成本好几千W
2021-9-29 17:33
0
雪    币: 15003
活跃值: (6213)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
逆向小学生 你没必要理会 tDasm 这个人,他只会喷!!! 哈哈 我感觉这人就会扯一些有的没的,然后扣一些字眼!!然后看也不看就BB!! 你可以看看他的回复。 把鸿蒙说的1文不值 把我司的风控&am ...
文抄公又出来找死?换个思路不行就换个死路?到处乱叫?
2021-9-30 08:42
0
雪    币: 342
活跃值: (789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
tDasm 文抄公又出来找死?换个思路不行就换个死路?到处乱叫?

哈哈 小喷子 又开始喷了???
生活上不如意吧!!
哈哈,天天和这个BB 和哪个BB 自己技术菜的要命,还对别人指手画脚!!哈哈

看也不看就说别人抄,自己啥也不懂还爱BB!!打脸了几次,还死不承认!在下对你的脸皮佩服佩服


话说你还没回答我的问题呢??是回答不上来吗???

最后于 2021-9-30 10:23 被学着学逆向编辑 ,原因: 改错
2021-9-30 10:20
1
雪    币: 15003
活跃值: (6213)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
逆向小学生 tDasm 文抄公又出来找死?换个思路不行就换个死路?到处乱叫? 哈哈&nbsp;小喷子&nbsp;又开始喷了???生活上不如意 ...
说你是文抄公,说你是偷别人的思路,就要回答你的问题?你这是什么逻辑?脑残了?
2021-9-30 10:31
0
雪    币: 342
活跃值: (789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
tDasm 说你是文抄公,说你是偷别人的思路,就要回答你的问题?你这是什么逻辑?脑残了?

哈哈 果然是回答不上来
在我司有个不成文规定 提出不合理就要出方案或思路,不然就是放屁。
你说我抄我就抄了?我只当你啥也不会是放屁!  哈哈,不懂就谦虚点!!不懂就别乱回复。


再者说我问的问题,都是你反馈的这不好那不行的,问你为啥不好,你又说不出个所以然??那你说你是不是在放屁呀

最后于 2021-9-30 10:37 被学着学逆向编辑 ,原因: 改错
2021-9-30 10:36
0
雪    币: 15003
活跃值: (6213)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
逆向小学生 tDasm 说你是文抄公,说你是偷别人的思路,就要回答你的问题?你这是什么逻辑?脑残了? 哈哈&nbsp;果然是回答不上来在我司有个不成 ...
发表技术意见,就是生活不如意?你是脑子有问题?应该是非常满意才有自己的见解。只有你脑残发现不了问题才是真有问题。
2021-9-30 10:40
0
雪    币: 342
活跃值: (789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
tDasm 发表技术意见,就是生活不如意?你是脑子有问题?应该是非常满意才有自己的见解。只有你脑残发现不了问题才是真有问题。

你看看你 又开始和你说东你说西了!!我发现你有个很严重的问题,跑题!!
都是你反馈的这不好那不行的,问你为啥不好,你又说不出个所以然??

既然你提出了问题,总得说下你发现问题的原因吧?你这不就是 罗永浩 说的赤裸裸的流氓吗?

最后于 2021-9-30 10:45 被学着学逆向编辑 ,原因: 改错
2021-9-30 10:44
0
雪    币: 15003
活跃值: (6213)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
逆向小学生 tDasm 说你是文抄公,说你是偷别人的思路,就要回答你的问题?你这是什么逻辑?脑残了? 哈哈&nbsp;果然是回答不上来在我司有个不成 ...
不回答,就是回答不了,你脑残逻辑?凭什么要回答?为什么要教你这个不屑子徒?缺德之人?拿别人的思路缺不缺德?
2021-9-30 10:46
0
雪    币: 342
活跃值: (789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
tDasm 不回答,就是回答不了,你脑残逻辑?凭什么要回答?为什么要教你这个不屑子徒?缺德之人?拿别人的思路缺不缺德?
别骂人呀!有大佬失风度啊!有啥生气的,就是想和你这种人聊聊你这种人的心理。

我建议你看看这个!!你很像 王自如
https://haokan.baidu.com/v?pd=wisenatural&vid=4181455691207763587
说别人这不行那不行,问你为啥,你还说不出个原因。这不是耍流氓吗??
2021-9-30 10:50
0
雪    币: 15003
活跃值: (6213)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
逆向小学生 别骂人呀!有大佬失风度啊!有啥生气的,就是想和你这种人聊聊你这种人的心理。 我建议你看看这个!!你很像 王自如 https://haokan.baidu.com/v?pd=wisenatura ...
你偷别人的思路缺不缺德?
你无端到这个帖子里面喷人,是不是先骂?是不是无良?我还击理所当然!
2021-9-30 11:00
0
雪    币: 342
活跃值: (789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
tDasm 你偷别人的思路缺不缺德? 你无端到这个帖子里面喷人,是不是先骂?是不是无良?我还击理所当然!
2021-9-30 11:01
0
雪    币: 959
活跃值: (498)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
tDasm 版主你这个反爬虫是不是有点牵强?好像python不能设置cookie似的。 “大部分的爬虫程序在默认情况下只请求HTML文本资源,这意味着它们并不会主动完成浏览器保存Cookie的操作”?这是论点不 ...
但凡懂点爬虫都不会问出这样的问题。
2021-10-11 16:34
0
雪    币: 642
活跃值: (1802)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
21

能在看雪同时见到卧龙凤雏两位人才。真是人生幸运~

2021-10-11 16:54
0
雪    币: 1838
活跃值: (786)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
22
tDasm 你偷别人的思路缺不缺德? 你无端到这个帖子里面喷人,是不是先骂?是不是无良?我还击理所当然!
tDasm雀食小丑
2021-10-11 17:22
0
雪    币: 15003
活跃值: (6213)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
jiyulan tDasm雀食小丑
无缘无故来之疯狗咬人?哪里得罪你了?
2021-10-12 09:44
0
雪    币: 959
活跃值: (498)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
司马懿破八卦阵
2021-10-12 11:32
0
雪    币: 1867
活跃值: (4073)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
25

来挖个坟: https://bbs.pediy.com/thread-282-1.htm [旺柴][旺柴][旺柴]


2021-10-13 10:29
0
游客
登录 | 注册 方可回帖
返回
//