“Stop!Yak MITM Open The Door!”
新的HTTP请求
过滤器
检测请求方法
内容规则
然后,请求会进入内容规则模块的处理,如下图所示:
方法:hijackRequest
// hijackHTTPRequest 每一个新的 HTTPRequest 将会被这个 HOOK 劫持,
// 劫持后通过 forward(modified) 来把修改后的请求覆盖
// 如果需要屏蔽该数据包,通过 drop() 来屏蔽
hijackHTTPRequest = func(isHttps, url, req, forward /*func(modifiedRequest []byte)*/, drop /*func()*/) {
}
Yakit前端
方法:beforeRequest
// beforeRequest 允许发送数据包前再做一次处理,定义为 func(origin []byte) []byte
beforeRequest = func(req) {
}
全局配置-禁用IP/禁用域名
发起请求,接收响应
再次进入过滤器
方法:hijackResponse/hijackResponseEX
// hijackHTTPResponse 每一个新的 HTTPResponse 将会被这个 HOOK 劫持,劫持后通过 forward(modified) 来把修改后的请求覆盖,如果需要屏蔽该数据包,通过 drop() 来屏蔽
hijackHTTPResponse = func(isHttps, url, rsp, forward, drop) {
}
hijackHTTPResponseEx = func(isHttps, url, req, rsp, forward, drop) {
}
第二次:内容规则
可选:再次进入Yakit前端
如果首次进入Yakit前端时设置了劫持响应,那么响应会再次进入Yakit前端。Yakit前端有三个模式,除了手动劫持以外,剩下的两个模式都会将响应自动放行(跳过此流程,继续后续流程)。对于手动劫持的响应,用户可以手动为其添加颜色或标签,修改响应,提交数据或丢弃数据,丢弃数据后不会再进入后续的流程。
方法:afterRequest
// 在回复给浏览器之前的hook
afterRequest = func(ishttps, oreq/*原始请求*/ ,req/*hiajck修改之后的请求*/ ,orsp/*原始响应*/ ,rsp/*hijack修改后的响应*/){
}
创建流量
第三次:内容规则
方法:hijackSaveHTTPFlow
hijackSaveHTTPFlow = func(flow /* *yakit.HTTPFlow */, modify /* func(modified *yakit.HTTPFlow) */, drop/* func() */) {
}
流量进入数据库
流量在进入数据库之前会等待前序的内容规则/hijackSaveHTTPFlow最多300毫秒,之后若流程完成或超时,都会将非丢弃的流量存储进数据库中。
END
YAK官方资源
Yak 语言官方教程:
https://yaklang.com/docs/intro/
Yakit 视频教程:
https://space.bilibili.com/437503777
Github下载地址:
https://github.com/yaklang/yakit
Yakit官网下载地址:
https://yaklang.com/
Yakit安装文档:
https://yaklang.com/products/download_and_install
Yakit使用文档:
https://yaklang.com/products/intro/
常见问题速查:
https://yaklang.com/products/FAQ