这里举个例子,某磁力离线云,对数据标题进行加密。
前端展示是这样的: 源码是这样的: 就是一堆数字
52297·61356·11868·62314·51679·41594·12321·21896·91661·62294·01438·51845·12308·51567·21864·7468·12335·61597·31691·22328·61750·61738·82280·11847·91732·82298·01739·71515·8460·1650·0461·7843·4976·51209·51055·8466·0684·51144·71059·61183·71014·91142·2468·0500·6489·2494·0550·7465·9728·5683·4556·8503·6489·1800·4461·0881·1505·7543·7528·0462·7654·8659·6676·1469·4677·9727·0830·9453·7561·9565·8509·0701·8882·3469·41090·11072·01184
解密方式是这样的:
$("[decode=true]").each(function () { var obj = $(this); var text = obj.text(); text = text.split("·"); var str = ''; for (var i = 0, len = text.length; i < len; ++i) { text[i] = text[i].substr(1); text[i] = text[i].substring(0, text[i].length - 1); str += String.fromCharCode(text[i]) } obj.text(utf8to16(str)); obj.removeAttr("decode"); });
function utf8to16(str) {
var out, i, len, c;
var char2, char3;
out = "";
len = str.length;
i = 0;
while (i < len) {
c = str.charCodeAt(i++);
switch (c >> 4) {
case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
// 0xxxxxxx
out += str.charAt(i - 1);
break;
case 12: case 13:
// 110x xxxx 10xx xxxx
char2 = str.charCodeAt(i++);
out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));
break;
case 14:
// 1110 xxxx 10xx xxxx 10xx xxxx
char2 = str.charCodeAt(i++);
char3 = str.charCodeAt(i++);
out += String.fromCharCode(((c & 0x0F) << 12) |
((char2 & 0x3F) << 6) |
((char3 & 0x3F) << 0));
break;
}
}
return out;
}
原本想要用 python 重写这个解密过程,但是发现挺麻烦的,基于“反正都是在网页上展示内容”,干脆将他的解密 js 搬过来照用。。
亲测,浏览器可以运行,python用execjs调用返回空值,不然我直接解析结果了。
浏览器运行
python使用execjs
或许脚本有错。发出来大家指正一下
https://gist.github.com/anonymous/420c233004e1dbfbd98fe543a2d3ad15
原来如此简单:
def tochar(text):
text= text.split("·")
str_=''
for idx,num in enumerate(text):
num=num[1:-1]
str_+=chr(int(num))
return str_
1
jas0ndyq 2017-10-09 15:39:41 +08:00
也做过和 lz 一样的事情
|
2
bearsiji 2017-10-09 15:40:28 +08:00
类似这种的 多重混淆 一层套一层 酸爽
|
3
PythoneerDev6 2017-10-09 15:49:14 +08:00
之前爬过 汤不热。 源代码放在 github 上,star 达到 2k 之后。 汤不热就开始做反扒。
给 next 的标签加了一个空格。 也是雷到我了。 https://github.com/xiyouMc/WebHubBot |
4
jijiwaiwai 2017-10-09 15:49:17 +08:00
你这个办法很笨的。。。
直接使用 pyv8,调用 js 函数获取返回值就行了 |
5
chen2016 OP @jijiwaiwai #4 试过了,会出错
|
6
mansur 2017-10-09 15:56:29 +08:00
最厉害的是投毒,缠假内容
|
7
af463419014 2017-10-09 15:58:27 +08:00
后台检测到肯定是爬虫的时候,不禁止访问,装作正常的页面,返回错误的数据
|
8
crab 2017-10-09 15:58:31 +08:00 5
这种算好了,直接拿它 js 解密。
最厉害的应该是发现你是爬虫,不拒绝你,继续让你爬,但给脏数据。 |
9
xujialiang 2017-10-09 15:58:38 +08:00
哈哈哈 我会用 node 写一个接口,然后调接口
|
10
clino 2017-10-09 15:59:04 +08:00
以前不是有看过变成竖排文的办法,不知道效果如何
|
11
nikoo 2017-10-09 16:03:26 +08:00
怎么把汉字转为楼主贴的这种数字?
|
12
kbdancer 2017-10-09 16:13:00 +08:00 via Android
phantomJS 直接解析执行 js 或者自定义执行 js 脚本
|
13
lizon 2017-10-09 16:29:49 +08:00
根本不知道怎么触发的反爬机制,返回一些错误数据混在正确数据里
|
14
Luckyray 2017-10-09 16:31:33 +08:00
这种乱七八糟的就直接用 chrome driver 了...重写一遍还不够麻烦的
|
15
murmur 2017-10-09 16:32:51 +08:00 1
能被你发现的都是小 case
真正发现不了的都是用投毒的 |
16
ytmsdy 2017-10-09 16:35:34 +08:00
最惨的就是掉进蜜罐里面,爬虫一切正常,但是返回的数据都是假数据。
最可怕的就是掉进去了,你还不知道!!还在那里很开心的爬,等爬完了,看到结果就 SB 了。 |
17
luoshuangfw 2017-10-09 16:46:49 +08:00 via Android
楼主你看这函数名不是很明确吗,这就是把变长编码的 utf8 转换成定长编码的 utf16 的非常标准的做法啊,我觉得压根不是在加解密
|
18
Xrong 2017-10-09 16:49:47 +08:00
有见过免费代理 IP 池网站,IP 最后一段是用 CSS 展示出来的。。。
|
19
zbl430 2017-10-09 16:52:02 +08:00
|
20
anoymoux 2017-10-09 16:56:09 +08:00
<ul>
<li>A</li> <li>B</li> <li>C</li> <li>X</li> ... ... </ul> 你需要的数据是 X,但是他会生成很多的垃圾数据 A,B,C 等等..X 出现的位置是随机的,而且 A,B,C 等垃圾数据的格式跟 X 相同,无法用正则区分. 然后每个 li 都有一个随机的 class 属性,用动态生成的 css 样式控制只显示 X,其他的隐藏掉.... 另外 css 用了继承,嵌套还有复杂的计算等等 |
21
annielong 2017-10-09 16:57:32 +08:00
汤不热还是使用 api 抓取比较好,
|
22
vtwoextb 2017-10-09 17:02:33 +08:00
京东防爬, 我用的是 动态 ip 策略 https://github.com/hizdm/dynamic_ip
|
24
CareiOS 2017-10-09 17:19:37 +08:00
@PythoneerDev6 你源码,现在还工作吗?
|
25
chen2016 OP @luoshuangfw #17 所以 utf8 怎么转 utf16 ? https://i.loli.net/2017/10/09/59db406626aa1.png
|
26
catfish 2017-10-09 17:30:57 +08:00
给假数据
|
29
PythonAnswer 2017-10-09 17:54:11 +08:00 via Android
蜜罐,文字嵌图
|
30
abcbuzhiming 2017-10-09 18:24:40 +08:00
其实我觉得再牛逼的反爬都对付不了真浏览器,所以我觉得无头浏览器才是未来主流技术
|
31
jadec0der 2017-10-09 18:27:51 +08:00 via Android
携程还是去哪儿,价格数字用一种随机字体,比如 7 在这个字体里可能是 4
|
32
yu099 2017-10-09 18:49:16 +08:00 via Android
@abcbuzhiming 我看到有加挖矿 JS 的做反爬,如果像淘宝一样屏蔽跟踪 JS 就触反爬怎么办?
|
33
NsLib 2017-10-09 19:26:09 +08:00
前去哪儿员工,你可以试试爬爬看,假数据、前端混淆、字体混淆,23333 ……
|
34
airbasic 2017-10-09 19:39:59 +08:00
猫眼的票房=。= 得用图像识别
|
35
j3n5en 2017-10-09 19:43:01 +08:00 via Android
啧,这不是黑科云么,。。。,我前两天刚写完。。。。
|
37
abcbuzhiming 2017-10-09 20:04:43 +08:00
@yu099 它一定要探测你也是没办法的,所以爬虫这玩意就是比拼服务器,你服务器众多,伪装的像正常浏览器,它就没招了是不是
|
40
scriptB0y 2017-10-09 20:15:50 +08:00
碰到过一个页码记录在 session 中的,也就是你每次发一样的 curl,结果是不一样的…… session 是通过一个 cookie 判断的……不知道算不算反爬
另外记录了一些遇到过的垃圾网站: https://www.kawabangga.com/posts/2017 https://www.kawabangga.com/posts/2240 |
41
PythoneerDev6 2017-10-09 20:19:24 +08:00
@CareiOS 许久未试
|
42
jijiwaiwai 2017-10-09 21:26:43 +08:00
@chen2016 你的代码问题
|
43
chen2016 OP @jijiwaiwai 已经不用 execjs 了,看最后
|
44
fuxkcsdn 2017-10-09 21:47:26 +08:00 via iPhone
@jadec0der 肯定是去哪儿,携程的技术实力在去哪儿面前…
爬过最难的是去哪儿,不用 headless 浏览器简直难爬,曾尝试跟踪解密 js,跟踪了半天被叫去做其他事,之后再没心情弄了… |
45
swirling 2017-10-09 22:01:43 +08:00
我最近很烦 silverlight 数据传输通过 WCF 传输 contenttype 是 msbin 1
大概是我没见过世间险恶吧 |
46
AlwaysBehave 2017-10-09 22:18:18 +08:00
|
47
opengps 2017-10-09 23:30:51 +08:00 via Android
我说个吧,很多人好奇为啥方式不能偷我接口,原因是,没有 reffer 的都被我关闭了输出,就这样很多人第一步没走通就不走了
|
48
doubleflower 2017-10-10 00:03:10 +08:00
@anoymoux 搞这么费劲其实真要破也容易,用个 headless 浏览器,用 js 判断这个 li 的样式是否被隐藏了。
|
50
Lguo 2017-10-10 01:27:20 +08:00 via Android
请教一下各位兄弟们这个代理网站列出来的端口要怎么抓 http://www.goubanjia.com/
|
51
RqPS6rhmP3Nyn3Tm 2017-10-10 05:36:27 +08:00
我遇到最恶心的是哔哩哔哩,appkey 混淆得没法看
最后乖乖 youtube-dl |
52
gfcddz 2017-10-10 08:45:32 +08:00 via Android
国外的一个全站 http/2.0 协议,python 支持 http2.0 的库压根用不了,只能用 seleniim 了
|
53
kran 2017-10-10 08:48:31 +08:00 1
投毒假数据啊,最坑的一次,见过一本写神经病的小说,看了两章胡言乱语才发现是网站爬虫被投假数据。文笔不错,没得逻辑。
|
54
Marsss 2017-10-10 08:52:10 +08:00
遇到最恶心的是 js 检测是否有鼠标操作且正常,并将其一并参与请求。
|
56
grey0207 2017-10-10 09:31:08 +08:00 1
这个网站的源图片都打乱的,又禁止右键,感觉要抓图只能靠截图了
http://viewer.comic-earthstar.jp/viewer.html?cid=1e48c4420b7073bc11916c6c1de226bb&cty=1&lin=0 |
57
qqpkat2 2017-10-10 09:36:29 +08:00
这种反扒太简单了,程序内嵌浏览器直接破了
遇到最厉害的还是百度的,提交的时候记录了鼠标动作.....不过还是能破解 |
58
wfd0807 2017-10-10 09:47:32 +08:00
这个还算简单,毕竟可以分析出来,解密过程不依赖浏览器;
看看汽车之家的反爬虫技术,用伪元素的 text 渲染文字。。。 |
60
BlackGrasshopper 2017-10-10 10:19:28 +08:00
@grey0207 这个网址厉害了
|
61
huangfs 2017-10-10 10:25:38 +08:00
最恶心的应该是不限制你 但是给假数据吧 这种真的防不胜防。
|
62
sucaihuo 2017-10-10 10:32:02 +08:00
从来没研究过这方面,要学的东西还真多啊
|
63
wmhx 2017-10-10 10:44:56 +08:00
之前搞刷单用 paypal 支付, 先是写代码全程模拟结果发现 paypal 的 js 请求参数和名称全是动态生成,没找到规律,就换了 seleniim, 结果检测是否是 robot,用的是一家以色列公司的技术,花了近 2 周时间没搞定, 后来一查,这家牛逼的公司首页就说,如果用了他的技术被 robot 操作了. 全额赔付.
|
66
Felldeadbird 2017-10-10 13:16:22 +08:00
目前遇到过最搞笑的:
客服:某个网站的价格爬取失效了。快去看看 我认真观看后,发现他们价格要登录才可以看到价格。 终于弄好了。准备上线。 客服:那个网站价格爬取正常了。 我再去看了一下……原来是他们网站出问题了= =。导致非会员价格不显示。 |
67
yxy2829 2017-10-10 14:07:03 +08:00
各种验证码算吗?一堆汉字里面选四字成语,按顺序点击
|
68
SlipStupig 2017-10-10 14:15:09 +08:00
数据真假掺着来....
|
75
mingyun 2017-10-29 14:21:29 +08:00
@zbl430 https://zhuanlan.zhihu.com/p/29196829 这个网站反爬策略
|