(Không) ứng dụng Habr chính thức - HabrApp 2.0: giành quyền truy cập

Một buổi tối uể oải và khá buồn chán, tôi lật giở chính thức Ứng dụng Habr, một lần nữa tôi uốn cong các ngón tay của mình, mỗi ngón tay cho mỗi tính năng không hoạt động. Ví dụ ở đây bạn không thể bình luận, ở đây bạn bị từ chối quyền bình chọn, và nói chung, tại sao các công thức không hiển thị trên màn hình?

(Không) ứng dụng Habr chính thức - HabrApp 2.0: giành quyền truy cập
Mọi chuyện đã được quyết định: chúng tôi cần thứ gì đó thoải mái, dễ chịu, thứ gì đó của riêng mình. Còn đơn đăng ký Habr của riêng bạn thì sao?
Hãy để tôi cung cấp cho bạn một vài ảnh chụp màn hình để hiểu tình hình.

(Không) ứng dụng Habr chính thức - HabrApp 2.0: giành quyền truy cậpBằng cách nào đó nó trông như thế này này - của. ứng dụng habr.com

Danh sách "bất tiện"

  • Bạn không thể xếp hạng một ấn phẩm có xếp hạng khác 0
  • Không phải lúc nào cũng có thể viết bình luận
  • Cuộc thăm dò không hoạt động
  • Công thức không hiển thị trong giao diện tối (màu đen trên nền đen)
  • Không phải tất cả dấu trang đều có sẵn

Có, ứng dụng chưa được cập nhật kể từ tháng XNUMX năm ngoái, nhưng nó vẫn tệ. Nói chung là cần phải sửa.

Phần một. Đang tìm kiếm quyền truy cập.

Truy vấn nhanh trên Google "API habrahabr" nó nói nó đã khá lỗi thời kho trên Github, không được cập nhật kể từ Tháng Mười Một 21 2016, và điều này, trong giây lát, Hai năm rưỡi.

Bỏ qua sự thật rằng đây là PHP, hãy cuộn xuống và đọc:

Lấy ID ứng dụng

Lợi dụng mẫu này trên Habrahabr, bạn cần mô tả ngắn gọn bản chất của ứng dụng mới và mục đích mà ứng dụng đó cần API.

Không có câu hỏi nào, nếu bạn cần có quyền truy cập, thì bạn cần nó. Chúng tôi viết một lá thư (viết tắt):

Viết

Có mong muốn làm đơn đăng ký Habr dựa trên PWA. Cái này có một vài nguyên nhân. 

Điều đầu tiên và rõ ràng nhất: ứng dụng Android không đáp ứng được yêu cầu cá nhân của tôi.

Thứ hai: không có đủ thông báo gốc về tất cả những thứ thường đến qua email (ví dụ: nhận xét).

Thứ ba: thông tin cá nhân (như một góc nhìn) về những người/trung tâm mà tôi quan tâm, có tính đến sở thích của tôi.

Tất nhiên, câu trả lời không mấy dễ chịu nhưng ít nhất cũng thành thật:

Rất tiếc, quyền truy cập vào API của chúng tôi hiện không khả dụng. Chúng tôi dự định tiếp tục cung cấp quyền truy cập sau khi hoàn tất API nhưng chúng tôi chưa có bất kỳ ngày chính xác nào, bởi vì Chúng tôi hiện đang bận giải quyết các nhiệm vụ ưu tiên khác.

"Ổn không có vấn đề! Chúng ta sẽ nghĩ ra điều gì đó!" - Tôi tự nhủ và bắt đầu tìm kiếm.

Phần hai. Những cuộc khai quật sâu.

Dựa trên logic, nếu ứng dụng đang chạy thì ứng dụng đó có quyền truy cập vào API và được cài đặt sẵn vào ứng dụng. Hãy phân tích.

Vì chúng tôi đang giải quyết vấn đề lưu lượng truy cập nên Wireshark là lựa chọn của chúng tôi. Không phải không gặp khó khăn khi kết nối điện thoại với Internet thông qua máy tính để bàn, chúng tôi mở ứng dụng và xem xét các yêu cầu:

(Không) ứng dụng Habr chính thức - HabrApp 2.0: giành quyền truy cập
Rõ ràng là không có gì rõ ràng

Đúng, mọi thứ đều được mã hóa, nhưng tôi không muốn can thiệp vào mật mã. Sau đó, bạn cần nhìn vào bên trong ứng dụng.

Dịch ngược . Apk, hãy bắt đầu tìm kiếm. API nào cần gì? Phải, thiết bị đầu cuối, nơi mà tất cả các yêu cầu đều được gửi tới. Đây có lẽ là http(s), chúng ta hãy thử tìm “https://”:

Trong tập tin AuthLinkManager.smali chúng ta tìm thấy

.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"

Đây là mã cho máy ảo Android (máy ảo Dalvik), không dễ hiểu lắm đối với con người, nhưng vẫn khá nhiều thông tin. Ba hằng số này, được đánh giá theo nội dung và tên của chúng, cũng như kho lưu trữ GitHub, được sử dụng để yêu cầu mã thông báo truy cập bằng phương thức GET.

Hãy nhìn xa hơn. Tệp xuất hiện tiếp theo trong tìm kiếm là NetworkModule.smali:

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

Và đây là nơi đáp ứng yêu cầu của bạn!

Để ứng dụng khách tự viết hoạt động bình thường, chỉ còn một điều cần tìm hiểu - client_id, rất có thể là mã định danh duy nhất cho ứng dụng.

Tuy nhiên, việc tìm kiếm văn bản này trong mã nguồn không dẫn đến việc tìm kiếm thông tin liên quan...

Nhưng đột nhiên trong một tập tài liệu, mắt tôi bắt gặp vài dòng thú vị:

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

Như bạn có thể hiểu, đây là một mục nhật ký. Nhưng ghi lại cái gì?

Một phần ba. Đây là những bản ghi!

Chúng tôi sử dụng adb logcat để xem nhật ký ứng dụng.

(Không) ứng dụng Habr chính thức - HabrApp 2.0: giành quyền truy cập

Thật bất ngờ, nhật ký thậm chí còn chi tiết hơn mong đợi.

Ở đây chúng tôi không chỉ có những gì chúng tôi cần client_idNhưng token người dùng/ứng dụng và đăng nhập и mật khẩu bằng văn bản rõ ràng!

Một số thuyết âm mưuSự hiện diện đơn thuần của thông tin đăng nhập và mật khẩu trong nhật ký không gây hại gì vì những nhật ký này chỉ có thể được đọc bằng quyền root hoặc kết nối thông qua adb. Nhưng do thực tế là trong số những người đọc Habr có những nhà phát triển Android có thể đã bật tính năng gỡ lỗi nên điều này trở thành một vấn đề.

Trong trường hợp này, việc “sạc miễn phí” tại sân bay có thể dẫn đến việc bị trộm tài khoản, nhưng ai cần đến nó?
Từ những nhật ký này, chúng tôi có thể trích xuất:

  • client_id и apikeycần thiết để truy cập api;
  • URL ủy quyền người dùng (lạ, nhưng không có gì trong kho về phương pháp này, có thể nó không được cung cấp?)

Đó là cách nó đã xảy ra. Dựa trên nghiên cứu nhỏ này, công việc đang được tiến hành trong một dự án nhỏ - việc triển khai ứng dụng di động của riêng chúng tôi. Tôi yêu cầu những người muốn giúp đỡ viết một tin nhắn và những người khác - bỏ phiếu (vì tôi muốn hiểu liệu có ai cần điều này không).

Cảm ơn bạn!

Chỉ những người dùng đã đăng ký mới có thể tham gia khảo sát. Đăng nhập, xin vui lòng.

Bạn có sử dụng ứng dụng di động Habr không?

  • Có, tôi đang sử dụng, tôi rất hài lòng

  • Có, tôi sử dụng, ứng dụng gây bất tiện

  • Không, tôi sử dụng phiên bản web trên điện thoại của mình

  • Không, tôi sử dụng Habr từ máy tính của mình

357 người dùng bình chọn. 30 người dùng bỏ phiếu trắng.

Nguồn: www.habr.com

Thêm một lời nhận xét