(非)官方 Habr 应用程序 - HabrApp 2.0:获取访问权限

一个慵懒又无聊的夜晚,我翻阅着 官方 Habr 应用程序,我再次弯曲手指,每个不工作的功能都用一根手指。 例如,在这里你不能发表评论,在这里你被剥夺了投票权,而且一般来说,为什么公式在屏幕上不可见?

(非)官方 Habr 应用程序 - HabrApp 2.0:获取访问权限
我们决定:我们需要一些舒适、愉快、属于我们自己的东西。 你自己的 Habr 申请怎么样?
让我给你几张截图来了解一下情况。

(非)官方 Habr 应用程序 - HabrApp 2.0:获取访问权限不知怎的,它看起来像这样 - 的。 habr.com 应用程序

“不便”清单

  • 您无法对评级不为 0 的出版物进行评级
  • 并不总是可以写评论
  • 民意调查不起作用
  • 公式在深色主题中不可见(黑底黑字)
  • 并非所有书签都可用

是的,该应用程序自去年八月以来就没有更新过,但仍然很糟糕。 一般来说,需要修复。

第一部分。 正在寻找访问权限。

快速谷歌查询 “哈布拉哈布尔 API” 它说它已经很过时了 存储库 在 Github 上,此后未更新 十一月21 2016,而这一刻, 两年半.

忽略这是 PHP 的事实,向下滚动并阅读:

获取应用程序 ID

利用 这个表格 在 Habrahabr 上,您需要简要描述新应用程序的本质以及它需要 API 的目的。

毫无疑问,如果您需要获得访问权限,那么您就需要它。 我们写了一封信(略):

希望基于 PWA 来制作 Habr 的应用程序。 有几个原因。 

第一个也是最明显的:Android 应用程序不符合我的个人要求。

其次:没有足够的关于通常通过电子邮件发送的各种内容的本机通知(例如评论)。

第三:考虑到我的兴趣,对我感兴趣的人/中心进行个人摘要(作为一个观点)。

当然,答案不是很令人愉快,但至少是诚实的:

不幸的是,目前无法访问我们的 API。 我们计划在完成 API 敲定后恢复提供访问权限,但我们还没有任何确切日期,因为我们目前正在忙于解决其他优先任务。

“好的没问题! 我们会想出一些办法的!” - 我告诉自己并开始寻找。

第二部分。 深挖掘。

根据逻辑,如果应用程序正在运行,则它可以访问 API,并且它被硬连线到应用程序中。 我们来分析一下。

由于我们处理的是流量,因此我们选择 Wireshark。 并非没有一些痛苦,通过台式计算机将手机连接到互联网后,我们打开应用程序并查看请求:

(非)官方 Habr 应用程序 - HabrApp 2.0:获取访问权限
清楚,没有什么是清楚的

是的,一切都是加密的,但我不想搞乱密码学。 然后您需要查看应用程序本身的内部。

反编译 APK。,让我们开始寻找吧。 任何 API 都需要什么? 正确的, 端点,所有请求所在的地方。 这可能是 http(s),让我们尝试找到“https://”:

在文件中 AuthLinkManager.smali 寻找

.field OAUTH:Ljava/lang/String; = "https://habrahabr.ru/auth/o/%s/"
.field OAUTH_PARAMS:Ljava/lang/String; = "?client_id=%s&response_type=token&redirect_uri=%s"
.field OAUTH_REDIRECT_URL:Ljava/lang/String; = "http://cleverpumpkin.ru"

这是Android虚拟机的代码(达尔维克VM),对于人类来说不是很容易理解,但仍然提供了相当多的信息。 这三个常量,根据其内容和名称以及 GitHub 存储库来判断,用于使用以下方法请求访问令牌 GET.

让我们进一步看一下。 搜索中接下来出现的文件是 NetworkModule.smali:

const-string v0, "https://habr.com/api/v1/"

这里是满足您要求的地方!

为了让自己编写的客户端正常工作,只剩下一件事需要弄清楚—— client_id,这很可能是应用程序的唯一标识符。

然而,在源代码中搜索这段文字并没有找到相关信息......

但突然在其中一份文件中,我的眼睛看到了一些有趣的线条:

const-string p8, "log-tag"
invoke-static {p8, p2}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I

正如您所理解的,这是一个日志条目。 但记录什么?

第三部分。 这些是日志!

我们用 adb logcat 查看应用程序日志。

(非)官方 Habr 应用程序 - HabrApp 2.0:获取访问权限

没想到,日志比想象的还要详细。

这里不仅有我们需要的 client_id代币 用户/应用程序,以及 логин и 密码 以纯文本形式!

一些阴谋论日志中仅存在登录名和密码不会造成任何损害,因为这些日志只能使用 root 权限或通过以下方式进行连接来读取: adb。 但由于阅读 Habr 的人中可能存在启用了调试的 Android 开发人员,这成为一个问题。

这种情况下,机场“免费充电”可能会导致账号被盗,但谁需要呢?
从这些日志中我们可以提取:

  • client_id и apikey需要访问 API;
  • 用户授权URL(奇怪,但是存储库中没有任何关于此方法的内容,也许没有提供?)

事情就是这样发生的。 基于这项微小的研究,一个小项目的工作已经在进行中——我们自己实现的移动应用程序。 我要求那些想要帮忙写消息的人以及其他所有人 - 投票(因为我想了解是否有人需要这个)。

谢谢你!

只有注册用户才能参与调查。 登录拜托

您使用 Habr 移动应用程序吗?

  • 是的,我用它,我很满意

  • 是的,我用的,应用造成不便

  • 不,我在手机上使用网页版

  • 不,我在电脑上使用 Habr

357 位用户投票。 30 名用户弃权。

来源: habr.com

添加评论