mirror of
https://github.com/gmh5225/awesome-game-security
synced 2026-06-21 13:56:22 +00:00
archive: add 5 repo prompt(s) [skip ci]
This commit is contained in:
@@ -0,0 +1,401 @@
|
||||
Project Path: arc_EliseZeroTwo_SEH-Helper_1pv2r8ov
|
||||
|
||||
Source Tree:
|
||||
|
||||
```txt
|
||||
arc_EliseZeroTwo_SEH-Helper_1pv2r8ov
|
||||
├── LICENSE
|
||||
├── README.md
|
||||
├── __init__.py
|
||||
├── images
|
||||
│ └── demo.png
|
||||
├── plugin.json
|
||||
└── requirements.txt
|
||||
|
||||
```
|
||||
|
||||
`LICENSE`:
|
||||
|
||||
```
|
||||
Copyright (c) 2022 EliseZeroTwo
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
```
|
||||
|
||||
`README.md`:
|
||||
|
||||
```md
|
||||
# SEH Helper
|
||||
|
||||
Author: **EliseZeroTwo**
|
||||
|
||||
_A Binary Ninja helper for exploring structured exception handlers in PEs_
|
||||
|
||||
## Side-Note
|
||||
|
||||
I dislike GitHub, this plugin is only here as Binary Ninja relies on GitHub for it's plugin manager which I feel is bad. GitHub requires an account for more and more basic features with every passing day. It will not be long until GitHub accounts will be merged with Microsoft account similarly to what is going on with Mojang accounts at the moment. I do not want to log in with a Microsoft account to clone a repo, nor do you. GitHub also accepts a large, but unknown, sum of money every year for their contract with the United States Immigration and Customs Enforcement agency which is even more reason to not buy into their closed-wall garden.
|
||||
|
||||
## Description:
|
||||
|
||||
This plugin provides a UI helper for exploring structured exception handlers in PEs. It provides a feature to view all entries, view the entry at the cursor, or follow the cursor displaying the entry at the cursor constantly.
|
||||
|
||||
## License
|
||||
|
||||
This plugin is released under an [MIT license](./license).
|
||||
|
||||

|
||||
|
||||
```
|
||||
|
||||
`__init__.py`:
|
||||
|
||||
```py
|
||||
from binaryninja import *
|
||||
from binaryninjaui import WidgetPane, UIActionHandler, UIActionHandler, UIAction, Menu, UIContext, UIContextNotification
|
||||
from pefile import ExceptionsDirEntryData, PE, PEFormatError
|
||||
from PySide6 import QtCore
|
||||
from PySide6.QtCore import Qt
|
||||
from PySide6.QtWidgets import QHBoxLayout, QVBoxLayout, QLabel, QWidget, QListWidget, QListWidgetItem, QTextEdit, QCheckBox, QPushButton
|
||||
from PySide6.QtGui import QMouseEvent
|
||||
|
||||
|
||||
class SEHListItem(QListWidgetItem):
|
||||
def __init__(self, base: int, entry: ExceptionsDirEntryData):
|
||||
self.entry = entry
|
||||
QListWidgetItem.__init__(self, hex(
|
||||
base + entry.struct.BeginAddress) + "-" + hex(base + entry.struct.EndAddress))
|
||||
|
||||
|
||||
class AddrLabel(QLabel):
|
||||
def __init__(self, address, bv: BinaryView, opt_text = None):
|
||||
self.bv = bv
|
||||
self.addr = address
|
||||
self.opt_text = opt_text
|
||||
if self.addr != None:
|
||||
if opt_text != None:
|
||||
QLabel.__init__(self, opt_text + hex(self.addr))
|
||||
else:
|
||||
QLabel.__init__(self, hex(self.addr))
|
||||
else:
|
||||
QLabel.__init__(self, "")
|
||||
|
||||
def mouseReleaseEvent(self, event: QMouseEvent) -> None:
|
||||
button = event.button()
|
||||
modifiers = event.modifiers()
|
||||
if modifiers == Qt.NoModifier and button == Qt.LeftButton:
|
||||
if self.addr != None:
|
||||
self.bv.offset = self.addr
|
||||
return super().mouseReleaseEvent(event)
|
||||
|
||||
def setAddr(self, addr):
|
||||
self.addr = addr
|
||||
if self.addr != None and self.opt_text != None:
|
||||
self.setText(self.opt_text + hex(self.addr))
|
||||
elif self.addr != None:
|
||||
self.setText(hex(self.addr))
|
||||
elif self.opt_text != None:
|
||||
self.setText(self.opt_text)
|
||||
else:
|
||||
self.clear()
|
||||
|
||||
def setOptText(self, text):
|
||||
self.opt_text = text
|
||||
self.setAddr(self.addr)
|
||||
|
||||
class SEHNotifications(UIContextNotification):
|
||||
def __init__(self, widget):
|
||||
UIContextNotification.__init__(self)
|
||||
self.widget = widget
|
||||
self.widget.destroyed.connect(self.destroyed)
|
||||
UIContext.registerNotification(self)
|
||||
|
||||
def destroyed(self):
|
||||
UIContext.unregisterNotification(self)
|
||||
|
||||
def OnAddressChange(self, context, frame, view, location):
|
||||
if self.widget.follow_cb.isChecked():
|
||||
self.widget.gotoAddr(location.getOffset())
|
||||
|
||||
|
||||
class SEHWidget(QWidget, UIContextNotification):
|
||||
def gotoAddr(self, addr):
|
||||
for x in self.dict:
|
||||
if x[0] <= addr < x[1]:
|
||||
row = self.dict[x]
|
||||
self.list.setCurrentRow(row)
|
||||
self.listItemClicked(self.list.item(row))
|
||||
return
|
||||
|
||||
self.list.clearSelection()
|
||||
self.listItemClicked(None)
|
||||
|
||||
def gotoButtonClicked(self):
|
||||
self.gotoAddr(self.bv.offset)
|
||||
|
||||
def __init__(self, bv: BinaryView, file: PE):
|
||||
QWidget.__init__(self)
|
||||
layout = QVBoxLayout()
|
||||
|
||||
header_layout = QHBoxLayout()
|
||||
|
||||
self.follow_cb = QCheckBox()
|
||||
follow_layout = QHBoxLayout()
|
||||
follow_layout.addWidget(QLabel("Follow Cursor: "))
|
||||
follow_layout.addWidget(self.follow_cb)
|
||||
|
||||
goto_button = QPushButton()
|
||||
goto_button.setText("Goto Cursor")
|
||||
goto_button.clicked.connect(self.gotoButtonClicked)
|
||||
|
||||
header_layout.addWidget(goto_button)
|
||||
header_layout.addStretch()
|
||||
header_layout.addLayout(follow_layout)
|
||||
|
||||
self.begin_addr = AddrLabel(None, bv)
|
||||
begin_addr_layout = QHBoxLayout()
|
||||
begin_addr_layout.addWidget(QLabel("Begin Address: "))
|
||||
begin_addr_layout.addWidget(self.begin_addr)
|
||||
|
||||
self.end_addr = AddrLabel(None, bv)
|
||||
end_addr_layout = QHBoxLayout()
|
||||
end_addr_layout.addWidget(QLabel("End Address: "))
|
||||
end_addr_layout.addWidget(self.end_addr)
|
||||
|
||||
self.unwind_addr = AddrLabel(None, bv)
|
||||
unwind_addr_layout = QHBoxLayout()
|
||||
unwind_addr_layout.addWidget(QLabel("Unwind Address: "))
|
||||
unwind_addr_layout.addWidget(self.unwind_addr)
|
||||
|
||||
unwind_layout = QVBoxLayout()
|
||||
self.unwind_version = QLabel("")
|
||||
self.unwind_prolog_size = AddrLabel(None, bv, "")
|
||||
self.unwind_code_count = QLabel("")
|
||||
self.unwind_frame_register = QLabel("")
|
||||
self.unwind_frame_offset = QLabel("")
|
||||
self.unwind_flags = QLabel("")
|
||||
self.unwind_codes = QTextEdit()
|
||||
self.unwind_codes.setReadOnly(True)
|
||||
self.unwind_exception_handler = AddrLabel(None, bv)
|
||||
|
||||
title = QLabel("Unwind Info")
|
||||
title.setAlignment(QtCore.Qt.AlignCenter)
|
||||
unwind_layout.addWidget(title)
|
||||
|
||||
unwind_verison_layout = QHBoxLayout()
|
||||
unwind_verison_layout.addWidget(QLabel("Version: "))
|
||||
unwind_verison_layout.addWidget(self.unwind_version)
|
||||
unwind_layout.addLayout(unwind_verison_layout)
|
||||
|
||||
unwind_flags_layout = QHBoxLayout()
|
||||
unwind_flags_layout.addWidget(QLabel("Flags: "))
|
||||
unwind_flags_layout.addWidget(self.unwind_flags)
|
||||
unwind_layout.addLayout(unwind_flags_layout)
|
||||
|
||||
unwind_exception_handler_layout = QHBoxLayout()
|
||||
unwind_exception_handler_layout.addWidget(
|
||||
QLabel("Exception Handler: "))
|
||||
unwind_exception_handler_layout.addWidget(
|
||||
self.unwind_exception_handler)
|
||||
unwind_layout.addLayout(unwind_exception_handler_layout)
|
||||
|
||||
unwind_prolog_size_layout = QHBoxLayout()
|
||||
unwind_prolog_size_layout.addWidget(QLabel("Prolog Size: "))
|
||||
unwind_prolog_size_layout.addWidget(self.unwind_prolog_size)
|
||||
unwind_layout.addLayout(unwind_prolog_size_layout)
|
||||
|
||||
unwind_code_count_layout = QHBoxLayout()
|
||||
unwind_code_count_layout.addWidget(QLabel("Code Count: "))
|
||||
unwind_code_count_layout.addWidget(self.unwind_code_count)
|
||||
unwind_layout.addLayout(unwind_code_count_layout)
|
||||
|
||||
unwind_frame_register_layout = QHBoxLayout()
|
||||
unwind_frame_register_layout.addWidget(QLabel("Frame Register: "))
|
||||
unwind_frame_register_layout.addWidget(self.unwind_frame_register)
|
||||
unwind_layout.addLayout(unwind_frame_register_layout)
|
||||
|
||||
unwind_frame_offset_layout = QHBoxLayout()
|
||||
unwind_frame_offset_layout.addWidget(QLabel("Frame Offset: "))
|
||||
unwind_frame_offset_layout.addWidget(self.unwind_frame_offset)
|
||||
unwind_layout.addLayout(unwind_frame_offset_layout)
|
||||
|
||||
unwind_codes_layout = QHBoxLayout()
|
||||
unwind_codes_layout.addWidget(QLabel("Codes: "))
|
||||
unwind_codes_layout.addWidget(self.unwind_codes)
|
||||
unwind_layout.addLayout(unwind_codes_layout)
|
||||
|
||||
self.dict = {}
|
||||
self.list = QListWidget()
|
||||
self.list.currentItemChanged.connect(self.listItemClicked)
|
||||
ctr = 0
|
||||
for entry in file.DIRECTORY_ENTRY_EXCEPTION:
|
||||
item = SEHListItem(file.OPTIONAL_HEADER.ImageBase, entry)
|
||||
self.list.addItem(item)
|
||||
self.dict[(file.OPTIONAL_HEADER.ImageBase + entry.struct.BeginAddress,
|
||||
file.OPTIONAL_HEADER.ImageBase + entry.struct.EndAddress)] = ctr
|
||||
ctr += 1
|
||||
|
||||
list_layout = QHBoxLayout()
|
||||
list_layout.addWidget(QLabel("Entries: "))
|
||||
list_layout.addWidget(self.list)
|
||||
|
||||
layout.addLayout(header_layout)
|
||||
layout.addLayout(list_layout)
|
||||
layout.addLayout(begin_addr_layout)
|
||||
layout.addLayout(end_addr_layout)
|
||||
layout.addLayout(unwind_addr_layout)
|
||||
layout.addLayout(unwind_layout)
|
||||
self.setLayout(layout)
|
||||
|
||||
self.file = file
|
||||
self.bv = bv
|
||||
|
||||
self.notifications = SEHNotifications(self)
|
||||
|
||||
def listItemClicked(self, clickedItem):
|
||||
if clickedItem == None:
|
||||
self.begin_addr.setAddr(None)
|
||||
self.end_addr.setAddr(None)
|
||||
self.unwind_addr.setAddr(None)
|
||||
self.unwind_version.clear()
|
||||
self.unwind_flags.clear()
|
||||
self.unwind_prolog_size.clear()
|
||||
self.unwind_code_count.clear()
|
||||
self.unwind_frame_register.clear()
|
||||
self.unwind_frame_offset.clear()
|
||||
self.unwind_codes.clear()
|
||||
self.unwind_exception_handler.clear()
|
||||
else:
|
||||
self.begin_addr.setAddr(
|
||||
self.file.OPTIONAL_HEADER.ImageBase + clickedItem.entry.struct.BeginAddress)
|
||||
self.end_addr.setAddr(
|
||||
self.file.OPTIONAL_HEADER.ImageBase + clickedItem.entry.struct.EndAddress)
|
||||
self.unwind_addr.setAddr(
|
||||
self.file.OPTIONAL_HEADER.ImageBase + clickedItem.entry.struct.UnwindData)
|
||||
|
||||
self.unwind_version.setText(str(clickedItem.entry.unwindinfo.Version))
|
||||
|
||||
|
||||
unwind_flags = []
|
||||
if clickedItem.entry.unwindinfo.Flags == 0:
|
||||
unwind_flags.append("UNW_FLAG_NHANDLER")
|
||||
if clickedItem.entry.unwindinfo.Flags & 1:
|
||||
unwind_flags.append("UNW_FLAG_EHANDLER")
|
||||
if clickedItem.entry.unwindinfo.Flags & 2:
|
||||
unwind_flags.append("UNW_FLAG_UHANDLER")
|
||||
if clickedItem.entry.unwindinfo.Flags & 4:
|
||||
unwind_flags.append("UNW_FLAG_CHAININFO")
|
||||
self.unwind_flags.setText(str(clickedItem.entry.unwindinfo.Flags) + " (" + (", ".join(unwind_flags)) + ")")
|
||||
|
||||
if clickedItem.entry.unwindinfo.SizeOfProlog != 0:
|
||||
self.unwind_prolog_size.setOptText(
|
||||
str(clickedItem.entry.unwindinfo.SizeOfProlog) + " bytes, ends at: ")
|
||||
self.unwind_prolog_size.setAddr(self.file.OPTIONAL_HEADER.ImageBase + clickedItem.entry.struct.BeginAddress + clickedItem.entry.unwindinfo.SizeOfProlog)
|
||||
else:
|
||||
self.unwind_prolog_size.setOptText(
|
||||
str(clickedItem.entry.unwindinfo.SizeOfProlog) + " bytes")
|
||||
self.unwind_prolog_size.setAddr(None)
|
||||
|
||||
self.unwind_code_count.setText(
|
||||
str(clickedItem.entry.unwindinfo.CountOfCodes))
|
||||
self.unwind_frame_register.setText(
|
||||
str(clickedItem.entry.unwindinfo.FrameRegister))
|
||||
self.unwind_frame_offset.setText(
|
||||
str(clickedItem.entry.unwindinfo.FrameOffset))
|
||||
codes = ""
|
||||
for x in clickedItem.entry.unwindinfo.UnwindCodes:
|
||||
codes += str(x) + '\n'
|
||||
self.unwind_codes.setText(codes)
|
||||
|
||||
if hasattr(clickedItem.entry.unwindinfo, 'ExceptionHandler'):
|
||||
self.unwind_exception_handler.setAddr(
|
||||
self.file.OPTIONAL_HEADER.ImageBase + clickedItem.entry.unwindinfo.ExceptionHandler)
|
||||
else:
|
||||
self.unwind_exception_handler.clear()
|
||||
|
||||
@staticmethod
|
||||
def createPane(context):
|
||||
if context.context and context.binaryView and context.binaryView.parent_view:
|
||||
data = context.binaryView.parent_view.read(
|
||||
0, context.binaryView.parent_view.length)
|
||||
widget = SEHWidget(context.binaryView, PE(data=data))
|
||||
pane = WidgetPane(widget, "Structured Exception Handlers")
|
||||
context.context.openPane(pane)
|
||||
|
||||
@staticmethod
|
||||
def canCreatePane(context):
|
||||
if context.context and context.binaryView and context.binaryView.parent_view:
|
||||
try:
|
||||
data = context.binaryView.parent_view.read(
|
||||
0, context.binaryView.parent_view.length)
|
||||
PE(data=data, fast_load=True)
|
||||
return True
|
||||
except PEFormatError:
|
||||
return False
|
||||
except:
|
||||
raise
|
||||
return False
|
||||
|
||||
|
||||
UIAction.registerAction("SEH Helper")
|
||||
UIActionHandler.globalActions().bindAction(
|
||||
"SEH Helper", UIAction(SEHWidget.createPane, SEHWidget.canCreatePane)
|
||||
)
|
||||
Menu.mainMenu("Tools").addAction("SEH Helper", "SEH Helper")
|
||||
|
||||
```
|
||||
|
||||
`plugin.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"pluginmetadataversion": 2,
|
||||
"name": "SEH Helper",
|
||||
"type": [
|
||||
"helper",
|
||||
"ui"
|
||||
],
|
||||
"api": [
|
||||
"python3"
|
||||
],
|
||||
"description": "Helper for exploring structured exception handlers in PEs",
|
||||
"longdescription": "",
|
||||
"license": {
|
||||
"name": "MIT",
|
||||
"text": "Copyright (c) 2022 EliseZeroTwo\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."
|
||||
},
|
||||
"platforms": [
|
||||
"Darwin",
|
||||
"Linux",
|
||||
"Windows"
|
||||
],
|
||||
"installinstructions": {
|
||||
"Darwin": "Install the following pip packages: pefile",
|
||||
"Linux": "Install the following pip packages: pefile",
|
||||
"Windows": "Install the following pip packages: pefile"
|
||||
},
|
||||
"dependencies": {
|
||||
"pip": [
|
||||
"pefile",
|
||||
"pyside6"
|
||||
],
|
||||
"apt": [],
|
||||
"installers": [],
|
||||
"other": []
|
||||
},
|
||||
"version": "0.2.3",
|
||||
"author": "EliseZeroTwo",
|
||||
"minimumbinaryninjaversion": 3164
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
`requirements.txt`:
|
||||
|
||||
```txt
|
||||
pefile
|
||||
|
||||
```
|
||||
@@ -0,0 +1,363 @@
|
||||
Project Path: arc_FuzzySecurity_BinaryNinja-Themes_sfhgioal
|
||||
|
||||
Source Tree:
|
||||
|
||||
```txt
|
||||
arc_FuzzySecurity_BinaryNinja-Themes_sfhgioal
|
||||
├── Images
|
||||
│ ├── castleton.png
|
||||
│ ├── light.png
|
||||
│ └── standard.png
|
||||
├── README.md
|
||||
├── gruvbox-b33f-castleton.bntheme
|
||||
├── gruvbox-b33f-light.bntheme
|
||||
└── gruvbox-b33f.bntheme
|
||||
|
||||
```
|
||||
|
||||
`README.md`:
|
||||
|
||||
```md
|
||||
# Binary Ninja Themes
|
||||
|
||||
I wanted to briefly share some themes I put together for `Binary Ninja`. This started because I like the `Gruvbox Material` community theme but I had some minor issues with it and I ended up making three themes:
|
||||
|
||||
- **gruvbox-b33f**: This one is mostly identical to `Gruvbox Material` but with some small tweaks.
|
||||
- **gruvbox-b33f-light**: Fully custom light theme.
|
||||
- **gruvbox-b33f-castleton**: Fully custom green theme.
|
||||
|
||||
To install these themes, simply download the bntheme files into the `themes/` subfolder of your [user folder](https://docs.binary.ninja/guide/index.html#user-folder) (you might need to make the folder).
|
||||
|
||||
## Demo
|
||||
|
||||
### gruvbox b33f
|
||||
|
||||

|
||||
|
||||
### gruvbox b33f light
|
||||
|
||||

|
||||
|
||||
### gruvbox b33f castleton
|
||||
|
||||

|
||||
```
|
||||
|
||||
`gruvbox-b33f-castleton.bntheme`:
|
||||
|
||||
```bntheme
|
||||
{
|
||||
"name": "Gruvbox b33f Castleton",
|
||||
"style": "Fusion",
|
||||
"colors": {
|
||||
"CastletonGreen": "#00563f",
|
||||
"ForestSlate": "#587c72",
|
||||
"LightCoral": "#ffc6b1",
|
||||
"Goldenrod": "#daa520",
|
||||
"LightSeaGreen": "#20b2aa",
|
||||
"CornflowerBlue": "#6495ed",
|
||||
"Thistle": "#d8bfd8",
|
||||
"NeonGold": "#FFD700",
|
||||
"NeonBlue": "#00FFFF",
|
||||
"SteelBlue": "#4682b4",
|
||||
"Tan": "#d2b48c",
|
||||
"OliveDrab": "#6b8e23",
|
||||
"Rose": "#ff637f",
|
||||
"Cerulean": "#007ba7",
|
||||
"Amber": "#ffbf00",
|
||||
"Emerald": "#50c878"
|
||||
},
|
||||
"palette": {
|
||||
"Window": ["~", "CastletonGreen", "ForestSlate", 240],
|
||||
"WindowText": "LightCoral",
|
||||
"Base": "CastletonGreen",
|
||||
"AlternateBase": "NeonBlue",
|
||||
"ToolTipBase": "CastletonGreen",
|
||||
"ToolTipText": "LightCoral",
|
||||
"Text": "LightCoral",
|
||||
"Button": "CastletonGreen",
|
||||
"ButtonText": "LightCoral",
|
||||
"BrightText": "Rose",
|
||||
"Link": "LightSeaGreen",
|
||||
"Highlight": "Amber",
|
||||
"HighlightedText": "ForestSlate",
|
||||
"Light": "CornflowerBlue"
|
||||
},
|
||||
"theme-colors": {
|
||||
"addressColor": "Emerald",
|
||||
"modifiedColor": "Rose",
|
||||
"insertedColor": "CornflowerBlue",
|
||||
"notPresentColor": "Thistle",
|
||||
"selectionColor": ["~", "Amber", "CastletonGreen", 110],
|
||||
"outlineColor": "Amber",
|
||||
"backgroundHighlightDarkColor": "CastletonGreen",
|
||||
"backgroundHighlightLightColor": "CastletonGreen",
|
||||
"boldBackgroundHighlightDarkColor": "NeonGold",
|
||||
"boldBackgroundHighlightLightColor": "Tan",
|
||||
"alphanumericHighlightColor": "CornflowerBlue",
|
||||
"printableHighlightColor": "Goldenrod",
|
||||
"graphBackgroundDarkColor": "CastletonGreen",
|
||||
"graphBackgroundLightColor": "CastletonGreen",
|
||||
"graphNodeDarkColor": "CastletonGreen",
|
||||
"graphNodeLightColor": "CastletonGreen",
|
||||
"graphNodeOutlineColor": "CornflowerBlue",
|
||||
"trueBranchColor": "Emerald",
|
||||
"falseBranchColor": "Rose",
|
||||
"unconditionalBranchColor": "CornflowerBlue",
|
||||
"altTrueBranchColor": "LightSeaGreen",
|
||||
"altFalseBranchColor": "Rose",
|
||||
"altUnconditionalBranchColor": "CornflowerBlue",
|
||||
"registerColor": "Rose",
|
||||
"numberColor": "Goldenrod",
|
||||
"codeSymbolColor": "Emerald",
|
||||
"dataSymbolColor": "Thistle",
|
||||
"stackVariableColor": "NeonBlue",
|
||||
"importColor": "Tan",
|
||||
"instructionHighlightColor": ["~", "NeonBlue", "CastletonGreen", 50],
|
||||
"tokenHighlightColor": "Thistle",
|
||||
"annotationColor": "ForestSlate",
|
||||
"opcodeColor": "CornflowerBlue",
|
||||
"linearDisassemblyFunctionHeaderColor": "CastletonGreen",
|
||||
"linearDisassemblyBlockColor": "CastletonGreen",
|
||||
"linearDisassemblyNoteColor": "CastletonGreen",
|
||||
"linearDisassemblySeparatorColor": "Cerulean",
|
||||
"stringColor": "Amber",
|
||||
"typeNameColor": "LightSeaGreen",
|
||||
"fieldNameColor": "SteelBlue",
|
||||
"keywordColor": "Emerald",
|
||||
"uncertainColor": "CornflowerBlue",
|
||||
"scriptConsoleOutputColor": "ForestSlate",
|
||||
"scriptConsoleErrorColor": "Rose",
|
||||
"scriptConsoleEchoColor": "LightSeaGreen",
|
||||
"blueStandardHighlightColor": "CornflowerBlue",
|
||||
"greenStandardHighlightColor": "Emerald",
|
||||
"cyanStandardHighlightColor": "LightSeaGreen",
|
||||
"redStandardHighlightColor": "Rose",
|
||||
"magentaStandardHighlightColor": "Thistle",
|
||||
"yellowStandardHighlightColor": "Goldenrod",
|
||||
"orangeStandardHighlightColor": "Tan",
|
||||
"whiteStandardHighlightColor": "ForestSlate",
|
||||
"blackStandardHighlightColor": "NeonBlue"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
`gruvbox-b33f-light.bntheme`:
|
||||
|
||||
```bntheme
|
||||
{
|
||||
"name": "Gruvbox b33f Light",
|
||||
"style": "Fusion",
|
||||
"colors": {
|
||||
"MediumGrey": "#757575",
|
||||
"Cream": "#e5dbca",
|
||||
"Salmon": "#ffaaa5",
|
||||
"Peach": "#ffb07c",
|
||||
"Yellow": "#ffcc7a",
|
||||
"Lime": "#dfec9d",
|
||||
"Seafoam": "#97d28d",
|
||||
"Sky": "#7eb9df",
|
||||
"Lavender": "#f989a8",
|
||||
"PaleSkyBlue": "#d9f9ff",
|
||||
"Taupe": "#c1a07f",
|
||||
"Moss": "#9aa36d"
|
||||
},
|
||||
"palette": {
|
||||
"Window": [
|
||||
"~",
|
||||
"Cream",
|
||||
"MediumGrey",
|
||||
240
|
||||
],
|
||||
"WindowText": "Cream",
|
||||
"Base": "MediumGrey",
|
||||
"AlternateBase": "Taupe",
|
||||
"ToolTipBase": "MediumGrey",
|
||||
"ToolTipText": "Sky",
|
||||
"Text": "Cream",
|
||||
"Button": "MediumGrey",
|
||||
"ButtonText": "Sky",
|
||||
"BrightText": "Taupe",
|
||||
"Link": "Lime",
|
||||
"Highlight": "Sky",
|
||||
"HighlightedText": "MediumGrey",
|
||||
"Light": "Sky"
|
||||
},
|
||||
"theme-colors": {
|
||||
"addressColor": "Lime",
|
||||
"modifiedColor": "Salmon",
|
||||
"insertedColor": "Sky",
|
||||
"notPresentColor": "Sky",
|
||||
"selectionColor": "Moss",
|
||||
"outlineColor": "Lime",
|
||||
"backgroundHighlightDarkColor": "MediumGrey",
|
||||
"backgroundHighlightLightColor": "MediumGrey",
|
||||
"boldBackgroundHighlightDarkColor": "PaleSkyBlue",
|
||||
"boldBackgroundHighlightLightColor": "Salmon",
|
||||
"alphanumericHighlightColor": "Sky",
|
||||
"printableHighlightColor": "Yellow",
|
||||
"graphBackgroundDarkColor": "MediumGrey",
|
||||
"graphBackgroundLightColor": "MediumGrey",
|
||||
"graphNodeDarkColor": "MediumGrey",
|
||||
"graphNodeLightColor": "MediumGrey",
|
||||
"graphNodeOutlineColor": "Sky",
|
||||
"trueBranchColor": "Lime",
|
||||
"falseBranchColor": "Salmon",
|
||||
"unconditionalBranchColor": "Sky",
|
||||
"altTrueBranchColor": "Sky",
|
||||
"altFalseBranchColor": "Salmon",
|
||||
"altUnconditionalBranchColor": "Sky",
|
||||
"registerColor": "Salmon",
|
||||
"numberColor": "Yellow",
|
||||
"codeSymbolColor": "Lime",
|
||||
"dataSymbolColor": "Lavender",
|
||||
"stackVariableColor": [
|
||||
"+",
|
||||
"Cream",
|
||||
"Sky"
|
||||
],
|
||||
"importColor": "Peach",
|
||||
"instructionHighlightColor": [
|
||||
"~",
|
||||
"Taupe",
|
||||
"MediumGrey",
|
||||
50
|
||||
],
|
||||
"tokenHighlightColor": "Lavender",
|
||||
"annotationColor": "Cream",
|
||||
"opcodeColor": "Sky",
|
||||
"linearDisassemblyFunctionHeaderColor": "MediumGrey",
|
||||
"linearDisassemblyBlockColor": "MediumGrey",
|
||||
"linearDisassemblyNoteColor": "MediumGrey",
|
||||
"linearDisassemblySeparatorColor": "Sky",
|
||||
"stringColor": "Yellow",
|
||||
"typeNameColor": "Peach",
|
||||
"fieldNameColor": "PaleSkyBlue",
|
||||
"keywordColor": "Lime",
|
||||
"uncertainColor": "Sky",
|
||||
"scriptConsoleOutputColor": "Cream",
|
||||
"scriptConsoleErrorColor": "Salmon",
|
||||
"scriptConsoleEchoColor": "Lime",
|
||||
"blueStandardHighlightColor": "PaleSkyBlue",
|
||||
"greenStandardHighlightColor": "Lime",
|
||||
"cyanStandardHighlightColor": "Sky",
|
||||
"redStandardHighlightColor": "Salmon",
|
||||
"magentaStandardHighlightColor": "Lavender",
|
||||
"yellowStandardHighlightColor": "Yellow",
|
||||
"orangeStandardHighlightColor": "Peach",
|
||||
"whiteStandardHighlightColor": "Cream",
|
||||
"blackStandardHighlightColor": "MediumGrey"
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
`gruvbox-b33f.bntheme`:
|
||||
|
||||
```bntheme
|
||||
{
|
||||
"name": "Gruvbox b33f",
|
||||
"style": "Fusion",
|
||||
"colors": {
|
||||
"Charcoal": "#32302f",
|
||||
"Wheat": "#d4be98",
|
||||
"CoralRed": "#ea6962",
|
||||
"BurntSienna": "#e78a4e",
|
||||
"OldGold": "#d8a657",
|
||||
"SageGreen": "#a9b665",
|
||||
"MintCream": "#89b482",
|
||||
"PowderBlue": "#7daea3",
|
||||
"OldRose": "#d3869b",
|
||||
"SeashellPink": "#ffe3d0",
|
||||
"TaupeGrey": "#928374",
|
||||
"OliveDrab": "#59572b"
|
||||
},
|
||||
"palette": {
|
||||
"Window": [
|
||||
"~",
|
||||
"Wheat",
|
||||
"Charcoal",
|
||||
240
|
||||
],
|
||||
"WindowText": "Wheat",
|
||||
"Base": "Charcoal",
|
||||
"AlternateBase": "TaupeGrey",
|
||||
"ToolTipBase": "Charcoal",
|
||||
"ToolTipText": "PowderBlue",
|
||||
"Text": "Wheat",
|
||||
"Button": "Charcoal",
|
||||
"ButtonText": "PowderBlue",
|
||||
"BrightText": "TaupeGrey",
|
||||
"Link": "SageGreen",
|
||||
"Highlight": "PowderBlue",
|
||||
"HighlightedText": "Charcoal",
|
||||
"Light": "PowderBlue"
|
||||
},
|
||||
"theme-colors": {
|
||||
"addressColor": "SageGreen",
|
||||
"modifiedColor": "CoralRed",
|
||||
"insertedColor": "PowderBlue",
|
||||
"notPresentColor": "PowderBlue",
|
||||
"selectionColor": "OliveDrab",
|
||||
"outlineColor": "SageGreen",
|
||||
"backgroundHighlightDarkColor": "Charcoal",
|
||||
"backgroundHighlightLightColor": "Charcoal",
|
||||
"boldBackgroundHighlightDarkColor": "SeashellPink",
|
||||
"boldBackgroundHighlightLightColor": "CoralRed",
|
||||
"alphanumericHighlightColor": "PowderBlue",
|
||||
"printableHighlightColor": "OldGold",
|
||||
"graphBackgroundDarkColor": "Charcoal",
|
||||
"graphBackgroundLightColor": "Charcoal",
|
||||
"graphNodeDarkColor": "Charcoal",
|
||||
"graphNodeLightColor": "Charcoal",
|
||||
"graphNodeOutlineColor": "PowderBlue",
|
||||
"trueBranchColor": "SageGreen",
|
||||
"falseBranchColor": "CoralRed",
|
||||
"unconditionalBranchColor": "PowderBlue",
|
||||
"altTrueBranchColor": "PowderBlue",
|
||||
"altFalseBranchColor": "CoralRed",
|
||||
"altUnconditionalBranchColor": "PowderBlue",
|
||||
"registerColor": "CoralRed",
|
||||
"numberColor": "OldGold",
|
||||
"codeSymbolColor": "SageGreen",
|
||||
"dataSymbolColor": "OldRose",
|
||||
"stackVariableColor": [
|
||||
"+",
|
||||
"Wheat",
|
||||
"PowderBlue"
|
||||
],
|
||||
"importColor": "BurntSienna",
|
||||
"instructionHighlightColor": [
|
||||
"~",
|
||||
"TaupeGrey",
|
||||
"Charcoal",
|
||||
50
|
||||
],
|
||||
"tokenHighlightColor": "OldRose",
|
||||
"annotationColor": "Wheat",
|
||||
"opcodeColor": "PowderBlue",
|
||||
"linearDisassemblyFunctionHeaderColor": "Charcoal",
|
||||
"linearDisassemblyBlockColor": "Charcoal",
|
||||
"linearDisassemblyNoteColor": "Charcoal",
|
||||
"linearDisassemblySeparatorColor": "PowderBlue",
|
||||
"stringColor": "OldGold",
|
||||
"typeNameColor": "BurntSienna",
|
||||
"fieldNameColor": "SeashellPink",
|
||||
"keywordColor": "SageGreen",
|
||||
"uncertainColor": "PowderBlue",
|
||||
"scriptConsoleOutputColor": "Wheat",
|
||||
"scriptConsoleErrorColor": "CoralRed",
|
||||
"scriptConsoleEchoColor": "SageGreen",
|
||||
"blueStandardHighlightColor": "SeashellPink",
|
||||
"greenStandardHighlightColor": "SageGreen",
|
||||
"cyanStandardHighlightColor": "PowderBlue",
|
||||
"redStandardHighlightColor": "CoralRed",
|
||||
"magentaStandardHighlightColor": "OldRose",
|
||||
"yellowStandardHighlightColor": "OldGold",
|
||||
"orangeStandardHighlightColor": "BurntSienna",
|
||||
"whiteStandardHighlightColor": "Wheat",
|
||||
"blackStandardHighlightColor": "Charcoal"
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user