Hybrid APP 表示這個APP 有 java 程式 與Web程式混合在一起 APP 會透過JAVA 它利用特定框架提供的 API 來呼叫原生的功能 透過 WebView() 來渲染 HTML/CSS/Javascript Web 內容 等下會以React Native 為例子 進行靜態分析
由於JADX 只能Decode 資源檔案 與 反編譯 Java bytecode 產生 很像java 的虛擬程式碼 並不能直接 JavaScript 檔案 並且開發人員會使用一個叫Hermes engine 將 JavaScript代碼轉換為HERMES Bytecode 來優化程式 加一層混淆 React Native 會把javascript 檔案 包成 index.android.bundle 裡面將會是我們要分析的主要目標
要確定APP 是否有使用react native框架 可以檢查 有沒有擴展 ReactActivity
例如
這裡 MainActiivty 對於這個React project 來說像是Android Environment 與 JavaScript Runtime 的橋樑負責初始化設定 來讓React Native 與 Android 更好的互相協作 程式會放在/res/assets/index.android.boundle
React 在build APP 時會壓縮 JavaScript 的Code 來縮小大小 這些被壓縮過javaScript 蠻難閱讀的 我們可以用 js-beautify 來還原
js-beautify 安裝
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.2/install.sh | bash
source ~/.bashrc
nvm install node
npm -g install js-beautify
把APK 用APKtool 拆開
apktool d myapp
使用js-beautify 還原
js-beautify myapp/assets/index.android.bundle -o beautified_index.android.bundle.js
就能看到一些 React Native 敏感的邏輯