Using BLA to Counter REA's AI Reverse Engineering: An Electron Example

English | 简体中文 What AI reverse engineering changes REA gives AI agents reverse engineering tools to inspect applications without source code and help reconstruct features. Can software companies still protect their implementations? How BLA responds BLA adds material that interferes with analysis to release artifacts. Decoy modules and call relationships give agents more leads to check. Expanded metadata can also reach a particular parser’s resource limits. The ASAR approach used here transforms JavaScript and expands archive directory information. Its goal is to keep the application usable while increasing analysis overhead or limiting particular entry points. Effectiveness depends on the artifact format and tool versions, so it needs evaluation. ...

2026-11-07 · 7 min · 1320 words · 翟志军 Jack Zhai

使用 BLA 进行反 REA AI 逆向——以 Electron 应用为例

English | 简体中文 AI 逆向带来的变化 REA 让 AI agent 借助逆向工具分析没有源码的应用,并辅助重建功能。软件公司还能保护自己的实现吗? BLA 如何应对 AI 逆向 魔高一尺,道高一丈。BLA 会向发布制品加入干扰分析的内容。诱饵模块和调用关系让 agent 面对更多待核对的线索,扩大的元数据则可能触及解析器的资源上限。 本例使用的 ASAR 方案会改写 JavaScript,并扩充归档目录。目标是保持应用可用,同时增加自动分析的开销或让特定入口受限。真实效果取决于目标格式与工具版本,需要后续评估。 以 Electron 为例接入 CI 示例仓库是 zacker330/bla-ci,包含简单的报价计算器和三平台 CI。在构建 job 生成原始 app.asar 之后加入 BLA,处理完成后再打包、生成完整性记录和签名。 加固会改写交付文件,后续打包若重新生成文件,就可能覆盖加固结果。把 BLA 接进构建,可以固定处理顺序,让每次发布都执行,并在失败时阻止交付。 原始制品 → 对照包 → 回归测试 └→ BLA → 加固制品 → 打包与回归 → 按渠道签名、封装及发布验证 两份制品 → 按时机评估反 REA AI 逆向效果 构建脚本保留原始 ASAR,再生成加固版本: npx --no-install bla audit dist/asar/original/app.asar --json npx --no-install bla protect dist/asar/original/app.asar \ -o dist/asar/hardened/app.asar --intensity bankrupt \ --seed bla-ci-demo-v1 --json npx --no-install bla verify dist/asar/hardened/app.asar \ dist/asar/original/app.asar --json 锁定工具版本和依赖,每次从原始制品重新加固。固定 seed 用于复现,不承担保密功能。命令或校验失败就停止构建,并保存报告。dist/build.json 记录版本、配置、产物哈希和耗时,让后续测试与评估能核对输入。 ...

2026-11-07 · 2 min · 279 words · 翟志军 Jack Zhai

Electron 应用的流水线设计

面向读者:需要了解 Jenkins 流水线的基本语法。 Electron 是由 Github 开发,用 HTML,CSS 和 JavaScript 来构建跨平台桌面应用程序的一个开源库。 本文将介绍 Electron 桌面应用的流水线的设计。 但是如何介绍呢?倒是个大问题。笔者尝试直接贴代码,在代码注释中讲解。这是一次尝试,希望得到你的反馈。 完整代码 pipeline { // 我们决定每一个阶段指定 agent,所以, // 流水线的 agent 设置为 none,这样不会占用 agent agent none // 指定整条流水线的环境变量 environment { APP_VERSION = "" APP_NAME = "electron-webpack-quick-start" } stages { stage("生成版本号"){ agent {label "linux" } steps{ script{ APP_VERSION = generateVersion("1.0.0") echo "version is ${APP_VERSION}" }} } stage('并行构建') { // 快速失败,只要其中一个平台构建失败, // 整次构建算失败 failFast true // parallel 闭包内的阶段将并行执行 parallel { stage('Windows平台下构建') { agent {label "windows && nodejs" } steps { echo "${APP_VERSION}" } } stage('Linux平台下构建') { agent {label "linux && nodejs" } // 不同平台可能存在不同的环境变量 // environment 支持阶段级的环境变量 environment{ SUFFIX = "tar.xz" APP_PLATFORM = "linux" ARTIFACT_PATH = "dist/${APP_NAME}-${APP_PLATFORM}-${APP_VERSION}.${SUFFIX}" } steps { script{ // Jenkins nodejs 插件提供的 nodejs 包装器 // 包装器内可以执行 npm 命令。 // nodejs10.15.2 是在 Jenkins 的全局工具配置中添加的 NodeJS 安装器 nodejs(nodeJSInstallationName: 'nodejs10.15.2') { // 执行具体的构建命令 sh "npm install yarn" sh "yarn version --new-version ${APP_VERSION}" sh "yarn install" sh "yarn dist --linux deb ${SUFFIX}" // 上传制品 uploadArtifact("${APP_NAME}", "${APP_VERSION}", "${ARTIFACT_PATH}") }}} // 将括号合并是为了让代码看起来紧凑,提升阅读体验。下同。 } stage('Mac平台下构建') { agent {label "mac && nodejs" } stages { stage('mac 下阶段1') { steps { echo "staging 1" } } stage('mac 下阶段2') { steps { echo "staging 2" } } } } } } stage("其它阶段,读者可根据情况自行添加"){ agent {label "linux"} steps{ echo "发布" } } } post { always { cleanWs() } } // 清理工作空间 } def generateVersion(def ver){ def gitCommitId = env.GIT_COMMIT.take(7) return "${ver}-${gitCommitId}.${env.BUILD_NUMBER}" } def uploadArtifact(def appName, def appVersion, def artifactPath){ echo "根据参数将制品上传到制品库中,待测试" } 代码补充说明 因为 Electron 是跨平台的,我们需要将构建过程分别放到 Windows、Linux、Mac 各平台下执行。所以,不同平台的构建任务需要执行在不同的 agent 上。我们通过在 stage 内定义 agent 实现。如在“Mac平台下构建”的阶段中,agent {label "mac && nodejs" } 指定了只有 label 同时包括了 mac 和 nodejs 的 agent 才能执行构建。 ...

2019-03-10 · 2 min · 291 words · 翟志军 Jack Zhai