📌 写在前面
这篇文章记录了我尝试破解 EFetch(一个基于 Electron 的下载工具)卡密验证的完整过程。从最初的二进制调试,到发现它是 Electron 应用,再到最终通过修改 JS 源码彻底绕过验证,整个过程踩了不少坑,记录于此,希望对有类似需求的朋友有帮助。
⚠️ 声明:本文仅供技术研究和学习交流,请勿用于非法用途。如果你喜欢这款软件,请支持正版。
🎯 目标
EFetch 是一款下载工具,免费版有限速,需要输入密钥(卡密)才能解锁“进阶用户”权限。目标就是绕过这个验证,直接使用进阶功能。
第一阶段:误入歧途 —— 尝试 dbg 调试
首先肯定丢给PE看看
![图片[1]-记录EFetch桌面版的破解-软件安全逆向社区论坛-技术社区-学技术网](https://itheima-sky-take-out01.oss-cn-beijing.aliyuncs.com/Snipaste_2026-06-08_10-25-33.png)
![图片[2]-记录EFetch桌面版的破解-软件安全逆向社区论坛-技术社区-学技术网](https://itheima-sky-take-out01.oss-cn-beijing.aliyuncs.com/Snipaste_2026-06-08_10-40-35.png)
没有壳,发现32位上dbg32,结果找不到,用dbg64倒是找到了,然后输入密钥,搜索关键字1234567890123,复制关键字周围的数据丢给deepseek,发现是Electron应用,即调试的根本不是一个普通的 Windows 程序,而是一个嵌入在程序里的 JavaScript 代码。而且没有加壳,那么思路就是解包这个程序,提取出真正的 JavaScript 源码,然后修改源码里的验证部分,再重新打包替换即可。(*友情提示,开始之前先做好快照*,否则会出现不可预期的bug)
📦 第二阶段:解包获取源码
Electron 代码在 resources/app.asar 中:
npm install -g asar asar extract app.asar unpacked
解包后获得完整项目结构,关键文件:
-
index.js– 主进程(启动、用户管理) -
home.js– 渲染进程(界面、卡密弹窗)
🔑 第三阶段:定位并修改验证逻辑
修改点 1:home.js 中的 N() 函数
原代码:弹出密钥输入框,发送请求到服务器验证
修改后:直接解锁,不弹窗
修改点 2:index.js – getUser() 函数
确保没有用户时自动创建:
// ==================== 修改后的 getUser 函数 - 永远返回有效用户 ====================
function getUser(e = "") {
if (!e && !(e = storage.get("user"))) {
// 创建假用户
const fakeUser = {
id: "cracked_user_" + Date.now(),
device: "cracked_device",
timeout: Math.floor(Date.now() / 1000) + 365 * 86400,
email: null,
};
storage.set("user", fakeUser);
return fakeUser;
}
// 尝试解密,失败则返回假用户
try {
e = decryptData(e, !0);
} catch (err) {
// 解密失败,返回假用户
const fakeUser = {
id: "cracked_user",
device: "cracked_device",
timeout: Math.floor(Date.now() / 1000) + 365 * 86400,
email: null,
};
return fakeUser;
}
return e.device && e.id ? e : null;
}
修改点 3:index.js – decryptData() 函数
解密失败时返回假数据,防止崩溃:
// ==================== 修改后的 decryptData 函数 - 解密失败时返回假数据 ====================
function decryptData(e, t = !1) {
try {
const n = e.substring(0, 32),
o = e.substring(32, 96),
s = e.substring(96);
const i = crypto.createDecipheriv(
"aes-256-cbc",
Buffer.from(o, "hex"),
Buffer.from(n, "hex"),
);
let r = i.update(s, "hex", "utf8");
r += i.final("utf8");
r = Buffer.from(r, "base64");
r = r.toString("utf-8");
if (t) r = JSON.parse(r);
return r;
} catch (err) {
// 解密失败时返回假数据
if (t) {
return {
id: "cracked_user",
device: "cracked_device",
timeout: Math.floor(Date.now() / 1000) + 365 * 86400,
email: null,
};
}
return "cracked_user_data";
}
}
修改点 4:index.js – app.on("ready") 启动事件
跳过验证,直接启动主窗口:
修改点 5:index.js – 禁用自动更新
async function checkForUpdates(e) { return; // 什么都不做 }
🔧 第四阶段:重新打包并替换
# 重新打包 asar pack unpacked app.asar # 替换原文件(建议先备份) cp app.asar /你的路径/EFetch/resources/app.asar
✅ 最终结果
![图片[3]-记录EFetch桌面版的破解-软件安全逆向社区论坛-技术社区-学技术网](https://itheima-sky-take-out01.oss-cn-beijing.aliyuncs.com/Snipaste_2026-06-08_11-45-13.png)
| 现象 | 结果 |
|---|---|
| 启动时弹出卡密窗口 | ❌ 不再出现 |
| 点击”进阶用户” | ✅ 直接提示”已解锁” |
| 下载速度限制 | ✅ 已解除 |
| 自动更新 | ❌ 已禁用 |
🎉 后记
如果你碰到这个bug
![图片[4]-记录EFetch桌面版的破解-软件安全逆向社区论坛-技术社区-学技术网](https://itheima-sky-take-out01.oss-cn-beijing.aliyuncs.com/Snipaste_2026-06-08_11-36-14.png)
建议赶紧恢复快照,当然你可以重新安装试试,反正我没有成功过,当然破解也可以。

超级版主
