(非)官方 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 名用戶棄權。

來源: www.habr.com

添加評論