Python编程-关于多线程和多进程
线程池12345678910111213141516171819202122from concurrent.futures import ThreadPoolExecutordef main(url): passPool = ThreadPoolExecutor(max_workers=10)list(Pool.map(main, links))# 传入多个参数def add(x, y): return x + ynums = [(1, 2), (3, 4), (5, 6)]with ThreadPoolExecutor(max_workers=3) as executor: results = executor.map(add, *zip(*nums))# 传参为空import threadingfor i in range(10): threading.Thread(target=main).start()
进程池1234567891011121314import multiprocessing as mppool = mp.Pool(processes=10) ...
FastAPI和aiohttp
FastAPI基本使用12345678910111213141516171819202122232425262728293031323334353637383940414243444546from fastapi import FastAPI, Form, Fileimport uvicornapp = FastAPI()# 根路径@app.get("/")async def root(): return "Hello World# 子路径@app.get("/items/{item_id}")async def read_item(item_id: int): return fake_items_db[item_id]# 设置查询参数,GET /items?skip=1&limit=2@app.get("/items")async def read_item(skip:int = 0, limit:int = 10): return fake_items_db[skip:skip + ...
web逆向-谷歌翻译旧接口
把谷歌的接口逆向重新整理一下,方便需要的时候可以用到
有一个第三方的依赖 googletrans,但是已经两年没更新,用不了了,所以还是自己逆向比较实在
首先是抓包
通过多次对比,发现只需确认 f.sid _reqid 两个参数,其他都是固定的
那就来看看这两个是怎么来的吧,无痕模式和fiddler开起来
首先是 f.sid 就在第一次访问 https://translate.google.cn/ 时候返回的html里面
f.sid 只需要一次请求就行,后面都是不会变动的,生成代码如下:
12345def get_sid(): url = "https://translate.google.cn/" resp = requests.get(url) sid = re.search(r'"FdrFJe":"(.+?)",', resp.text).group(1) return sid
reqid就不一样了,每一次请求都是不一样的,这就需要逆向分析它的生成逻辑
先打断点调 ...
东方财富的一些脚本整理
0701657335e84f0c327f6bba26337f2ad6ca4ba8e3335a3698f9be1e4802627da5a72eacf32b164bf91c8dff0cd4c49a0a29e5c9e3842f458d03f514edd8ef28ffcce122b4fdb603c1b093c2ed11d98e4b1b70d42bb80b0abaf1b4ca050e2fb6637e5a72761ed0fb7e2ac7458e767d4112a1bce3c29b8d632a81748893ee8da4cf7a532c5555170775c0a1f15b93311c7e434e154055e77dbe259cab8f836e4cfe04bb2ab78c7974526d1fbf2b14f5ab20220a90f7471e337de4a23619c248642fc49391c87efb26074d9ec2ea77c3a301b5bbf326ada03a1ec5e9b1defde27eb0c1bfbc5ba466b897575d0a2d188940bd2ddf074e75a629f ...
web逆向-公某部加速乐反爬
https://www.mps.gov.cn/n2254098/n4904352/index.html
直接访问的话,返回的是一段js代码,主要是对cookie进行赋值
直接复制出来,到控制台执行
执行的结果先不管,我们这次逆向的目标,主要是cookies中两个值的生成
其中,__jsluid_s 是第一次请求的时候服务器返回的
那 __jsl_clearance_s 会不会是第一次返回的那段js执行后的结果呢?对比一下:
12345# 执行结果__jsl_clearance_s=1654493484.607|-1|eU3CZr0IIIZOWUJfz3vNntOeewo%3D# cookies__jsl_clearance_s=1654493484.979|0|70p4p0lk5rF59kkzj6oslUuf8Qk%3D
看来不是,如果那么简单我也不会写这篇博客了 😬
还是看一下抓包,第二次请求的时候也返回了一段js
注意到开头是一段大数组,很明显的ob混淆的特诊,先解一下混淆:
复制结果放到浏览器执行,跳到代码最后:
可以确定,就是最后的go函数,对cookie进行 ...
激活和破解
0701657335e84f0c327f6bba26337f2ad6ca4ba8e3335a3698f9be1e4802627d713488decb93c54b9a8407de3c232f27db93ddb34ec2c54ab8d7a69d5629f9f4758697157de5149b7d4bd85502ba6c7c3c809a9e95d8fc328e966329c8c9eb8b0aad6786cc9aaec37a84bc6f6c3d739c896926604f770379b0ad30b1959d1838937e0cab467c55ceac9dae10de076212bb6813ab4d9324a225541a9359c82ef21ed9ad0aab7687f4a8ef6209d94275b8f6fd1d745eef7c057614aff0ae8085d176fc395a451069deabe2fb8aa7c3070093c6c6745a95daba56609317974a79a26288a213a6288f75d1269f5bc8c21ff53ea92fba497346e0b ...
web逆向-cloudflare 5秒盾绕过研究
cloudscraper(Released: Mar 15, 2022)PyPi文档
12345import cloudscraperurl = "https://www.curseforge.com/"scraper = cloudscraper.create_scraper(interpreter="nodejs")print(scraper.get(url).text)
cloudflare-scrape(23 Feb 2020)版本太老,弃用 https://github.com/Anorov/cloudflare-scrape
Python编程-魔术方法汇总
iter()用来生成迭代器,搭配 next() 使用
1234567891011121314def dtime_iterator(): dtime_lst = [1, 2, 3] return iter(dtime_lst)it = dtime_iterator()In [2]: next(it)Out[2]: 1In [3]: next(it)Out[3]: 2In [4]: next(it)Out[4]: 3
__call__
调用 function abc(x1, x2 ...) 其实就相当于 type(abc).\__call__(abc, x1, x2 ...)
123456class Person: def __call__(self, other): return f'Hi {other}'In [13]: Person()("cxs")Out[13]: 'Hi cxs'
_str_ 和 _repr_1234567891011121314class C ...
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="latin-1")# 行数max_lines = df.shape[0]# 第一行数据first_line_data = df.loc[0].values
datetime当前时间1234 ...