web逆向-猿人学第一题-js混淆、源码乱码
猿人学 第一关:js 混淆 - 源码乱码之前第一次做这道题的时候,卡了一晚上,现在重新来分析看看,首先是题目:
先打开开发者工具,看看数据来源,这里有作者设置了 setInterval 的反调试,每隔一段时间就会自动下断点,我们直接在 debugger 那一行 never pause here
然后点击 resume,以后就会自动跳过这一行了,来看一下数据接口
可以看到数据是以json的形式直接返回的,但这里有个 m参数,不确定是怎么来的
1m: c204206e7e8953fbba7c33835c5478a9丨1654198904
长度是32,看上去好像是 md5 | 时间戳 的形式,下断点分析一波:
追栈到这里就差不多了,但源码稍微经过了混淆,不太容易看,还原出部分比较重要的源码:
12345window["url"] = "/api/" + "match" + "/1", request = function () { var _0x2268f9 = Date["p ...
Python编程-常见库的使用
psutil 进程Python常用库之psutil使用指南 - 知乎
12345678910import os, psutifor proc in psutil.process_iter(): proc.name proc.pid # 终止进程os.system("taskkill /f /im chrome.exe") # windowsos.popen('taskkill.exe /pid:8888') # pidos.system(f"kill -9 {proc.pid}") # linux
pandas读取csv文件1234567import pandas as pddf = pd.read_csv("安卓.csv", encoding="GBK") # 含有中文,没有就默认# 行数max_lines = df.shape[0]# 第一行数据first_line_data = df.loc[0].values
dateti ...
关于数据库的一些笔记
Navicat复制表结构从原表导出sql文件
目标数据库运行sql
快捷筛选操作
入库时间自动生成
查询服务器命令12show processlist;kill id;
复制迁移表
MongoDBmotor的使用 - 文档
Motor 是一个异步实现的 MongoDB 存储库,Motor 与 Pymongo 的配置基本类似,详见
12345678910111213141516171819202122232425262728293031323334353637383940import asynciofrom motor import motor_asyncio'''创建连接'''mongo_con = motor_asyncio.AsyncIOMotorClient() # 本地mongo_url = "mongodb://spiderManager:@10.82.193.194:30000/admin"mongo_con = motor_asyncio.AsyncIOMotorClient( ...
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
1docker run --network=host -e "MAX_CONCURRENT_SESSIONS=10" -e "ENABLE_DEBUGGER=false" -p 8080:3000 --restart always -d --name browserless browserless/chrome:1-chrome-stable
使用代理 https://docs.browserless.io/v1/libraries/playwright-python#third-party-proxies
Playwright1browser = p ...
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 ...