1.目标
实现x64dbg脚本语法高亮
实现x64dbg脚本命令提示功能
工程文件
链接:https://pan.baidu.com/s/18VoiN-bBVZsl6tMdeecxQw
提取码:dman
2.开发原理
编译原理中的词法分析,语法分析,语法制导翻译
3.使用工具
Git git版本控制工具
Node.js nmp包下载配置工具
Visual Studio Code - Code Editing. Redefined vscode编辑器
IntelliJ IDEA – the Leading Java and Kotlin IDE (jetbrains.com) 使用java代码爬取官网数据
使用npm下载以下三个工具
npm install -g yo generator-code 用于vs插件开发
npm install -g yo 用于vs环境配置
npm install vsce 用于打包发布
4.环境配置
在cmd命令行中输入yo code
选择New Language Support
在URL or file to import, or none for new:按空格(不导入外部语法文件)
其他输入内容都输入dbg即可
5.分析实现完成高亮和提示插件需要修改vscode插件文件中的内容
snippets 文件夹(如果不存在则自己创建该文件夹),配置dbg.code-snippets 用于实现代码提示功能
{
"inc": {
"prefix": ["inc"],
"body": [
"inc arg1",
"arg1 Destination."
],
"description": "功能:Increase a value."
},
"dec": {
"prefix": ["dec"],
"body": [
"dec arg1",
"arg1 Destination."
],
"description": "功能:Decrease a value."
}
}
关键字解释
"dec":表示描述信息
"prefix":表示搜索的索引,如果输入de 则会自动提示dec
"body":表示提示内容
重点是设置"prefix"参数用于所以X64dbg所有的关键字
//"prefix" 实现方式为NFA转DFA求闭包过程算法
syntaxes 文件夹下的dbg.tmLanguage.json 语法高亮配置文件.用于高亮提示
{
"$schema": "http://json-schema.org/draft-04/schema",
"name": "dbg",
"patterns": [
{
"include": "#comment"
},
{
"include": "#labels"
}
],
"repository": {
"comment": {
"patterns": [
{
"match": "(//).*$\\n?",
"name": "comment.line.double-slash.js",
"captures": {
"1": {
"name": "punctuation.definition.comment.json"
}
}
}
]
},
"labels": {
"patterns": [
{
"name": "support.class.dbg",
"match": "[a-zA-Z][a-zA-Z]*:"
}
]
}
},
"scopeName": "dbg"
}
关键字描述
patterns :描述匹配规则(作为规则入口)
repository :子规则入口
"include": "#comment" 表示包含子规则comment
"match" :表示正则表达式匹配内容
"name": "comment.line.double-slash.js", 用于标记对应的颜色
上述文件转化成对应的文法是
入口 -> comment | labels
comment ->"(//).*$\\n?"
labels -> "[a-zA-Z][a-zA-Z]*:"
功能可以高亮注释和标签
language-configuration.json 配置文件用于描述用于缩进,括号匹配以及收缩等
入口文件package.json 用于配置程序入口,以及语法文件的关联关系
"contributes": {
"languages": [{
"id": "abc",
"aliases": ["abc", "abc"],
"extensions": [".txt"],
"configuration": "./language-configuration.json"
}],
"grammars": [{
"language": "abc",
"scopeName": "source.abc",
"path": "./syntaxes/abc.tmLanguage.json"
}],
"snippets": [
{
"language": "abc",
"path": "snippets/abc.code-snippets"
}
]
}
分析X64dbg语言,实现语法高亮json文件 具体参照给定的工程文件
参考官方文档
Debug Control — x64dbg documentation
分析词法
包含各种类型的关键字
命令控制关键字: InitDebug/initdbg/init 等
寄存器,标记,等特定命令关键字 CBX
数字: 10进制 .123 16进制7B
变量: $myvar
字符串 格式化特殊类型" 字符 = {ascii[;length]@address}"
表达式,功能表达式等,:(1+2)
分析语法
入口-> 命令关键字 | 参数
命令关键字 -> 参数 参数....
参数 -> 标记 |变量 |表达式 等
爬取X64dbg 官方文档特定数据构建代码提示功能
1.使用工具idea ,实现代码java ,使用包jsoup,用于解析和爬取X64dbg内容数据
分析爬取的数据
分析网页中的内容:
需要提取出对应的命令例如SetBPX 以及对应参数arg ,以及对应参数的描述,并将对应数据翻译成
特定结构.如下图所示
实现需要解决3个问题
1.如何判定网页中获取的数据是需要,比如说需要的是参数的描述,则判定方式是什么
2.页面和页面的跳转方式是什么?比如SetBpx 怎么跳转到DeleteBPX?
3.怎么将获取的网页内容翻译成json格式?
按F12打开网页源代码
发现toctree-12 current 能获得对应数据,理由是在这个页面中具有唯一性
更具href中链接进行跳转
翻译:
命令翻译成标记和prefix
参数翻译成body
命令功能翻译成描述
具体爬取代码参考工程文件
运行对应工程
打开对应工程使用npm安装对应工程的包,并将包进行编译,运行vscode然后按F5即可运行
install
npm run compile
code
调试工程
参考文档
官方插件参考网站
https://code.visualstudio.com/api/get-started/your-first-extension
代码片段参考网站 abc.code-snippets 用于代码生成
https://code.visualstudio.com/docs/editor/userdefinedsnippets
TextMate语言参考网站 abc.tmLanguage.json 用于语法高亮
https://macromates.com/manual/en/language_grammars
.