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很可能不会在短期内允许这种情况发生。

ChatGPT 1.0.0安卓分析,仅限国内分享的更多相关文章

  1. Solr4.8.0源码分析(10)之Lucene的索引文件(3)

    Solr4.8.0源码分析(10)之Lucene的索引文件(3) 1. .si文件 .si文件存储了段的元数据,主要涉及SegmentInfoFormat.java和Segmentinfo.java这 ...

  2. Android5.0 Recovery源代码分析与定制(一)【转】

    本文转载自:http://blog.csdn.net/morixinguan/article/details/72858346 版权声明:本文为博主原创文章,如有需要,请注明转载地址:http://b ...

  3. 编译调试 .NET Core 5.0 Preview 并分析 Span 的实现原理

    很久没有写过 .NET Core 相关的文章了,目前关店在家休息所以有些时间写一篇新的

  4. AFNetWorking3.0源码分析

    分析: AFNetWorking(3.0)源码分析(一)——基本框架 AFNetworking源码解析 AFNetworking2.0源码解析<一> end

  5. JavaScript中的ParseInt("08")和“09”返回0的原因分析及解决办法

    今天在程序中出现一个bugger ,调试了好久,最后才发现,原来是这个问题. 做了一个实验: alert(parseInt("01")),当这个里面的值为01====>07时 ...

  6. Solr5.0源码分析-SolrDispatchFilter

    年初,公司开发法律行业的搜索引擎.当时,我作为整个系统的核心成员,选择solr,并在solr根据我们的要求做了相应的二次开发.但是,对solr的还没有进行认真仔细的研究.最近,事情比较清闲,翻翻sol ...

  7. Solr4.8.0源码分析(25)之SolrCloud的Split流程

    Solr4.8.0源码分析(25)之SolrCloud的Split流程(一) 题记:昨天有位网友问我SolrCloud的split的机制是如何的,这个还真不知道,所以今天抽空去看了Split的原理,大 ...

  8. Solr4.8.0源码分析(24)之SolrCloud的Recovery策略(五)

    Solr4.8.0源码分析(24)之SolrCloud的Recovery策略(五) 题记:关于SolrCloud的Recovery策略已经写了四篇了,这篇应该是系统介绍Recovery策略的最后一篇了 ...

  9. Solr4.8.0源码分析(23)之SolrCloud的Recovery策略(四)

    Solr4.8.0源码分析(23)之SolrCloud的Recovery策略(四) 题记:本来计划的SolrCloud的Recovery策略的文章是3篇的,但是没想到Recovery的内容蛮多的,前面 ...

  10. Solr4.8.0源码分析(22)之SolrCloud的Recovery策略(三)

    Solr4.8.0源码分析(22)之SolrCloud的Recovery策略(三) 本文是SolrCloud的Recovery策略系列的第三篇文章,前面两篇主要介绍了Recovery的总体流程,以及P ...

随机推荐

  1. Sitecore10 Demo演示环境Azure一键部署(Step By Step Guide to installing Sitecore10 in Azure Paas)

    本文演示Sitecore XP Single(XP0)在Azure上的一键部署,即"30分钟生成Sitecore演示环境"的一环. 关于XP(即Sitecore Experienc ...

  2. Nginx部署多个vue前端项目

    前言:在前端项目的部署上需要让2个前端项目都部署到一个IP地址和端口下,那么我们这里就要用到Nginx了,接下来我们看看如何在一个Nginx下部署2个前端项目. 例如我的服务器地址是 http://1 ...

  3. Prism Sample 24-NavigationJournal

    本例是在上一案例中导航参数的基础上增加了导航的历史记录功能,就是向前向后的功能. 导航本身很简单,以下代码就实现了: public void OnNavigatedTo(NavigationConte ...

  4. "树形List"与"扁平List"互转(Java实现)

    背景:在平时的开发中,我们时常会遇到下列场景 公司的组织架构的数据存储与展示 文件夹层级的数据存储与展示 评论系统中,父评论与诸多子评论的数据存储与展示 ...... 对于这种有层级的结构化数据,就像 ...

  5. 2023-01-15:销售员。编写一个SQL查询,报告没有任何与名为 “RED” 的公司相关的订单的所有销售人员的姓名。以 任意顺序 返回结果表。 DROP TABLE IF EXISTS `com

    2023-01-15:销售员.编写一个SQL查询,报告没有任何与名为 "RED" 的公司相关的订单的所有销售人员的姓名.以 任意顺序 返回结果表. DROP TABLE IF EX ...

  6. 玩转服务器之环境篇:PHP和Python环境部署指南

    前几篇文章中讲解了如何搭建docker和Java Web环境的方法,本篇文章来教大家搭建一个好的PHP和Python环境,可以帮助开发和运行PHP和Python应用程序,使其更加高效和稳定. 一. P ...

  7. Linux 内存管理 pt.3

    哈喽大家好,我是咸鱼 在<Linux 内存管理 pt.2>中我们学习了多级页表和大页,我们知道了由于历史遗留的问题,Linux 的页通常为 4KB 这样就会导致一个页表里面会有特别多页,为 ...

  8. 【HDU】1559 最大子矩阵 (二维前缀和,动态规划)

    动态规划之二维前缀和 题目 给你一个m×n的整数矩阵,在上面找一个x×y的子矩阵,使子矩阵中所有元素的和最大. 输入 输入数据的第一行为一个正整数T,表示有T组测试数据.每一组测试数据的第一行为四个正 ...

  9. Odoo 13之十三 :开发之创建网站前端功能

    Odoo 13开发之创建网站前端功能 Odoo 起初是一个后台系统,但很快就有了前端界面的需求.早期基于后台界面的门户界面不够灵活并且对移动端不友好.为解决这一问题,Odoo 引入了新的网站功能,为系 ...

  10. HttpURLConnection调用webservice,c#、java、python等HTTP调用webservice,简单的webservice调用

    以前调用webservice一般使用axis.axis2先生成java类后,直接引用,多方便.但是有的webservice接口非常的函数,生成的java类非常多,有没有一种非常简化的方法. axis2 ...