现在罕见的Web反收罗战略大约有以下几种:
- 1)数据加密;
- 2)限定拜访频率;
- 3)数据以非文本情势展示;
- 4)验证码掩护;
- 5)Cookie验证;
本文次要探究一下怎样打破“数据加密”:
反收罗战略 - “数据加密”的原理:
- Web办事器端剧本将HTML文档中的局部数据加密,然后发送给HTTP客户端(欣赏器)。
- 欣赏器利用JavaScript将密文复原成文明后表现。
打破的办法:
依据JavaScrip解密算法源码,完成本人收罗步伐所需复原算法,在吸收到办事器应对数据后,先对数据举行解密,然后再举行提取。
一个实例:
的德律风(手机)号码是如许输入的:
- <script type="text/javascript" > <br>
-
- document.write(WPOL.Util.rotDecode('(57) 1771 3775'));
-
- </script>
<script type="text/javascript" >
// <![CDATA[
document.write(WPOL.Util.rotDecode('(57) 1771 3775'));
// ]]>
</script>
在欣赏器中看到的德律风号>###,而不是”(57) 1771 3775“,如下所示:
在源码中可以找到WPOL.Util.rotDecode的源码如下:
- rotDecode: function(C) {
- var B, A = "";
- for (B = 0; B < C.length; B++) {
- var E = C.charAt(B);
- if (/[a-zA-Z]/.test(E)) {
- var D = /[A-Z]/.test(E) ? "A": "a";
- A += String.fromCharCode((E.charCodeAt(0) - D.charCodeAt(0) + 39) % 26 + D.charCodeAt(0))
- } else {
- if (/[0-9]/.test(E)) {
- A += String.fromCharCode((E.charCodeAt(0) - 48 + 15) % 10 + 48)
- } else {
- A += E
- }
- }
- }
- return A
rotDecode: function(C) {
var B, A = "";
for (B = 0; B < C.length; B++) {
var E = C.charAt(B);
if (/[a-zA-Z]/.test(E)) {
var D = /[A-Z]/.test(E) ? "A": "a";
A += String.fromCharCode((E.charCodeAt(0) - D.charCodeAt(0) + 39) % 26 + D.charCodeAt(0))
} else {
if (/[0-9]/.test(E)) {
A += String.fromCharCode((E.charCodeAt(0) - 48 + 15) % 10 + 48)
} else {
A += E
}
}
}
return A
九游会的收罗步伐是接纳Python编写的,以是必要依据上述代码完成九游会本人的解密算法,如下:
- def phone_decode(phone_en):
-
-
- phone_de = ''
- for c in phone_en:
- if re.compile(r'[a-zA-Z]').search(c):
- if re.compile(r'[A-Z]').search(c):
- d = 'A'
- else:
- d = 'a'
- phone_de += chr((ord(c) - ord(d) + 39) % 26 + ord(d))
- else:
- if re.compile(r'[0-9]').search(c):
- phone_de += chr((ord(c) - 48 + 15) % 10 + 48)
- else:
- phone_de += c
- return phone_de
def phone_decode(phone_en):
"""Decode whitepages phone number
"""
phone_de = ''
for c in phone_en:
if re.compile(r'[a-zA-Z]').search(c):
if re.compile(r'[A-Z]').search(c):
d = 'A'
else:
d = 'a'
phone_de += chr((ord(c) - ord(d) + 39) % 26 + ord(d))
else:
if re.compile(r'[0-9]').search(c):
phone_de += chr((ord(c) - 48 + 15) % 10 + 48)
else:
phone_de += c
return phone_de
测试: