关于数据库的一些笔记
Redis相关操作1234567891011121314151617181920212223242526272829303132333435363738394041'''建立连接'''# 本地redis_con = redis.Redis()# 指定hostredis_con = redis.Redis( host="10.82.193.194", port=6380, password="", db=2)'''集合(用于去重)'''redis_con.sismember(key, value) # 是否存在redis_con.sadd(key, value) # 添加单条数据redis_con.sadd(key, *lst) # 添加列表redis_con.smembers(key) # 获取全部值# return [bytes, bytes ...]'''列表'' ...
web逆向-几个比较简单的js逆向实战
来写几个比较简单的js逆向
GlidedSky JS加密1
开局已经提示了,数据是通过ajax加载的,直接打开开发者工具的 Network 选项:
这里是普通的get请求,其中 page t 参数都很明显,分别对应页数和秒级时间戳
只有 sign 不太明确,需要逆向找出它的生成逻辑,观察到长度是40,怀疑可以是sha1算法
md5 的长度是 32
sha256 的长度是 60
直接全局搜索sign的话,太多结果了,试试 XHR断点:
断住后,一直追栈,直到定位到sign的生成处,如上图所示,抠出主要的逻辑:
12let t = Math.floor(($('main .container').attr('t') - 99) / 99);let sign = sha1('Xr0Z-javascript-obfuscation-1' + t);
这里代码的意思就是,取 main .container 元素的 t 属性的值,做一下简单的数学运算,然后拼接字符串,最后计算SHA1哈希值
注意,请求接口参数的t不能直接取当前 ...
Python框架-Pyppeteer笔记
官方文档:https://miyakogi.github.io/pyppeteer/index.html?highlight=textcontentReference: API Reference — Pyppeteer 0.0.25 documentation
Pyppeteer RPC核心 API
执行js语句:page.evaluate
设置拦截:
12345678910111213141516171819202122232425262728293031# 和chrome浏览器不兼容await page.setRequestInterception(True)# 响应self.page.on('response', lambda res: asyncio.ensure_future(self.intercept_response(res))) # 请求(必须返回continue,否则请求全被拦截)self.page.on('request', lambda req: asyncio.ensure_future(self.intercep ...
Python框架-Selenium笔记
官方文档:https://selenium-python.readthedocs.io/中文文档:https://python-selenium-zh.readthedocs.io/zh_CN/latest/
Options 初始化配置(https://zhuanlan.zhihu.com/p/60852696)12345678910111213141516171819202122232425262728293031323334from selenium import webdriverfrom selenium.webdriver.chrome.options import Optionsoptions = Options()# 添加UAoptions.add_argument('user-agent="MQQBrowser/26 Mozilla/5.0"')# 窗口大小options.add_argument('window-size=1920x1080') # 无头浏览器options.add_argument(&quo ...
浏览器虚拟化Browserless入门指南
注意使用V1版本文档V1:https://docs.browserless.io/v1
Docker hub地址:https://hub.docker.com/u/browserless
Github: https://github.com/browserless/chrome
Docker命令
1docker pull browserless/chrome:1-chrome-stable
123docker run -e "MAX_CONCURRENT_SESSIONS=10" -e "ENABLE_DEBUGGER=false" -p 8080:3000 --restart always -d --name browserless browserless/chrome:1-chrome-stabledocker run -e HTTP_PROXY="" -e HTTPS_PROXY="" -p 8888:3000 --restart always -d --name browserless_with ...
web逆向-字体反爬(二)
趁热打铁来写字体反爬的第二篇,首先是题目
网页上显示的不是常规的数字,源码里面也是一些汉字
虽然看上去很乱,但是仔细观察还是能发现一些规律,比如:长 对应 2,思对应 1
所以这里的解题思路,也是先找到这些汉字的映射表
还是像第一题那样,把网页里面的base64保存成本地的ttf文件,然后打开查看:
这里不再是像第一题的英文单词,而是 uni601D 这样形似 unicode 编码的,解码一下试试
12345In [10]: aOut[10]: '\\u601D'In [11]: a.encode("latin-1").decode("unicode_escape")Out[11]: '思'
unicode_escape 是一种编码集,类似 utf-8,这种编码集直接将unicode内存编码存储进文件。
参考:https://blog.csdn.net/qq_40728667/article/details/122282693
各个编码单字节的外围:ASCII(0-127), LATIN1(0-2 ...
Python编程-各种加密方式总结
MD5 | SHA1 | SHA2561234import hashlibdef get_md5(data: bytes) -> str: return hashlib.md5(data).hexdigest()
RSA12345678910111213from Crypto.Cipher import PKCS1_v1_5from Crypto.PublicKey import RSAdef rsa_encrypt(text: str, pub_key: str) -> str: key = f"""-----BEGIN RSA PRIVATE KEY-----{pub_key}-----END RSA PRIVATE KEY-----""" rsakey = RSA.importKey(key) cipher = PKCS1_v1_5.new(rsakey) cipher_text = cipher.encrypt(text.encode()) return ...
Python编程技巧(三)
时间戳10位(秒级)1round(time.time())
13(毫秒级)1round(time.time() * 10 ** 3)
格式化输出12In [24]: time.strftime('%Y-%m-%d %H:%M:%S')Out[24]: '2022-06-12 22:16:59'
解析字符串12345In [34]: time.strptime('2022-06-13', '%Y-%m-%d')Out[34]: time.struct_time(tm_year=2022, tm_mon=6, tm_mday=13, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=164, tm_isdst=-1)In [35]: time.strptime("30 Nov 00", "%d %b %y")Out[35]: time.struct_time(tm_year=2000, tm_mon=11, tm_m ...
web逆向-字体反爬(一)
题目地址:http://www.glidedsky.com/level/crawler-font-puzzle-1
写一下之前处理过的两个字体反爬实战,也是很常见的一种反爬类型,这是第一篇
先来看一下题目
源码拿到的数字,和实际显示在网页的数字,明显不一样的
注意到两个现象
每一次刷新,源码中的数字就跟着变动,说明每请求一次页面,就使用了新的ttf字体文件
数字看起来无序,其实是有映射关系的,比如 122 变成了 277,226 变成了 773
所以这里的解题思路就是,解析ttf文件,得到数字之间的映射关系,然后结合网页源码提取到的数字,就能获取真实的数字了
作者已经提示,ttf文件内嵌在源码的base64中
复制那一大串字符,进行解码,然后保存成 ttf文件:
1234content = base64.b64decode(b64_str)with open("page-1.ttf", "wb") as f: f.write(content)
使用专门的字体查看工具打开文件,这里我使用的是 FontCreator 9.1
通过比对网 ...
Python编程技巧(二)
pip 笔记pip 和pip3 的区别
如果系统中同时安装了Python2和Python3,则pip默认给Python2用,pip3指定给Python3用
若只存在一个python版本,可以认为在用系统中pip和pip3命令都是相同的
更新依赖 pip3 install cloudscraper --upgrade 或者 -U
列出所有依赖 pip3 list
指定国内源
临时,或在requirements.txt开头加一行
1-i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn
永久
在pip.ini文件配置
1234[global]index-url = https://pypi.doubanio.com/simple/[install]trusted-host = pypi.doubanio.com
pip全局配置
1pip config set global.index-url https://pypi.tuna.tsinghua ...