electron程序逆向分析心得

  • A+
所属分类:逆向工程
electron 是 GitHub 发布的跨平台桌面应用开发工具,支持 Web 技术开发桌面应用,其本身是基于 C++ 开发的,GUI 核心来自于 Chrome,而 JavaScript 引擎使用 v8。
https://www.oschina.net/p/electron?hmsr=aladdin1e1


最近接触到一个用electron开发的软件,要对软件做一些逆向分析。

发现跟常见的win32 api开发的程序还是很不一样的,以前的分析方法啊技巧在这里用不上了,毕竟软件大部分功能是由html、js等开发的。

源码

electron软件发布时,一般都将源码打包在apps/resources/app.asar中,通过asar解压能够轻松拿到软件核心的js源码。

npm install asar -g
cd apps
asar extract app.asar app //解压拿到源码
asar pack app app.asar //重新打包

app.asar一般都没有做进一步的加密处理,所以拿到源码不难。当然不排除有的厂商可能在这方面做了一定的保护,就需要我们自己去逆向找到解密方法了,可以参考coco2d等。

拿到的js源码一般都会做一定的混淆,通过搜索js混淆技术和反混淆、格式化等,基本可以恢复到能够方便阅览的源码。

如果想验证某些功能,或者做些修改,可以通过重打包然后替换app.asar。

F12

做js开发的同学,最常用的快捷键多半就是f12了。electron核心也是使用的chrome,那是不是可以用f12来调试呢。

理想很丰满,现实很残酷。

electron开发者在开发时,肯定会使用f12,但是发布时就不会把调试功能屏蔽了,不然底裤不都被扒了。

不过嘛,他虽然关了,但是我们可以给打开嘛,自己给他扒出来。

方法如下:

asar extract app.asar app //解压拿到源码
mainWindow.webContents.openDevTools();//找到main.js,加入这行代码
asar pack app app.asar //重新打包,替换原始app.asar

然后我们就可以开心的像开发一样调试了。

如果觉得这样太麻烦了,另外再提供一条思路,有兴趣的同学可以折腾一下,做个通用的工具。

翻翻electron相关源码,写个工具,hook openDevTools,让其正常工作。

WebContents::WebContents
WebContents::OpenDevTools
.SetMethod("openDevTools", &WebContents::OpenDevTools)
.SetMethod("toggleDevTools", &WebContents::ToggleDevTools)

more

通常情况下,如果仅仅是js代码的逆向和修改。通过上面的两节,加上调试基本都能搞定了。

可能有些情况下,js无法搞定。

  1. js加密了,未找到解密方法,无法拿到js源码

  2. js混淆严重,无法恢复,不好修改

此时可能可以试试hook内核的一下东西,可以通过翻阅chrome、electron、v8的源码对比分析。

比如想对Canvas做些修改,js层又不好弄,那么就可以找到electron在C代码层实现,做一些事情。

class HTMLCanvasElement

最后提一句,所有代码都编译在发布程序的exe中,可以通过字符串等特征,对比源码分析,找到需要的功能。

本文始发于微信公众号(汉客儿):electron程序逆向分析心得

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: