iT邦幫忙

2025 iThome 鐵人賽

DAY 24
0

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
例如
https://ithelp.ithome.com.tw/upload/images/20251006/20149459eXbyuASwm5.jpg

這裡 MainActiivty 對於這個React project 來說像是Android Environment 與 JavaScript Runtime 的橋樑負責初始化設定 來讓React Native 與 Android 更好的互相協作 程式會放在/res/assets/index.android.boundle
https://ithelp.ithome.com.tw/upload/images/20251006/20149459ol5rO7ROlF.jpg
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 敏感的邏輯
https://ithelp.ithome.com.tw/upload/images/20251006/20149459cnDZo4nMDQ.jpg


上一篇
DAY 23 靜態分析 -不安全加密實作
系列文
我是不可能一直學Android 絕對不會24
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言