尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Ghidra BSim 过滤机制详解:服务器端与客户端过滤器的工作原理与实战演练
Ghidra BSim 过滤机制详解服务器端与客户端过滤器的工作原理与实战演练【免费下载链接】ghidraGhidra is a software reverse engineering (SRE) framework项目地址: https://gitcode.com/GitHub_Trending/gh/ghidra本篇技术指南聚焦 Ghidra BSim二进制相似性匹配功能的过滤器体系讲解 BSim Search 对话框中Filters下拉提供的服务器端过滤器如何生成查询条件、结果表格上Filter Results客户端过滤器如何即时裁剪展示并结合 BSim 模块源码逐一解析每种过滤器类型对应的 SQL/Elasticsearch 子句生成逻辑。读完本篇你可以准确运用各类过滤器缩小相似函数搜索结果的范围、看懂过滤器在查询协议中的落地形式并完成教程配套的过滤实操演练。一、两级过滤器服务器端与客户端BSim 查询可以施加多种过滤器涉及名称、架构、编译器、入库日期、用户自定义可执行文件类别executable categories及其他属性。过滤器分为两个层级二者作用域完全不同服务器端过滤器Server-side作用于 BSim 服务器返回给 Ghidra 的查询结果本身。在 BSim Search 对话框的Filters下拉中施加会直接改变查询协议中携带的过滤条件。要撤销一个服务器端过滤器只能重新发起一次不带该过滤器的 BSim 查询——它不是对已有结果的事后裁剪。客户端过滤器Client-side作用于 BSim Search 结果表格的展示可以随时添加、随时移除对应结果窗口工具栏上的Filter Results按钮。源码中这两级 UI 分别落在两处结果表格的Search Info查看已施加的服务器端过滤器与Filter Results打开客户端过滤面板两个工具栏动作定义在 BSimSearchResultsProvider.java 的createActions()中分别使用信息图标Icons.INFO_ICON和过滤图标Icons.CONFIGURE_FILTER_ICONSearch 对话框侧的过滤器编辑区由 BSimFilterPanel.java 承载面板为每条过滤器生成一个 FilterWidget左侧类型下拉框 中部值编辑器 右侧删除按钮右侧提供Add Filter按钮追加过滤器行。getFilterSet()只收集非空白且值有效的条目hasValidFilters()则在查询前校验所有非空白过滤器都具有合法取值。二、服务器端过滤器类型全景BSim Search 对话框Filters下拉里可选的类型并非写死在界面上而是由 BSimFilterType.java 统一构建。buildFilterBasis()L300-L316给出基础过滤器清单generateBsimFilters()L324-L386再根据目标数据库的描述信息DatabaseInformation动态增补。基础清单与动态增补项如下显示名称即下拉框中的 labelXML 值是过滤器序列化的类型标签输入提示是值输入框中的占位示例过滤器GUI 显示名XML 值输入提示示例取值说明Executable name equalsnameequalsexecutable name可执行文件名精确匹配Executable name does not equalnamenotequalexecutable name可执行文件名排除教程演练即用此项MD5 equals / MD5 does not equalmd5equals/md5notequal32-digit hex value按文件 MD5 精确匹配/排除Architecture equals / does not equalarchequals/archnotequalx86:LE:64:default按架构标识匹配/排除Compiler equals / does not equalcompequals/compnotequalgcc按编译器名匹配/排除Path starts withpathstartspath按文件路径前缀匹配Calls external functionnamedchildexternal subfunction子过滤器要求函数调用图含指定外部函数仅当数据库追踪了 callgraph 时才出现Ingest Date is earlier/later thandateearlier/datelater1974-09-21或09/21/1974按入库日期做前后界若数据库显式声明了日期列名则显示名替换为该列名表中只能容纳一个日期类别名 matches / does not matchexecatmatches/execatnomatchcategory value用户自定义的可执行文件类别类别清单来自数据库信息execatsFunction tagged as KNOWN_LIBRARY / HAS_UNIMPLEMENTED / HAS_BADDATAfunctiontagfunction tag内置函数标签位掩码分别为 1/2/4外加数据库中声明的用户自定义函数标签值得注意的两个动态行为日期过滤器的列名可被覆盖。generateBsimFilters()中若info.dateColumnName非空则用它构造定制日期过滤器否则回退到默认的 Ingest Date 列。类别与标签过滤器完全由数据库元数据驱动。数据库信息中声明了哪些execats可执行文件类别与functionTags函数标签下拉里就出现多少对应的 matches/does-not-match 过滤器用户标签的位标志从RESERVED_BITS之后开始按位递增分配。多值取值与 OR/AND 组合语义每个FilterWidget的值编辑器可返回一个字符串列表——多数过滤器允许同一类型填多个值最终组合方式由BSimFilterType.orMultipleEntries()决定L188-L202 的buildSQLCombinedClause()默认orMultipleEntries() true同一过滤器的多个取值用OR连接SQL 端为ORElasticsearch 脚本端为||部分排除型过滤器覆写为false例如 NotExecutableNameBSimFilterType.java多个不等于值必须AND连接才符合全部排除的语义。三、过滤器如何变成查询SQL 与 Elasticsearch 双通道每个过滤器类型的抽象契约定义在 BSimFilterType.java 中核心方法有三类generateIDSQLResolution(FilterAtom)/gatherSQLEffect(...)面向 PostgreSQL 后端把过滤器值转换为 WHERE 子句gatherElasticEffect(...)面向 Elasticsearch 后端生成对应的查询 JSON 片段evaluate(ExecutableRecord, String)对单条可执行文件记录做本地判定供客户端过滤使用。以教程演练中用到的Executable name does not equal为例NotExecutableNameBSimFilterType.java 的gatherSQLEffect()生成exetable.name_exec ! ...值经Utils.escapeLiteral转义其gatherElasticEffect()生成must_not: { term: { name_exec: ... } }而正向版本 ExecutableNameBSimFilterType.java 则分别生成exetable.name_exec ...与term匹配。二者都无需 ID 解析generateIDSQLResolution返回 null因为可执行文件名本身就是可直接比较的字符串列。在对话框一侧所有过滤器行最终由 BSimFilterSet.java 的getBSimFilter()收敛遍历每条FilterEntry类型 取值列表把每个取值调用bsimFilter.addAtom(filterType, value.trim())打包为协议层的BSimFilter随查询请求发往 BSim 服务器。过滤器还可通过xmlval完成 XML 序列化saveXml()从而随查询设置一起保存与还原。四、教程演练用名称过滤器排除干扰可执行文件以下演练完整继承自 BSim 教程 BSimTutorial_Filters.md其前提是先阅读 BSim 启用指南 启用了 BSim 扩展并已建立包含postgres与demangler_gnu_v2_41等可执行文件的测试库仓库中demangler_gnu_v2_41的源码位于 GPL/DMG/src/demangler_gnu_v2_41/是 GNU demangler 移植模块的一部分选中postgres中的全部函数打开 BSim Search 对话框在Filters下拉中施加一个Executable name does not equal过滤器排除名称填demangler_gnu_v2_41执行查询验证匹配结果的可执行文件列表中不再出现demangler_gnu_v2_41——因为该条件在服务器端就把该文件的函数向量排除出了结果集点击结果工具栏的Search Info按钮信息图标查看本次查询实际携带的服务器端过滤器核对其内容与第 2 步一致点击Filter Results按钮过滤图标对结果表格施加客户端过滤器随意尝试添加与移除体会其与服务器端过滤器可即时撤销的差异。对比两级的行为差异第 5 步的客户端过滤器只隐藏表格行查询结果集并未改变而第 2 步的服务器端过滤器一旦执行若需恢复demangler_gnu_v2_41的结果必须回到 Search 对话框移除该过滤行后重新查询。五、相关章节与源码索引继续深入可参考同一教程系列的相邻章节BSim 基础查询、查询概述、可执行文件结果以及本篇的下一节 脚本与可视化。涉及 BSim 功能启用与数据库构建另见 通过 GUI 创建数据库 与 BSim 命令行。本篇引用的关键源码文件均在 BSim 特性模块下BSimFilterType.java —— 过滤器类型抽象基类、基础清单与动态生成ExecutableNameBSimFilterType.java、NotExecutableNameBSimFilterType.java —— 名称匹配/排除过滤器的 SQL 与 Elastic 子句生成BSimFilterPanel.java、FilterWidget.java、BSimFilterSet.java —— Search 对话框中过滤器编辑区的 UI 与状态管理BSimSearchResultsProvider.java —— 结果窗口的 Search Info / Filter Results 动作定义。【免费下载链接】ghidraGhidra is a software reverse engineering (SRE) framework项目地址: https://gitcode.com/GitHub_Trending/gh/ghidra创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

claude-mem ChromaDB 核心缺陷根因修复:v10.3.0 uvx 迁移后的五类问题与代码级修复方案

claude-mem ChromaDB 核心缺陷根因修复:v10.3.0 uvx 迁移后的五类问题与代码级修复方案

claude-mem ChromaDB 核心缺陷根因修复:v10.3.0 uvx 迁移后的五类问题与代码级修复方案 【免费下载链接】claude-mem Persistent Context Across Sessions for Every Agent – Captures everything your agent does during sessions, compresses it with AI, and in…

📅 2026/9/30 3:33:51
Claude Code 用到第二阶段,最容易卡在这八个问题

Claude Code 用到第二阶段,最容易卡在这八个问题

大家已经不太问「Claude Code 是什么」「MCP 怎么安装」这种入门题,更多是下面这种让人抓头发的问题,Skill 明明装了,为什么不触发;MCP 明明注册了,为什么 Claude Code 偏不用;代码图谱接上了,结…

📅 2026/10/1 5:15:45
Ubuntu 24.04安装Abaqus 2026全指南:从依赖配置到许可证实战

Ubuntu 24.04安装Abaqus 2026全指南:从依赖配置到许可证实战

第一次在 Ubuntu 24.04 上装 Abaqus 2026,很容易做出一件很自然却会绕路的事:找到一个 setup 文件,双击,然后默认下一步。我在不同机器上重复过这个流程,结果往往是安装器闪一下就没了,终端报错一行接一行&…

📅 2026/10/1 6:04:21
MORE NEWS

更多资讯

📰

日照建筑特种工考核有什么坑?良心建议帮你避雷

日照建筑特种工考核有什么坑?良心建议帮你避雷 怕考不过白交培训费,这事儿我懂,我自己就是从驻马店走出来的建筑特种工,当年为了考个高压电工证,跑了三家机构,最后选了一个靠谱的,才没交冤枉钱。今天我来聊聊日照建筑特种工考核的那些事儿,给你个…

📰

电工证未复审的真实经历:一位濮阳转岗电工的血泪教训

电工证未复审的真实经历:一位濮阳转岗电工的血泪教训 我初中毕业,干了十几年电工,学历不高,但一直觉得只要手艺好就能混下去。直到去年冬天,我被查出“电工证未复审”,差点丢了工作,还被公司罚款了两万块。这事儿我到现在想起来都后怕,今天把我的真实…

📰

施工车辆电工证怎么考保姆级教程:洛阳涧西区建筑工人避坑指南

施工车辆电工证怎么考保姆级教程:洛阳涧西区建筑工人避坑指南 你是不是也这样?在洛阳涧西区工地上班,听说现在施工车辆电工证成了刚需,但又不知道从哪儿报名,怕被中介骗钱?别慌,这波保姆级教程,从报名到考试、复审,全给你安排得明明白白,让你少走弯…

📰

电工作业必须2人吗 2026河南最新政策怎么应对

电工作业必须2人吗 2026河南最新政策怎么应对 证书过期了不知道怎么复审延期?这个问题在河南尤其是驻马店地区的电工从业者中屡见不鲜。尤其是2026年河南最新政策出台后,很多电工朋友发现自己手里的证书状态出了问题,但又不知道该从哪里下手解决…

📰

电工证有防爆电气报考条件与考试时间保姆级教程

电工证有防爆电气报考条件与考试时间保姆级教程 你是不是也担心学历不高,怕报不上名?别急,我来帮你理清楚电工证有防爆电气的报考条件和考试时间,这是一份真正能帮你上岸的保姆级教程。 案例背景:一名信阳房建工程工人的困惑…

📰

金华电工证年审地点怎么报名,怎么避坑

金华电工证年审地点怎么报名,怎么避坑 你是不是正愁不知道去哪里报名金华电工证年审,又怕被中介骗钱?别急,这篇文章能帮你把关,确保你走对路、不花冤枉钱。 金华电工证年审地点怎么报名…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬