Habr官方应用程序-HabrApp 2.0:访问

在一个乏味而又已经很无聊的夜晚,我翻阅了Habr的官方应用程序,我再次弯曲我的手指,每个空闲的功能都要一根手指。 例如,在这里无法发表评论,他们被剥夺了投票权,并且通常,为什么公式在屏幕上不可见?



决定:您需要自己舒适,愉快的东西。 您的Habr应用程序如何?
让我们给出一些截图以了解情况。

看起来像这样 -的。 habr.com应用

“不便”清单
  • 您不能对出版物的评分不为0进行评分
  • 并非总是可以发表评论
  • 调查不起作用
  • 公式在深色主题中不可见(黑底黑字)
  • 并非所有书签都可用

是的,该应用程序自去年八月以来尚未更新,但仍然很糟糕。 通常,您需要修复它。

第一部分 寻找访问。


已过时的github 存储库已经向Google发出了“ habrahabr API”的快速请求,该存储库201611月21日以来未进行过更新,一分钟之内是两年半

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


获取应用程序ID



在Habrahabr上使用此表单 ,您需要简要描述新应用程序的本质以及需要API的目的。


这不是一个问题,如果您需要访问,那么您需要。 我们写一封信(缩写):


一封信

希望基于PWA申请Habr。 这有几个原因。


第一个也是最容易理解的:Android应用程序不符合我的个人要求。


第二:没有足够的本机通知来通知邮局通常遇到的各种事情(例如,评论)。


第三:给我感兴趣的人/枢纽的个人摘要(作为潜在客户)。


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


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


“好的,没关系! 我们会想出一些办法!” 我告诉自己,开始搜寻。


第二部分 深挖。


根据逻辑,如果应用程序可以工作,则它可以访问API,并将其连接到应用程序中。 让我们分析一下。


由于我们要处理流量,因此Wireshark是我们的选择。 通过将电话通过固定计算机连接到Internet并非没有折磨,请打开应用程序并查看请求:


清楚,没有什么清楚

是的,所有内容都是加密的,但我不想弄乱密码学。 然后,您需要查看应用程序本身。

反编译.apk之后 ,我们开始搜索。 API需要什么? 是的, endpoint ,所有请求都发送到的地方。 这可能是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虚拟机( Dalvik VM )的代码,虽然对人类来说还不是很清楚,但是仍然非常有用。 根据它们的内容和名称以及GitHub存储库判断这三个常量,可以使用GET方法请求访问令牌。


我们进一步看。 您在搜索中找到的下一个NetworkModule.smali文件:


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

这是提出要求的地方!


client_idclient_id客户端正常工作,只剩下一件事了: client_id ,它很可能是应用程序的唯一标识符。


但是,在源中搜索此文本并没有找到相关信息...


但是突然之间,在一个文件中,我的视线吸引了我:


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

您可以理解,这是一个日志条目。 但是记录什么?


第三部分。 这是日志!


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



出乎意料,但是日志比预期的还要详细。


这不仅是我们client_idclient_id ,而且还包括用户/应用程序令牌 ,以及纯文本登录名密码


一些阴谋论
登录和密码日志本身本身并没有任何害处,因为只能使用root权限或adb连接读取这些日志。 但是由于事实上在阅读Habr的人们中,有很多可以启用调试功能的android开发人员,所以这成为一个问题。

在这种情况下,机场的“免费”可能导致帐户被盗,尽管谁需要呢?

从这些日志中,您可以进行以下操作:

  • 访问api所需的client_idapikey ;
  • 用户授权URL(很奇怪,但是在存储库中没有关于此方法的信息,也许没有提供?)

事情就这样发生了。 基于这项微小的研究,一个小型项目(它自己对移动应用程序的实现)已经在进行中。 如果您想提供帮助,请写信给其他人和其他人-投票(因为我想了解是否有人需要这样做)。

感谢您的关注!

Source: https://habr.com/ru/post/zh-CN447148/


All Articles