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版本。

简单分析了一下代码,然后发现有这段逻辑进行了控制:

  1. private void showErrorDialog() {
  2. licenseCheckState = LicenseCheckState.CHECK_REQUIRED;
  3. try {
  4. this.activity.runOnUiThread(new LicenseClientV3$$ExternalSyntheticLambda4(this));
  5. } catch (RuntimeException ex) {
  6. Log.d(TAG, "Couldn't show the error dialog. " + Log.getStackTraceString(ex));
  7. }
  8. }
  9. /* access modifiers changed from: package-private */
  10. /* renamed from: lambda$showErrorDialog$2$com-pairip-licensecheck3-LicenseClientV3 reason: not valid java name */
  11. public /* synthetic */ void m17x91ba8288() {
  12. 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();
  13. }

一般情况下,我会通过基本的工具先做一个简单的测试。

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

#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. 图像I、P、B帧介绍

    I.p.b 帧 I帧:帧内编码帧 :尽可能去除图像空间冗余信息来压缩传输数据量的帧内编码图像:P帧:前向预测编码帧: 通过充分将低于图像序列中前面已编码帧的时间冗余信息来压缩传输数据量的编码图像,也叫 ...

  2. js对象方法大全

    JavaScript中Object构造函数的方法 Object构造函数的方法节 Object.assign() 通过复制一个或多个对象来创建一个新的对象. Object.create() 使用指定的原 ...

  3. 深度学习03-(图像梯度处理、图像轮廓、图像预处理在AI中的应用)

    深度学习03-计算机视觉基本理论2 深度学习03-(计算机视觉基本理论2) 图像梯度处理 什么是图像梯度 模板运算 均值滤波 高斯滤波 中值滤波 边沿检测 锐化 图像轮廓 什么是图像轮廓 查找和绘制轮 ...

  4. python自产调试工具pdb的使用

    python自产调试工具pdb的使用 介绍 调试打印在写代码的时候不可避免 项目越大,调试可能花的时间会越多 print调试可能是最早用的,一段时间内你都会习惯这种方式 一旦成了老鸟,你应该会去用ID ...

  5. Vite-WeGPT聊天AI实例|vue3+pinia仿ChatGPT聊天界面

    基于vue3.x+vite4+pinia2仿chatgpt聊天模拟实例Vue3-WeGPT. 基于Vite4.x+Vue3+Pinia2+VEPlus+Vue3-Markdown等技术实现仿ChatG ...

  6. 2023-04-23:给定你一个整数数组 nums 我们要将 nums 数组中的每个元素移动到 A 集合 或者 B 集合中 使得 A 集合和 B 集合不为空,并且 average(A) == aver

    2023-04-23:给定你一个整数数组 nums 我们要将 nums 数组中的每个元素移动到 A 集合 或者 B 集合中 使得 A 集合和 B 集合不为空,并且 average(A) == aver ...

  7. 6R机械臂运动规划及仿真

    博客地址:https://www.cnblogs.com/zylyehuo/ 参考链接 Moveit!机械臂控制 文件下载-古月ROS教程视频配套资料 解决Could not find a packa ...

  8. Prompt learning 教学[技巧篇]:通过增加示例、引导词、特殊符号指令等方式让chatgpt输出更好的答案

    Prompt learning 教学[技巧篇]:通过增加示例.引导词.特殊符号指令等方式让chatgpt输出更好的答案 技巧1:To Do and Not To Do 在问答场景里,为了让 AI 回答 ...

  9. Django4全栈进阶之路21 项目实战(在线报修):创建App应用和Model模型

    创建应用App python manage.py startapp RepairApp 创建模型 在models.py文件中定义一个Repair模型来表示报修单,其中包含以下字段: repair_id ...

  10. jmeter跨线程组引用变量的3种方法

    利用BeanShell后置处理程序将参数设置为全局变量,用于跨线程传参(注:1.把提取变量的线程组放到引用变量的线程组前2.在测试计划中勾选"独立运行每个线程组") 方法1(jme ...