Skip to content
outlaws edited this page Jan 17, 2025 · 33 revisions

请先阅读下方注意事项

  • 项目采用Burp Montoya API 开发,Burp版本不低于 v2023.10.3.7
  • Release中对应版本的注意事项

安装后编辑器内注释乱码问题

  1. Burp 增加启动参数 -Dfile.encoding=utf-8
  2. 删除 work dir 后在 Burp 重新导入插件

hook方式显示不全

  • 缺少jython:请在Burp的Java environment(Settings -> Extensions)配置一个文件夹,并将 jython-standalone-xxx.jar 放在该文件夹。Download,并重新导入下插件

本地能运行的代码在插件中不能运行

python:使用 jython支持 python 代码的运行,和你本地环境有差异或存在兼容性问题

如果有必须使用本地环境的需求,请使用 http 的方案,它们会提供更具兼容性的跨语言方案

The result of using this request to execute the check expression is false...

表达式是用来判断一个请求是否需要被处理,如果出现该情况请检查表达式。注意 request.host 的 value 不需要带端口。

右键响应可以解密成功,但启动后的响应没有自动解密

右键请求找到解密按钮并点击,查看是否有报错

jython 的 hook 方式国密算法无法使用 or PKCS7 不支持

不要使用 orcale JDK/JRE 启动 Burp

ZeroPadding 不支持

改为ZeroBytePadding

我必须使用 jython 的方式,但项目内置的加解密算法不够用

有三种方式解决

  1. 直接修改本项目的源代码,自行打包

  2. 项目的加解密三方库是使用的bouncycastle,如果它本身支持,你可以尝试用 jython 改写

  3. 用 java 实现你需要的加解密算法,打成 jar 包后,放在Java environment(Settings -> Extensions)配置的文件夹内,就可以在 jython 的 hook 方式中引入其中的类

jython 的 hook 方式怎样联动 jsrpc、frida、cdp...

联动 jsrpc:可以看下 Catzilla 师傅的文章

https://xz.aliyun.com/t/15252

联动 frida...:其实和 jsrpc 类似,需要将这些工具的能力转换为 http 服务,然后在 hook 脚本中利用内置的 http 客户端去请求来联动,客户端可看下方代码

https://github.com/outlaws-bai/Galaxy/blob/main/src/main/java/org/m2sec/core/outer/HttpClient.java

联动 cdp:项目内置了 ws 客户端,可以看下方的具体实现摸索

https://github.com/outlaws-bai/Galaxy/blob/main/src/main/java/org/m2sec/core/outer/CdpClient.java

怎么区分 Query、Form、FormData

Query

GET /?id=1 HTTP/1.1
Host: www.baidu.com
Accept-Encoding: gzip, deflate, br
Accept: */*
Accept-Language: en-US;q=0.9,en;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.6533.100 Safari/537.36
Connection: close
Cache-Control: max-age=0


Form

POST / HTTP/1.1
Host: www.baidu.com
Accept-Encoding: gzip, deflate, br
Accept: */*
Accept-Language: en-US;q=0.9,en;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.6533.100 Safari/537.36
Connection: close
Cache-Control: max-age=0
Content-Type: application/x-www-form-urlencoded
Content-Length: 4

id=1

FormData

POST / HTTP/1.1
Host: www.baidu.com
Accept-Encoding: gzip, deflate, br
Accept: */*
Accept-Language: en-US;q=0.9,en;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.6533.100 Safari/537.36
Connection: close
Cache-Control: max-age=0
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary6vFUq2bgZwMqUgDb
Content-Length: 134

------WebKitFormBoundary6vFUq2bgZwMqUgDb
Content-Disposition: form-data; name="id"

1
------WebKitFormBoundary6vFUq2bgZwMqUgDb--

原有 java、js、graalpy、grpc 的 hook方式为什么没了

java 必须要求 burp 用 jdk 启动,并且很多对象转换的问题,淘汰是必然的

http 相对于 grpc 更易理解、简单、且局限性更少,故而淘汰 grpc

js 和 graalpy 是因为不同的跨语言方案最终都踩到了不同的坑,作者不想浪费太多的时间在这些上,因此仅保留了兼容性稍好的 jython 和更易理解的 http,这两种方式(js、graalpy)作为彩蛋保留在源码中,如果你认为这些比较好用,并且有做好踩坑的准备、更有思考的能力以及一点点剖析并解决问题的耐心,你可以修改 build.gradle -> optionalHooker 自行打包使用,但此类 issue 作者不解决

我想要使用 js or graalpy

jython/graalpy hooker 怎样载入三方包

python 的 hook 方式来源于 jython/graalpy 的跨语言支持,因此如果需要使用三方包,该三方包必须能通过 jython/graalpy 解释及运行,而 jython 只支持到 python 2.7,graalpy 支持 python3.11。但同时他们都有兼容性问题,并非所有三方包都可以导入

安装对应的 python 版本,创建虚拟环境,再用 pip 安装必要的三方包,在代码编辑器中将三方包所在的文件夹配置到 sys path,如 xxx/venv/lib/python2.7/site-packages

import sys
sys.path.append("xxx/venv/lib/python2.7/site-packages")

js hooker 怎样载入三方包

例如 crypto-js

  1. 保存 https://cdn.jsdelivr.net/npm/crypto-js@4.1.1/crypto-js.js 为 crypto-js.js文件

  2. 在 js 引擎中执行 load('xxx/crypto-js.js'); 即可加载该 js 文件,之后就可以使用其中的函数了

// 加载
load('xxx/crypto-js.js');              
// 测试 crypto-js 是否可以正常工作
var hash = CryptoJS.MD5("Message");
console.log(hash.toString()); // 4c2a8fe7eaf24721cc7a9f0175115bd4       

jython 中可使用的模块

import sys

for module in sys.builtin_module_names:
    print(module)

output

struct
jarray
_marshal
_bytecodetools
binascii
ucnhash
_sre
sys
cmath
itertools
jffi
operator
_py_compile
array
zipimport
_codecs
_hashlib
bz2
gc
posix
cPickle
synchronize
_random
_imp
errno
__builtin__
_csv
_json
_weakref
thread
exceptions
_ast
cStringIO
_jyio
_collections
_functools
_threading
_jythonlib
math
time
_locale