最近公司想做地圖業務,但是考慮到數據的重要性,我們就需要從各個角度進行評估,如何保證我們的程序安全;經過長期的調研發現微信小程序是沒辦法防止別人抓包的,只要連上charles就能隨意抓取微信小程序的任意一個接口數據,因此我們只能對程序代碼進行加固,主要的方式如下:
1. 接口通訊層面添加signature,后台獲取參數后進行解密比對,如果不一致直接返回報錯。
2. 接口次數限制,為了防止別人頻繁刷后台接口,接口需要對同一用戶做次數限制。
3. 數據加密,為了防止別人輕易獲取數據,需要對接口返回值再后台進行對稱加密,前端進行解密。
以上是目前考慮的安全防范,但是由於小程序本身是可以破解的,因此以上的方案就現的不太安全,但是能夠起到一定的保護作用。可能很多人對小程序破解感到陌生,認為小程序是微信的,微信的安全肯定會很高,不可破解,事實並非如此。
於是我針對OFO小程序做一次編譯和破解,深入了解一下情況,看看我們的加密是否安全,如果解密之后,代碼暴露無疑,公鑰和算法輕易拿到,說明前端永遠都不是安全的。
一、下載網易模擬器
根據自己的系統選擇對應的軟件進行安裝。
安裝成功后,如下:
二、再模擬器上面安裝對應的軟件(微信、RE文件管理器)
1. 打開應用中心,搜索 RE文件管理器和微信,分別進行下載
2. 打開微信,輸入帳號進行登錄,登錄成功后,點擊發現,點擊 “小程序”
3. 搜索ofo小黃車
4. 打開ofo小黃車官方版本
此頁面可能會打不開,可能是模擬器的問題,但是沒關系,小程序文件已經下載到本地了。
三、打開RE文件管理器
1. 進入到目錄中:/data/data/com.tencent.mm/MicroMsg
這個下面會存放各種文件,沒登錄一個用戶會產生一個hash串作為用戶標識
如上圖所示,我登錄了2個微信帳號,產生了2個hash串。
2. 隨便選擇一個用戶進去,確保這個用戶點擊過ofo小程序。(如果只登錄過一個帳號,里面只有一個hash串)
3. 進入到appbrand中,里面包含2個文件夾,一個是pkg(執行文件),一個是jscache(緩存文件)
4. 打開pkg文件夾
里面包含了打開過的小程序執行文件,找到ofo的文件進行;
a. 鼠標單擊長按,右邊會出現一個選項
b. 選擇創建tar文件
c. 接下來,選擇不壓縮、壓縮成功后,選擇查看,會進到查看目錄,看到剛剛壓縮的tar文件
5. 鼠標長按此文件,右邊選擇發送,通過微信發送給對應的好友,不能直接拷貝到自己電腦上,只能通過微信接收的方式。
四、編譯小程序源碼
1. 打開終端,用git下載代碼
git clone https://github.com/qwerty472123/wxappUnpacker.git
2. 安裝依賴,安裝之前需要安裝Node環境(此處自行安裝,不提供安裝方式)
cd wxappUnpacker
npm i 或者 cnpm i
//安裝依賴文件
3. 運行代碼
//window系統: node wuWxapkg.js C:\work\UppackWxApp\app\_362760388_3.wxapkg //Mac系統 node wuWxapkg.js /Users/jacksoft/Desktop/_-1050685970_73.wxapk
運行完成后,即可生成編譯之后的源碼,如下:
目錄結構:
頁面結構:
以上即為對OFO小程序的破解步驟,通過編輯器打開看了一下代碼,發現可讀性還是非常好的,結構完整,部分變量做了混淆,即使里面存放了公鑰和算法都可以找到進行研究,因此前端永遠都不是安全的。
我們能做的,就是先把自己變強大,等到強大以后,才會有人來攻擊你,針對一個小企業要考慮的不是安全而是如何快速成長和壯大。
大企業自然有更多的人才來進行安全防護;想做什么功能,大膽的上,不要猶豫,用戶體驗至上,安全並重;至此此文章獻給前端愛好者。
近期剛上線一門基於微信小程序、公眾號和小程序雲開發的微信授權、分享和支付的專項課程,如果你對支付感興趣可以考慮入手:
https://coding.imooc.com/class/343.html
React全家桶開發通用的后台管理系統:
https://coding.imooc.com/class/236.html
Vue2.0+Vue-Router+Vuex+Node+Mongo開發全棧商城課程
https://coding.imooc.com/class/113.html
慕課講師:河畔一角