声明:本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢!
前言
目标地址:aHR0cHM6Ly93d3cuemRheWUuY29tL0ZyZWVJUExpc3QuaHRtbA==
一、页面分析
常规操作,先看下源码有没有IP数据,发现后缀都被wait替换了,然后取xhr看看是不是动态加载
只有这么个玩意,看来不是
再来判断是否是CSS字符加密,字体转以后一般是这样类型得𘡒𘡓𘡓𘡏𘡒𘡓
,看来也不是字体加密,那估计就是JS调用修改了
二、参数加密定位
经过调试发现xhr里的这个地址返回数据一直再变化,先下xhr断点看看
跟栈到这里发现了xhr链接得生成位置 然后mk,ak在这包里,其中am是不变,ak是变化的 这里的k就是xhr返回得数据,然后再循环里使用,应当是一个解密得key值
三、参数解密
先看$.showm
方法,生成32位得数据,其实是MD5得加密,可以自行测试
这个sdfsgfdg
是对m分割,然后取ascii码进行字符拼接
这个dsfgsd
是对#分割,然后取ascii码进行字符拼接
参数得解密方法都已经获取,只需要拿到加密得ip和ak,ck,即可得到完整得ip
4、源码分享
# -*- coding: utf-8 -*-
'''
@File: run.py
@SourceUrl: https://www.zdaye.com/FreeIPList.html
@Author: 阿J
@Date: 2021/3/22 16:04
@Software: PyCharm
@Desc: 站大爷
'''
import re
import requests,hashlib
import time
from lxml import etree
headers = {
'Connection': 'keep-alive',
'Pragma': 'no-cache',
'Cache-Control': 'no-cache',
'Accept': 'text/plain, */*; q=0.01',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest',
'Sec-Fetch-Site': 'same-origin',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Dest': 'empty',
'Referer': 'https://www.zdaye.com/FreeIPList.html',
'Accept-Language': 'zh-CN,zh;q=0.9',
}
def MD5(p):
return hashlib.md5((p).encode()).hexdigest().upper()
def sdfsgfdg(s):
s2 = s.split('m')
ts = ''
for i in range(len(s2)-1,-1,-1) :
ts += chr(int(s2[i])-352)
return ts
# s:367#367#367#367 kk:key
def dsfgsd(s, kk):
s2 = s.split("#")
ts = ""
for i in range(len(s2)-1,-1,-1):
ts += chr(int(s2[i])-kk)
return ts
def get_keyUrl(mk,ak):
url = "https://www.zdaye.com"+"/" + mk + "_" + MD5(MD5(sdfsgfdg(mk) + "beiji" + ak)) + ".gif"
return url
# print(get_keyUrl('400m403m401m398m401m407m401m398m407m401m398m402m401m401','32912'))
session = requests.session()
res = session.get('https://www.zdaye.com/FreeIPList.html',headers=headers).text
# 获取加密的ip
selector = etree.HTML(res)
trs = selector.xpath('//*[@id="ipc"]/tbody/tr')
ip_infos = []
# num = 1
for tr in trs:
ip_1 = tr.xpath('./td[1]/text()')[0]
ip_2 = tr.xpath('./td[1]/@v')[0]
ip_infos.append((ip_1,ip_2))
# # 保存验证码图片
# with open('{}.jpg'.format(num),'wb') as f:
# igm_url = 'https://www.zdaye.com'+tr.xpath('./td[3]/img/@src')[0]
# f.write(session.get(igm_url,headers=headers).content)
# num+=1
print('解密前:',ip_infos)
# 获取加密参数
t = str(time.strftime("%Y/%m/%d %H:%M:%S", time.localtime())).replace(' ','%20').replace('/0','/')
url = 'https://www.zdaye.com/js/base.js?'+t
print(url)
pp = session.get(url,headers=headers).text
mk = re.findall('mk = "(.*?)"',pp)[0]
ak = re.findall('ak = "(.*?)"',pp)[0]
print(mk,ak)
key_url = get_keyUrl(mk,ak)
print(key_url)
key = session.get(key_url,headers=headers).text
print('解密得key:',key)
# 解密IP
ip_new = []
for info in ip_infos:
ip = info[0].replace('wait',dsfgsd(info[1],int(key)))
ip_new.append(ip)
print('解密后:',ip_new)
复制代码