electron程序逆向分析心得
electron 是 GitHub 發(fā)布的跨平臺桌面應用開發(fā)工具,支持 Web 技術開發(fā)桌面應用,其本身是基于 C++ 開發(fā)的,GUI 核心來自于 Chrome,而 JavaScript 引擎使用 v8。 https://www.oschina.net/p/electron?hmsr=aladdin1e1
最近接觸到一個用electron開發(fā)的軟件,要對軟件做一些逆向分析。
發(fā)現(xiàn)跟常見的win32 api開發(fā)的程序還是很不一樣的,以前的分析方法啊技巧在這里用不上了,畢竟軟件大部分功能是由html、js等開發(fā)的。
源碼
electron軟件發(fā)布時,一般都將源碼打包在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開發(fā)的同學,最常用的快捷鍵多半就是f12了。electron核心也是使用的chrome,那是不是可以用f12來調(diào)試呢。
理想很豐滿,現(xiàn)實很殘酷。
electron開發(fā)者在開發(fā)時,肯定會使用f12,但是發(fā)布時就不會把調(diào)試功能屏蔽了,不然底褲不都被扒了。
不過嘛,他雖然關了,但是我們可以給打開嘛,自己給他扒出來。
方法如下:
asar extract app.asar app //解壓拿到源碼
mainWindow.webContents.openDevTools();//找到main.js,加入這行代碼
asar pack app app.asar //重新打包,替換原始app.asar然后我們就可以開心的像開發(fā)一樣調(diào)試了。
如果覺得這樣太麻煩了,另外再提供一條思路,有興趣的同學可以折騰一下,做個通用的工具。
翻翻electron相關源碼,寫個工具,hook openDevTools,讓其正常工作。
WebContents::WebContents
WebContents::OpenDevTools
.SetMethod("openDevTools", &WebContents::OpenDevTools)
.SetMethod("toggleDevTools", &WebContents::ToggleDevTools)more
通常情況下,如果僅僅是js代碼的逆向和修改。通過上面的兩節(jié),加上調(diào)試基本都能搞定了。
可能有些情況下,js無法搞定。
js加密了,未找到解密方法,無法拿到js源碼
js混淆嚴重,無法恢復,不好修改
…
此時可能可以試試hook內(nèi)核的一下東西,可以通過翻閱chrome、electron、v8的源碼對比分析。
比如想對Canvas做些修改,js層又不好弄,那么就可以找到electron在C代碼層實現(xiàn),做一些事情。
class HTMLCanvasElement最后提一句,所有代碼都編譯在發(fā)布程序的exe中,可以通過字符串等特征,對比源碼分析,找到需要的功能。
