【Windows逆向】Electron程序重打包启用控制台+ob混淆分析+绕过调试检测

admin 2026-03-03 05:08:23 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 文档详述了Electron程序逆向过程,通过解包app.asar修改配置文件强制开启DevTools,并深入分析security.js中的ob混淆代码。作者逆向分析了字符串解密逻辑,定位到检测调试参数并退出的安全函数,通过插入return语句绕过检测。最后重打包asar成功启用控制台,为Electron应用逆向与反调试绕过提供了具体实操步骤。 综合评分: 91 文章分类: 逆向分析,应用安全,安全工具,实战经验


cover_image

【Windows逆向】Electron程序重打包启用控制台+ob混淆分析+绕过调试检测

原创

挖个洞先 挖个洞先

挖个洞先

2026年2月26日 14:11 北京

 “就算你是它最初的主人,可不过是短命蜉蝣的你,哪能抵得过我们六生五世的强命?”

“强大的命运吸引着因果,可星火燎原,无数渺小的集合所蕴含的命运,就是无限因果,就是此刻彼时之人。”

——《日月同错》67回 

01

环境版本

环境:

Windows 11 专业版 23H2

https://github.com/JiaoSuInfoSec/JiaoSuInfoSec_T00ls_Win11

软件:

VScode,1.109.3

https://code.visualstudio.com/download

npm,11.8.0

https://nodejs.org/zh-cn/download

02

操作步骤

1、exe加上参数–remote-debugging-port打开程序失败,日志中有security关键字

Remote debugging is not allowed,  runWithDebug: --remote-debugging-port

2、安装asar

npm i -g asar

3、进入resources目录,备份app.asar

copy app.asar app.asar.bak

4、解包 app.asar

if (Test-Path .\app_extracted) { Remove-Item -Recurse -Force .\app_extracted }asar extract app.asar app_extracted

5、\app_extracted\public\electron\config\config.default.js中

webPreferences添加devTools: !![]

![]是false,!![]是true

6、config.default.js中openDevTools: ![]改为openDevTools: !![]

7、config.prod.js中openDevTools: ![]改为openDevTools: !![]

8、\app_extracted\public\electron\preload\lifecycle.js中getMainWindow()获取主窗口后赋值给_0x33e148

9、添加代码,_0x33e148.webContents监听did-finish-load事件,在主窗口页面加载完成后自动调用 openDevTools()打开控制台

_0x33e148["webContents"]["on"]("did-finish-load", () => {    _0x33e148["webContents"]["openDevTools"]();});

10、\app_extracted\public\electron\service\os\security.js,_0x131e返回密文字符串数组

11、函数开头_0x1650有两个参数,定义_0x9c1d75拿到_0x131e()返回值

12、第一个参数_0x345e8e = _0x345e8e – 0x1c8,第二个参数_0x5cf592是密钥

_0x409c94 = _0x9c1d75[_0x345e8e],把参数_0x345e8e做偏移后当_0x131e数组下标取值

13、_0x1650[“KdGhwJ”]未定义,初始化走_0x3ccc56解码分支base64/url处理_0x131e数组

14、然后_0x1650[“KdGhwJ”] = !![]下次不走base64/url分支

解密函数_0x404485赋值给_0x1650,后面直接复用

15、缓存明文,避免重复解密

_0x2a3af9 = _0x9c1d75[盐值]

_0x5a6a5f = _0x345e8e + _0x2a3af9

16、查询缓存,如果这个位置已经有值,直接调用不再解密。

_0x3455bd = _0x310b6a[_0x5a6a5f]

17、取到的密文字符串+密钥给_0x1650[“SdWjpH”]也就是_0x404485解密函数得到明文

_0x409c94 = _0x1650[“SdWjpH”](_0x409c94, _0x5cf592)

18、还原为明文,检测到调试参数就调用quit(),那么只需要在打印日志后面return绕过argv检查逻辑

19、在线网站解混淆测试,逻辑基本一致

https://obf-io.deobfuscate.io/

"use strict";const {  logger} = require("ee-core/log");const {  app: electronApp} = require("electron");class SecurityService {  ["create"]() {    logger.info("[security] load");    const _0x1ca79f = process.argv.find(function (_0x234380) {      let _0x2f1b78 = _0x234380.includes("--inspect") || _0x234380.includes("--inspect-brk") || _0x234380.includes("--remote-debugging-port");      return _0x2f1b78;    });    if (_0x1ca79f) {      logger.error("[error] Remote debugging is not allowed,  runWithDebug:", _0x1ca79f);      electronApp.quit();    }  }}SecurityService.toString = () => "[class SecurityService]";module.exports = {  securityService: new SecurityService()};

20、回到security.js中在logger后面return

21、重打包

asar pack app_extracted app.asar

22、成功开启控制台


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:挖个洞先 挖个洞先 挖个洞先《【Windows逆向】Electron程序重打包启用控制台+ob混淆分析+绕过调试检测》

评论:0   参与:  0