ChatGPT 1.0.0安卓分析,僅限國內分享

2023-07-26 18:00:49

ChatGPT 1.0.0安卓分析,僅限國內分享

部落格園首發,本文將對ChatGpt Android版本1.0.0 APK進行靜態解包分析和抓包分析,從ChatGpt Android APK功能的設計、校驗過程和程式碼內包含的資訊來預測OpenAI的大致走向。

Sensor Tower指出,在美國市場,iOS版ChatGPT應用下載量在6月份環比下降了38%;而根據Similarweb的資料,ChatGPT今年6月的全球桌面和移動裝置流量較上月下降9.7%,其網站的獨立使用者存取量下降5.78%,6月的訪客花在該網站上的時間也減少了8.5%。
《流量增長乏力 ChatGPT要進安卓 - 北京商報》

目前Android版本上線僅支援美國、印度、孟加拉國和巴西使用。但從今天應用上線的情況來看,截至7月26日早上,在Google Play上的下載數量為10+。然而,在幾個小時後的下午,下載數量已經達到了100K+,這充分證明了AI的熱度。儘管AI概念整體跌幅2%,但市場上對AI仍然持有濃厚興趣。

Android版本目前還只處於灰度測試階段,即在部分國家上線,一週內逐步覆蓋其他可以使用Google Play的國家。目前需要強制繫結Google Play的服務,後文將介紹通過hook的方式解決這個問題,但不提供重打包APK的方法。

靜態分析

這份分析報告提供了ChatGPT Android APK的各種資訊,包括安全評分、檔案資訊、應用程式資訊和活動等。其中,核心的內容包括:

  1. 安全評分:ChatGPT的安全評分為62/100,這意味著它在安全性方面存在一些潛在的風險。
  2. 檔案資訊:APK檔案的名稱為base.apk,大小為5.42MB,MD5為5ed65284c0962370b9dc9030a7342e61,SHA1為62a64392bca4fa127c70a7231dd38c72025a663a,SHA256為f66c90fdc3863c30cdbda0d84675c2cddb60cfbf36744df4718bcf6ec53f3498。
  3. 應用程式資訊:ChatGPT的包名為com.openai.chatgpt,主要活動為com.openai.chatgpt.MainActivity,目標SDK為33,最小SDK為23
  4. 活動:ChatGPT包含4個活動、9個服務、2個接收器和0個提供程式。
  5. 匯出的元件:ChatGPT中有1個匯出的活動、1個匯出的服務和2個匯出的接收器。
  6. 文字資訊:分析報告中還包含了一些文字資訊,例如應用程式中使用的字串和控制元件的名稱。

支援最小Android版本為 6.0,對於首個版本而言,目標就是覆蓋足夠多的使用者

許可權分析

這個應用使用了以下許可權:

  1. android.permission.RECEIVE_BOOT_COMPLETED
    允許ChatGpt 應用開機自啟,即系統開機後自動啟動,不過國內的OS上面,這種自啟行為不會被支援。

  2. android.permission.RECORD_AUDIO
    允許應用程式存取音訊記錄路徑, 目前ChatGpt Android版本是支援語音輸入。

  3. android.permission.VIBRATE
    允許應用程式控制振動器,用來優化語音輸入的體驗

  4. android.permission.WAKE_LOCK
    這個許可權用於,防止手機在和Chatgpt 聊天的過程中進入睡眠狀態(滅屏)

  5. com.android.vending.CHECK_LICENSE
    用於 Android 應用程式中與 Google Play 商店(Google Play Store)的許可驗證相關的廣播。這個廣播通常由 Google Play 服務自動傳送,用於檢查應用程式是否已經在裝置上獲得了有效的許可或授權。
    當你在應用程式中整合了 Google Play 許可驗證服務時,應用程式將使用這個廣播來與 Google Play 商店進行通訊,以驗證使用者是否已經購買了該應用程式或應用程式內購買的許可,這對於防止未經授權的使用、確保使用者購買了正版應用或在應用內購買中獲得許可等方面非常有用。
    從這個許可權上來看,目前ChatGpt的Android版本和Google Play的證書校驗有一個強繫結關係,在短期內,Android市場上不會脫離Google Play,所以國內的使用者想用上官方的Android 版本基本是不可能的。

  6. com.openai.chatgpt.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION
    openai 自定義的許可權

從定義的許可權上來看,許可權上中規中矩,沒有涉及到資訊的採集,強繫結了 Google Play服務,基礎功能不多,但夠穩定,屬於穩定迭代的階段,不足以看出 OpenAi 著急的情況。

介面

一共兩個主要介面
com.auth0.android.provider.RedirectActivity
com.openai.chatgpt.MainActivity

統計分析

APK內除了OpenApi 自有的 域名,用來校驗和資料傳輸實現基本的功能,還用了兩家公司資料統計功能。

  • api.mixpanel.com

Progress is possible
Simple and powerful analytics that helps everyone make better decisions.

  • api.statsig.com
    Statsig是一個位於華盛頓州西雅圖的新起的平臺,它使產品團隊能夠評估新功能的影響並向客戶交付產品,Statsig提供了一個平臺,使產品開發人員能夠執行快速、高質量的產品實驗並分析使用者如何響應新特性和功能,就像 Facebook、亞馬遜、Airbnb 和優步的產品團隊一樣今天做。
    其實驗分析和決策工具(例如 Pulse、Experiments+ 和 AutoTune)允許產品團隊每週執行數百次實驗並評估其產品每天的表現。

Vijaye Raji是初創公司Statsig的創始人兼CEO。這家公司致力於打造企業的測試和驗證的工具,為產品決策提供資料支援,其靈感來源於Facebook用於試驗新產品功能的內部工具。
在Vijaye看來,企業打造產品不可閉門造車,要儘快把最小可行產品推向潛在客戶,並通過真實的資料推動決策,實踐出真知。
「資料通常更多是在小範圍內正確,跟著資料走,你就能找到這個範圍內的最優解。」他說,「但想找到更優的結果,你就要擴巨量資料範圍,將更多區域性資料綜合起來。你必須要對資料有一定的產品思維才行。」

這兩個統計工具的目標均是進行簡單的資料分析,為決策提供思路。OpenAI很可能通過小範圍的灰度測試來實現資料驅動決策,並觀察市場表現,以做出下一步的決策。

開源

OpenAI 是一個人工智慧研究實驗室,由營利組織 OpenAI LP 與母公司非營利組織 OpenAI Inc 所組成,目的是促進和發展友好的人工智慧,使人類整體受益。OpenAI 成立於 2015 年底,總部位於舊金山,組織目標是通過與其他機構和研究者的「自由合作」,向公眾開放專利和研究成果。

不過現在的所有功能和程式碼都不會有任何開源的可能性:

"no_licenses_available" : "This app does not have any open source licenses."

強繫結Google Play

如果沒有Google服務,安裝後會出現
"Check that Google Play is enabled on your device and that you're using an up-to-date version before opening the app. If the problem persists try reinstalling the app."

然後你只能選擇Close,然後退出應用。因此,沒有Google Play的國家,基本上無法使用該Android版本。

簡單分析了一下程式碼,然後發現有這段邏輯進行了控制:

private void showErrorDialog() {
    licenseCheckState = LicenseCheckState.CHECK_REQUIRED;
    try {
        this.activity.runOnUiThread(new LicenseClientV3$$ExternalSyntheticLambda4(this));
    } catch (RuntimeException ex) {
        Log.d(TAG, "Couldn't show the error dialog. " + Log.getStackTraceString(ex));
    }
}

/* access modifiers changed from: package-private */
/* renamed from: lambda$showErrorDialog$2$com-pairip-licensecheck3-LicenseClientV3  reason: not valid java name */
public /* synthetic */ void m17x91ba8288() {
    new AlertDialog.Builder(this.activity).setTitle("Something went wrong").setMessage("Check that Google Play is enabled on your device and that you're using an up-to-date version before opening the app. If the problem persists try reinstalling the app.").setPositiveButton("Close", new LicenseClientV3$$ExternalSyntheticLambda1(this)).setCancelable(false).show();
}

一般情況下,我會通過基本的工具先做一個簡單的測試。

console.log("loaded chatgpt js successfully");
Java.perform(function () {
    var Log = Java.use("android.util.Log");
    var LicenseClientV3 = Java.use('com.pairip.licensecheck3.LicenseClientV3');
    LicenseClientV3.showErrorDialog.implementation = function (){
        Log.d("10cl", 'intercept showErrorDialog' );
        //return this.showErrorDialog();
    };

});

#file-chatgpt_android_hook-js-L5-L6

com.pairip.licensecheck3 這個是 Google Play的證書校驗功能,當攔截後,點選登入,就會請求登入,然後請求跳轉到瀏覽器登入, 301 跳轉到chatgpt 的網頁端, 輸入賬號密碼
抓包的結果如下:

OpenAI屬於AI公司,對Android安全和反編譯方面可能沒有做太多處理,主要邏輯依賴於三方公司,並直接禁用敏感地區。
如果允許在國內使用並且沒有依賴Google Play,國內的玩家可以重打包並實現登入持久化,從而形成一個資料產生一層模糊網的產業。然而,OpenAI很可能不會在短期內允許這種情況發生。