逆向效率提升工具与方法汇总(持续更新...)

工具

油猴插件

油猴插件,可以把它理解为一个脚本,相当于给浏览器添加一些新功能。在逆向时我一般会用它来hook逆向参数位置,大家可以直接在浏览器应用商城搜索下载,或者进入官网下载,具体使用文档可以参考此文章
最强浏览器插件:油猴脚本的安装及使用教程
在这里插入图片描述

SwitchyOmega

SwitchyOmega是一款在Google Chrome 浏览器上的一个代理扩展程序,可以轻松快捷地管理和切换多个代理设置。在逆向时我一般会通过它来设置浏览器的代理,这样就不需要对本机设置代理,而且通过它也能方便与Fiddler联动下载链接
在这里插入图片描述

Reres

reres是一款Chrome插件,当碰到想替换的js、css、html时想要替换,这个时候就可以使用reres来进行解决。如果只需要hook参数或者cookie生成位置啥的,我们可以直接使用油猴插件快速实现,但是如果我们需要将网站的文件替换成本地文件,那这个插件能快速实现。下载链接
它支持正则匹配网址链接,注意本地文件指定需要file:///开头
在这里插入图片描述

Fiddler插件编程猫

编程猫插件是针对Fiddler开发的一款插件,它提供了js调试工具、注入hook和内存漫游等功能,能有效提高逆向效率。下载链接

奇淫技巧

selenium

Options常用参数

options.add_argument('--headless')                     # 开启无界面模式
options.add_argument("--disable-gpu")                  # 禁用gpu
options.add_argument('--user-agent=Mozilla/5.0 HAHA')  # 配置对象添加替换User-Agent的命令
options.add_argument('--window-size=1366,768')         # 设置浏览器分辨率(窗口大小)
options.add_argument('--start-maximized')              # 最大化运行(全屏窗口),不设置,取元素会报错
options.add_argument('--disable-infobars')             # 禁用浏览器正在被自动化程序控制的提示
options.add_argument('--incognito')                    # 隐身模式(无痕模式)
options.add_argument('--disable-javascript')           # 禁用javascript
options.add_argument(f"--proxy-server=http://ip:port")  # 使用代理
options.add_argument('blink-settings=imagesEnabled=false')  # 不加载图片, 提升速度
# 其它
--user-data-dir=[PATH]” 指定用户文件夹User Data路径,可以把书签这样的用户数据保存在系统分区以外的分区。
--disk-cache-dir=[PATH]“ 指定缓存Cache路径
--disk-cache-size= 指定Cache大小,单位Byte
--first run 重置到初始状态,第一次运行
--incognito 隐身模式启动
--disable-javascript 禁用Javascript
--omnibox-popup-count="num" 将地址栏弹出的提示菜单数量改为num个。我都改为15个了。
--user-agent="xxxxxxxx" 修改HTTP请求头部的Agent字符串,可以通过about:version页面查看修改效果
--disable-plugins 禁止加载所有插件,可以增加速度。可以通过about:plugins页面查看效果
--disable-javascript 禁用JavaScript,如果觉得速度慢在加上这个
--disable-java 禁用java
--start-maximized 启动就最大化
--no-sandbox 取消沙盒模式
--single-process 单进程运行
--process-per-tab 每个标签使用单独进程
--process-per-site 每个站点使用单独进程
--in-process-plugins 插件不启用单独进程
--disable-popup-blocking 禁用弹出拦截
--disable-plugins 禁用插件
--disable-images 禁用图像
--incognito 启动进入隐身模式
--allow-outdated-plugins	不停用过期的插件。
--disable-accelerated-2d-canvas	停用 GPU 加速二维画布。
--disable-accelerated-video	停用 GPU 加速视频。
--disable-dart	停用 Dart。
--disable-desktop-notifications	禁用桌面通知,在 Windows 中桌面通知默认是启用的。
--disable-extensions	禁用拓展。
--disable-file-system	停用 FileSystem API
--disable-java	停用 Java。
--disable-local-storage	禁用 LocalStorage。
--proxy-server	使用给定的代理服务器,这个参数只对 http 和 https 有效。
--user-agent	使用给定的 User-Agent 字符串。

防检测

将浏览器navigator.webdriver重置为False
chrome.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
  "source": """
    Object.defineProperty(navigator, 'webdriver', {
      get: () => false
    })
  """
})
stealth.min.js解决常见的指纹检测

下载链接

with open('stealth.min.js') as f:
    js = f.read()

driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
    "source": js
})
浏览器worker完美解决检测

创建有端口的浏览器
chrome.exe --remote-debugging-port=9222 --user-data-dir=“D:\chrometemp”
使用selenium控制该端口浏览器

options=webdriver.ChromeOptions()
options.debugger_address='127.0.0.1:9222'
driver=webdriver.Chrome(options=options)

SSLError OR JA3

最近遇到一个网站,用scrapy和request请求一直报SSLError,用postman可以正常请求,折腾了好久也没定位到问题所在,网上资料基本都试过,verify,headers,urllib3不报错,https改成http都不行,可能降低版本可以(项目原因不敢降低版本)
仔细思考一下,风控能够做到这一步,且有SSLError,大概率是ja3检测,后面使用Pyhttpx库能正常拿到数据

三方库使用具体可以参考蔡老板这篇博客
好库推荐|两个解决ja3检测的Python库,强烈推荐

在这里插入图片描述

小试牛刀

chrome开发者工具设置中文

打开开发者模式,点击右侧设置按钮
在这里插入图片描述
偏好设置中找到语言下拉项即可
在这里插入图片描述

调试代码如何友好格式化

偏好设置中把这四个勾上即可
在这里插入图片描述

采集小难题

scrapy禁用SSL证书验证

custom_settings = {
   'DOWNLOADER_CLIENTCONTEXTFACTORY' : 'scrapy.core.downloader.contextfactory.ScrapyClientContextFactory',
   'DOWNLOADER_CLIENTCONTEXTFACTORY_CLASS' : 'scrapy.core.downloader.contextfactory.ScrapyClientContextFactory',
   'DOWNLOADER_CLIENTCONTEXTFACTORY_KWARGS' : {'ssl_version': ssl.PROTOCOL_TLSv1, }
}

scrapy修改ja3指纹算法

这里只简单介绍,更详细更具体的方案可以参考这篇文章

突破tls校验常用方法(博主:Cocktail_py)

# 1. 在配置文件中使用
DOWNLOADER_CLIENT_TLS_CIPHERS = 'RSA+AES:RSA+3DES:RSA+AESGCM:ECDH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:ECDH+HIGH:DH+HIGH:DH+3DES:RSA+HIGH:DH+AES:ECDH+3DES:!aNULL:!eNULL:!MD5'
# 2. 在爬虫文件中使用
custom_settings = {
	'DOWNLOADER_CLIENT_TLS_CIPHERS': 'RSA+AES:RSA+3DES:RSA+AESGCM:ECDH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:ECDH+HIGH:DH+HIGH:DH+3DES:RSA+HIGH:DH+AES:ECDH+3DES:!aNULL:!eNULL:!MD5',
}
# 注意,指纹算法不同网站可能检测不一样,比如我遇到一个用上面的指纹就不行,还是用下面的才行
custom_settings = {
    'DOWNLOADER_CLIENT_TLS_CIPHERS': 'DH+AES:RSA+AES',
}

execjs Cannot find module ‘xxx’

cwd指定node_modules目录位置

with open(js_path, 'r', encoding='utf-8') as fr:
    str_data = fr.read()
self.js_code = execjs.compile(str_data, cwd=os.path.join(os.path.join(getRootDir(), 'nodejs'), 'node_modules'))

html乱码样例解码

样例:%3Cli%20class%3D%22active%22%3E%0D%0A%3Ca%20href%3D%22
这种样例包含url编码的链接、html标签和一些unicode转义字符(实际上是UTF-8编码的Unicode字符,但在HTML中以%u的形式出现,需要进行两次转码操作

import re
from urllib.parse import unquote


def decode_unicode_escape(match):
    hex_str = match.group(1)
    return chr(int(hex_str, 16))


html_fragment = "样例文本"
html_decoded = re.sub(r'%u([0-9A-Fa-f]{4})', decode_unicode_escape, html_fragment)
print(unquote(html_decoded))

字符串进行GBK编码后保留原样转成字符串

原字符串:slavename=招标文件.rar
目标字符串:slavename=%D5%D0%B1%EA%CE%C4%BC%FE.rar
它是GBK编码,字符串转GBK编码只需要encode('gbk')即可,但是拿到的是bytes类型,如果使用decode转成字符串得到的不是想要的目标结果
实现代码:

import urllib.parse
text = 'slavename=招标文件.rar'
enc_text = text.encode('gbk')
url_encoded_str = urllib.parse.quote_from_bytes(enc_text ).replace('%3D', '=').replace('%26', '&')
posted @ 2023-05-07 15:18  七夜魔手  阅读(7)  评论(0编辑  收藏  举报  来源