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. Typora 最新中文版安装破解V1.4.8

    Typora中文破解版是一款好用极简免费的跨平台Markdown编辑器,软件使用这款软件能够帮助用户轻松将文本转换到HTML,软件从底层向上设计,软件支持markdown的标准语法,同时这款软件还支持 ...

  2. RTSP Server(LIVE555)源码分析(一)-重要关系类

    live项目包括四个基本的库,程序入口类(在mediaServer中),各种测试代码(测试代码在testProgs里面). 四个基本的库分别是: UsageEnvironment&TaskSc ...

  3. 沁恒 CH32V208(三): CH32V208 Ubuntu22.04 Makefile VSCode环境配置

    目录 沁恒 CH32V208(一): CH32V208WBU6 评估板上手报告和Win10环境配置 沁恒 CH32V208(二): CH32V208的储存结构, 启动模式和时钟 沁恒 CH32V208 ...

  4. Prism Sample 29-InvokeCommandAction

    一下子跳到29,不是我的错,应该是新版本中去掉了一些过重的功能,案例就也去掉了,所以不是我的错. 本例是演示行为转命令的,事实上前面已经用到了. xmlns:i="http://schema ...

  5. windows10下编译32位和64位webrtc(m77)静态库

    1. windows10下编译32位和64位webrtc(m77)静态库 省略挂代理下载depot_tools以及webrtc代码的过程... 可参考webrtc编译 务必在 cmd 终端环境下进入到 ...

  6. 【Azure 媒体服务】Media Service的编码示例 -- 创建缩略图子画面的.NET代码调试问题

    问题描述 在中国区Azure上,使用Media Service服务,想要使用.NET的代码来对上传视频创建缩略图(Thumbnail) . 通过官网文档(https://docs.azure.cn/z ...

  7. pg数据库的备份和恢复以及sql脚本错误的解决方法

    1.备份单库单表的数据,以insert语句的方式 pg_dump -h IP -p 端口 -U 用户名 -t 表名 --inserts –f dbname.sql 数据库名 pg_dump -h 17 ...

  8. 2021-02-03:手写代码:KMP算法。

    福哥答案2021-02-03: Knuth-Morris-Pratt 字符串查找算法,简称为 KMP算法,常用于在一个文本串 S 内查找一个模式串 P 的出现位置.这个算法由 Donald Knuth ...

  9. 2022-02-23:如何搭建k8s单机环境(用k3s),并且搭建dashboard?

    2022-02-23:如何搭建k8s单机环境(用k3s),并且搭建dashboard? 答案2022-02-03: 使用场景:个人电脑.需要安装虚拟机,操作系统是centos. 个人电脑上测试,不需要 ...

  10. 2021-09-01:三数之和。给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。

    2021-09-01:三数之和.给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组. ...