文章总结: 文档详述了Electron程序逆向过程,通过解包app.asar修改配置文件强制开启DevTools,并深入分析security.js中的ob混淆代码。作者逆向分析了字符串解密逻辑,定位到检测调试参数并退出的安全函数,通过插入return语句绕过检测。最后重打包asar成功启用控制台,为Electron应用逆向与反调试绕过提供了具体实操步骤。 综合评分: 91 文章分类: 逆向分析,应用安全,安全工具,实战经验
【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混淆分析+绕过调试检测》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。











评论