快速开始 • 官方文档 • 问题反馈 • 接口手册 • 贡献代码 • 加入社区 • 项目架构
CDSL:Cybersecurity Domain Specific Language,全称网络安全领域编程语言。
Yaklang 团队综合“领域限定语言”的思想,构建了CDSL的概念,并以此为核心构建了Yak(又称Yaklang)语言来构建基础设施和语言生态。
Yak 是一门针对网络安全领域研发的易书写,易分发的高级计算机编程语言。Yak具备强类型、动态类型的经典类型特征,兼具编译字节码和解释执行的运行时特征。
Yak语言的运行时环境只依赖于YakVM,可以实现“一次编写,处处运行”的特性,只要有YakVM部署的环境,都可以快速执行Yak语言程序。
Yak语言起初只作为一个“嵌入式语言”在宿主程序中存在,后在电子科技大学网络空间安全学院学术指导下,由 Yaklang.io 研发团队进行长达两年的迭代与改造,实现了YakVM虚拟机让语言可以脱离“宿主语言”独立运行,并与2023年完全开源。 支持目前主流操作系统:macOS,Linux,Windows。
基于CDSL概念构建的网络安全领域编程语言Yak,具备了几乎DSL所有的优势,它被设计为针对安全能力研发领域的专用编程语言,实现了常见的大多数安全能力,可以让各种各样的安全能力彼此之间“互补,融合,进化”;提高安全从业人员的生产力。
CDSL在网络安全领域提供的能力具备很多优势:
-
简洁性:使用CDSL构建的安全产品更能实现业务和能力的分离,并且解决方案更加直观;
-
易用性:非专业的人员也可以使用CDSL构建安全产品,而避免安全产品工程化中的信息差;
-
灵活性:CDSL一般被设计为单独使用和嵌入式使用均可,用户可以根据自己的需求去编写DSL脚本以实现特定的策略和检测规则,这往往更能把用户的思路展示出来,而不必受到冗杂知识的制约;
除此之外,作为一门专门为网络安全研发设计的语言,Yak语言除了满足一些基础的语言本身需要具备的特性之外,还具有很多特殊功能,可以帮助用户快速构建网络安全应用:
-
中间人劫持库函数
-
复杂端口扫描和服务指纹识别
-
网络安全领域的加解密库
-
支持中国商用密码体系:支持SM2椭圆曲线公钥密码算法,SM4分组密码算法,SM3密码杂凑算法等
Yakit (https://github.com/yaklang/yakit) 是 Yaklang.io 团队官方出品的开源 Yaklang IDE,它可以帮助你快速上手 Yaklang 语言。
同时 Yakit 也能将绝大部分安全工程师需要的核心功能图形化。他是免费的,你可以通过 下载安装 Yakit,来开始使用 Yaklang。
关于Yakit的更多内容可移步:Yakit官网文档查看
通过命令行来安装使用 Yaklang 请遵循:https://www.yaklang.com/ 或 https://www.yaklang.io/ 的指引,或直接执行
bash <(curl -sS -L http://oss.yaklang.io/install-latest-yak.sh)
powershell (new-object System.Net.WebClient).DownloadFile('https://yaklang.oss-cn-beijing.aliyuncs.com/yak/latest/yak_windows_amd64.exe','yak_windows_amd64.exe') && yak_windows_amd64.exe install && del /f yak_windows_amd64.exe
- 你可以在 Yaklang 或者Yakit 的 issues 中添加你想讨论的内容或者你想表达的东西,英文或中文均可,我们会尽快回复
- 国内用户可以添加运营 WeChat 加入群组
- 国际用户可以使用 Discord 加入社区
这是一个高级话题,在贡献你的代码之前,确保你对 Yaklang 整个项目结构有所了解。
在贡献代码时,如果你希望修改 Yaklang 或 YakVM 本身的核心语法部分,最好与研发团队取得联系。
如果您仅仅想要增加库的功能,或者修复一些库的 Bug,那么您可以直接提交 PR,当然 PR 中最好包含对应的单元测试,这很有助于提升我们的代码质量。
v1ll4n: Yak Project Maintainer.
本仓库代码版本使用 AGPL 开源协议,这是一个严格的开源协议,且具有传染性,如果您使用了本仓库的代码,那么您的代码也必须开源。
- 强制开源网络服务:要求提供网络服务的源代码必须开源。保证开源理念在网络环境下的实践。
- 其他条款与 GPL 相同:开源免费、开源修改、衍生开源等。
本项目开源仓库仅应该作为个人开源和学习使用。
本项目经由电子科技大学张小松(网络空间安全学院)教授学术指导。
- Alonzo Church, "A set of postulates for the foundation of logic", Annals of Mathematics, 33(2), 346-366, 1932.
- Dana Scott, Christopher Strachey, "Toward a mathematical semantics for computer languages", Proceedings of the Symposium on Computers and Automata, Microwave Research Institute Symposia Series Vol. 21, New York, 1971.
- Henk Barendregt, Wil Dekkers, Richard Statman, lambda Calculus with Types, Perspectives in Logic. Cambridge University Press, 2013.
- Braun, M., Buchwald, S., Hack, S., Leißa, R., Mallon, C., Zwinkau, A. (2013). Simple and Efficient Construction of Static Single Assignment Form. In: Jhala, R., De Bosschere, K. (eds) Compiler Construction. CC 2013. Lecture Notes in Computer Science, vol 7791. Springer, Berlin, Heidelberg.
- Terence Parr, "The Definitive ANTLR 4 Reference", Pragmatic Bookshelf, 2013.
- Terence Parr, "Simplifying Complex Networks Using Temporal Pattern Mining: The Case of AT&T's Observed Data Network", Dissertation, 1995.
- Terence Parr, Russell Quong, "ANTLR: A Predicated-LL(k) Parser Generator", Journal of Software Practice and Experience, July 1995.
- Google Ins, "Protocol Buffers", https://developers.google.com/protocol-buffers, 2020.
- Google Ins, "gRPC", https://grpc.io/, 2020.
- Microsoft Ins, "Monaco Editor", https://microsoft.github.io/monaco-editor/, 2020.