xilinx-fpgas中bal框架的实现
bal-xilinx的Python项目详细描述
bal xilinx概述
bal xilinx包是 Binary Abstraction Layer (BAL)用于xilinx fpga的框架。 它支持大多数比特流的打包/解包、目标设备/加密检测和 引脚修改(强制引脚高/低)。 它应该是一个项目的依赖项,而不是要定制的样板项目。 它最初是在黑帽2019年推出的(presentation,research paper)。
完整的api文档here可用。
贡献者:
- Jatin Kataria(研究员)
- 里克·霍斯利(研究员)
- Alex Massonneau(开发人员)
- Andrew O'Brien(开发人员)
安装
bal xilinx包可以使用以下命令从pypi安装:
pip install bal-xilinx
BAL-Xilinx包也可以从存储库中安装它需要bal包。请参阅installation instructions
要从源代码安装bal xilinx包,请运行:
git clone https://github.com/RedBalloonShenanigans/bal-xilinx.git
cd bal-xilinx
pip install .
要生成文档,请运行:
pip install .[docs]
make html-docs
工具
虽然此模块本应用作另一个项目的依赖项,但它当前提供了
一个叫做pin
的工具它为现有的Xilinx FPGA比特流打开/关闭给定的PIN。它是
可通过运行访问:
python-mbal_xilinx.tools.pin
使用-h
标志运行pin工具可以访问该工具的文档
方法论
xilinx转换器在很大程度上依赖于bal_xilinx/configs中包含的格式定义。用于创建这些json文件的方法不久将发布。
指南
本指南假设您熟悉BAL framework。 如项目名称所示,这是一个用于Xilinx FPGA位流的实现。 完整的示例可在./example下找到
分析仪
有3个分析仪可用:
bal_xilinx.analyzers.device_analyzer.XilinxDeviceAnalyzer
确定设备的类型 以比特流为目标。bal_xilinx.analyzers.encryption_analyzer.XilinxEncryptionAnalyzer
确定fdri 数据包是加密的。bal_xilinx.analyzers.visualizer_analyzer.XilinxVisualizerAnalyzer
生成配置 BAL visualizer的数据。
修饰语
目前只有一台分析仪:
bal_xilinx.modifiers.pin_modifier.XilinxPinModifer
强制管脚为低/高,而不管 由FPGA执行的逻辑
示例
下面是一个将所有可用的分析器和修饰符组合在一起的示例。
# Configure the default convertersxilinx_context_factory=default_xilinx_context(XilinxContextFactory(# Register the formats for the LX9 and LX45Tdefault_xilinx_formats(XilinxFormatBuilder()).build()))lx9_bin=wget.download('https://redballoonsecurity.com/files/JwfEU4veQSNFao8h/lx9.bin')withopen(lx9_bin,"rb")asf:data=f.read()bitstream_context=xilinx_context_factory.create(data)# Get the device type targeted by the bitstreamdevice_type=bitstream_context.create_analyzer(XilinxDeviceAnalyzer)\ .analyze()print("Device info: {}".format(device_type))# Determine if the FDRI packets are encrypted.is_encrypted=bitstream_context.create_analyzer(XilinxEncryptionAnalyzer)\ .analyze()print("Is encrypted: {}".format(is_encrypted))# Unpack the entire bitstream to make sure the visualization includes everythingbitstream_context.get_data().unpack_all()print("Writing the visualizer config to {}".format(os.path.abspath("data.json")))withopen("data.json","w")asf:# Generate the visualization config filevisualizer_config=bitstream_context.create_analyzer(VisualizerAnalyzer) \ .analyze()json.dump(visualizer_config,f)print("Pulling the pins low")pin_modifier=bitstream_context.create_modifier(XilinxPinModifer)forpinin["P134","P133","P132","P131","P127","P126","P124","P123"]:pin_modifier.modify(pin,False)print("Analysis and modifications done!")
这是给导游的。玩得高兴!