lz520520@深蓝攻防实验室
前言
插件化能够使一个工程的功用扩展更简单;代码的解耦,更易用维护,我们在很多工具中都能看到这个构造。同时插件化,也使得工程能够有更多人一同投入开发,不时去扩展更新工程的功用,也就是社区化开发。
像burpsuite中的插件使得该工具的功用被不时优化完善,大大进步我们的效率,像一些被动漏扫插件,考证码辨认插件,越权测试插件等等。这些插件都是由burp运用者开发而非官方,不同人在工作学习中会有不同的idea,而假如仅仅依托一个人或者一个小团队,可能是没那么多精神和想法去做到人人都能称手的工具,所以社区化很重要。
除此之外,像goby的poc、exp也是完成了插件化。而我看到的比拟多的插件化是应用在java项目中的,这个主要缘由是java强大的JVM,不需求重新编译主程序,即可动态加载class以及jar包,来完成功用扩展;而主程序只需求设计好插件的接口,插件开发者依据接口设计去完成特定功用就行了,这也是多态的表现。
参考一篇文章的解释
- 编译型言语就是需求运用编译器,在程序运转之前将代码编译成操作系统可以直接辨认的机器码文件。运转时,操作系统直接拉起该文件,在 CPU 中直接运转
- 解释型言语则是在代码运转之前,需求先拉起一个解释程序,运用这个程序在运转时就能够依据代码的逻辑执行
编译型言语的典型例子就是 汇编言语、C、C++、Objective-C、Go、Rust
等等。
解释型言语的典型例子就是 JavaScript、PHP、Shell、Python、Lua
等等。
至于 Java
,从 JVM 的角度,它是一个编译型言语,由于编译出来的二进制码能够直接在 JVM 上执行。但从 CPU 的角度,它仍然是一个解释型言语,由于 CPU 并不直接运转代码,而是间接地经过 JVM 解释 Java 二进制码从而完成逻辑运转。
所谓的 “脚本言语” 则是另外的一个概念,这普通指的是设计初衷就是用来开发一段小程序或者是小逻辑,然后运用预设的解释器解释这段代码并执行的程序言语。这是一个程序言语功用上的定义,理论上一切解释型言语都能够很便当的作为脚本言语,但是实践上我们并不会这么做,比方说 PHP
和 JS
就很少作为脚本言语运用。
能够看到,解释型言语天生合适作为脚本言语,由于它们本来就需求运用运转时来解释和运转代码。将运转时稍作改造或封装,就能够完成一个动态拉起脚本的功用。
那么如今就有一个问题,像编译型言语,该如何完成这种插件化呢,那就是将编译型言语变成脚本言语。
探究
由于我自身开发的一款工具是用基于go的,所以后续探究基于go的插件化。如上所言go也是一种编译型言语,而goby也是基于go开发的,所以我事前调研了goby是如何做的。
功用插件:主要是功用扩展,用js编写,相似chrome的插件方式。
exp插件:扩展破绽poc/exp,有两种计划,json格式以及go代码。 官方文档https://cn.gobies.org/exp.html#
而我的目的也是做exp/poc插件,所以着重看了这局部
搜索了关键词
\"GobyQuery\"
,其实和xray的yaml差不多,分为ScanSteps和ExploitSteps,需求填写一些参数,和xray的yaml差不多,这个还复杂些,估量是由于思索适用人群范围要更大些,所以需求更多信息填写。
go代码编写
关键词:*scanconfig.SingleScanConfig
这个会更灵敏应对复杂破绽,poc和exp对应如下签名,然后经过ExpManager.AddExploit添加,这个算是编译型言语里常用的一种注册方式。
func(exp *jsonvul.JsonVul, u *httpclient.FixUrl, ss *scanconfig.SingleScanConfig) bool func(expResult *jsonvul.ExploitResult, ss *scanconfig.SingleScanConfig) *jsonvul.ExploitResult
感谢您的来访,获取更多精彩文章请收藏本站。
![](https://www.gyzsq.com/wp-content/uploads/2022/07/9259adea4619.gif)
1 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
2 本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
3 本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
![头像](/wp-content/themes/zibll/img/avatar-default.png)