(Un) แอปพลิเคชัน Habr อย่างเป็นทางการ - HabrApp 2.0: เข้าถึงได้

ค่ำคืนหนึ่งที่อิดโรยและค่อนข้างน่าเบื่ออยู่แล้ว ฉันกำลังจะผ่านไป เป็นทางการ แอปพลิเคชัน Habr ฉันงอนิ้วอีกครั้ง หนึ่งอันสำหรับแต่ละฟีเจอร์ที่ไม่ทำงาน ตัวอย่างเช่นคุณไม่สามารถแสดงความคิดเห็นได้ที่นี่คุณถูกปฏิเสธสิทธิ์ในการลงคะแนนเสียงและโดยทั่วไปเหตุใดสูตรจึงไม่ปรากฏบนหน้าจอ

(Un) แอปพลิเคชัน Habr อย่างเป็นทางการ - HabrApp 2.0: เข้าถึงได้
มีการตัดสินใจแล้วว่า เราต้องการบางสิ่งที่สะดวกสบาย น่าพึงพอใจ เป็นของเราเอง แล้วการสมัคร Habr ของคุณเองล่ะ?
ฉันจะให้ภาพหน้าจอบางส่วนเพื่อทำความเข้าใจสถานการณ์

(Un) แอปพลิเคชัน Habr อย่างเป็นทางการ - HabrApp 2.0: เข้าถึงได้มีลักษณะเช่นนี้ มัน - ของ. แอปพลิเคชั่น habr.com

รายการ "ความไม่สะดวก"

  • คุณไม่สามารถให้คะแนนสิ่งพิมพ์ที่มีคะแนนแตกต่างจาก 0
  • ไม่สามารถเขียนความคิดเห็นได้เสมอไป
  • โพลไม่ทำงาน
  • สูตรไม่สามารถมองเห็นได้ในธีมสีเข้ม (ดำบนพื้นดำ)
  • บุ๊กมาร์กบางส่วนอาจไม่พร้อมใช้งาน

ใช่ แอปไม่ได้รับการอัพเดตตั้งแต่เดือนสิงหาคมปีที่แล้ว แต่ก็ยังแย่อยู่ โดยทั่วไปแล้วจะต้องมีการแก้ไข

ส่วนที่หนึ่ง กำลังมองหาการเข้าถึง

แบบสอบถาม Google ด่วน "habrahabr API" มันบอกว่ามันค่อนข้างล้าสมัยไปแล้ว ที่เก็บ บน Github ไม่ได้อัปเดตตั้งแต่นั้นมา 21 2016 พฤศจิกายนและสักครู่นี้ สองปีครึ่ง.

โดยไม่สนใจความจริงที่ว่านี่คือ PHP ให้เลื่อนลงและอ่าน:

รับ ID แอปพลิเคชัน

การใช้ประโยชน์จาก แบบฟอร์มนี้ บน Habrahabr คุณต้องอธิบายโดยย่อถึงสาระสำคัญของแอปพลิเคชันใหม่และวัตถุประสงค์ที่ต้องใช้ API

ไม่มีคำถาม หากคุณต้องการเข้าถึง คุณก็จำเป็นต้องมี เราเขียนจดหมาย (ตัวย่อ):

จดหมาย

มีความปรารถนาที่จะยื่นขอ Habr ตาม PWA มีหลายสาเหตุนี้. 

สิ่งแรกและชัดเจนที่สุด: แอปพลิเคชัน Android ไม่ตรงตามข้อกำหนดส่วนตัวของฉัน

ประการที่สอง: มีการแจ้งเตือนแบบเนทีฟไม่เพียงพอเกี่ยวกับสิ่งต่าง ๆ ที่มักจะมาทางอีเมล (เช่น ความคิดเห็น)

ประการที่สาม: สรุปส่วนตัว (ตามมุมมอง) เกี่ยวกับผู้คน/ศูนย์กลางที่ฉันสนใจ โดยคำนึงถึงความสนใจของฉัน

แน่นอนว่าคำตอบนั้นไม่น่าพอใจนัก แต่อย่างน้อยก็ตรงไปตรงมา:

ขออภัย ขณะนี้ยังไม่สามารถเข้าถึง API ของเราได้ เราวางแผนที่จะให้สิทธิ์เข้าถึงต่อหลังจากที่เราสรุป API เสร็จแล้ว แต่เรายังไม่มีวันที่ที่แน่นอน เนื่องจาก ขณะนี้เรากำลังยุ่งอยู่กับการแก้ไขงานสำคัญอื่นๆ

"ได้ไม่มีปัญหา! เราจะคิดอะไรสักอย่าง!” - ฉันบอกตัวเองและเริ่มมองหา

ส่วนที่สอง การขุดค้นลึก

ตามตรรกะ หากแอปพลิเคชันกำลังทำงานอยู่ ก็จะสามารถเข้าถึง API และเดินสายเข้าไปในแอปพลิเคชัน มาวิเคราะห์กัน

เนื่องจากเรากำลังเผชิญกับการจราจร Wireshark จึงเป็นตัวเลือกของเรา เมื่อเชื่อมต่อโทรศัพท์กับอินเทอร์เน็ตผ่านคอมพิวเตอร์เดสก์ท็อปแล้วเราก็เปิดแอปพลิเคชันและดูคำขอ:

(Un) แอปพลิเคชัน Habr อย่างเป็นทางการ - HabrApp 2.0: เข้าถึงได้
ชัดเจนว่าไม่มีอะไรชัดเจน

ใช่ ทุกอย่างถูกเข้ารหัส แต่ฉันไม่อยากยุ่งกับการเข้ารหัส จากนั้นคุณต้องดูภายในแอปพลิเคชันเอง

ถอดรหัสแล้ว . เอพีเคเรามาเริ่มค้นหากันเลย API ใด ๆ ต้องการอะไร? ขวา, ปลายทางสถานที่ที่คำขอทั้งหมดไป นี่อาจเป็น http ลองค้นหา “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 (ดาลวิค วีเอ็ม) ไม่ค่อยเป็นที่เข้าใจสำหรับมนุษย์ แต่ก็ยังให้ข้อมูลค่อนข้างมาก ค่าคงที่ทั้งสามนี้ ตัดสินจากเนื้อหาและชื่อ รวมถึงพื้นที่เก็บข้อมูล 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

อย่างที่คุณเข้าใจ นี่คือรายการบันทึก แต่บันทึกอะไรล่ะ?

ส่วนที่ XNUMX นี่คือบันทึก!

เราใช้ adb logcat เพื่อดูบันทึกแอปพลิเคชัน

(Un) แอปพลิเคชัน Habr อย่างเป็นทางการ - HabrApp 2.0: เข้าถึงได้

โดยไม่คาดคิด บันทึกมีรายละเอียดมากกว่าที่คาดไว้

ที่นี่เราไม่เพียงมีสิ่งที่เราต้องการเท่านั้น client_idแต่ เหรียญ ผู้ใช้/แอปพลิเคชัน และ เข้าสู่ระบบ и รหัสผ่าน ในข้อความธรรมดา!

ทฤษฎีสมคบคิดบางประการการมีอยู่ของการเข้าสู่ระบบและรหัสผ่านในบันทึกไม่เป็นอันตรายต่อสิ่งใด เนื่องจากบันทึกเหล่านี้สามารถอ่านได้ด้วยสิทธิ์รูทหรือการเชื่อมต่อผ่าน adb. แต่เนื่องจากในหมู่คนที่อ่าน Habr มีนักพัฒนา Android ที่อาจเปิดใช้งานการแก้ไขข้อบกพร่อง สิ่งนี้จึงกลายเป็นปัญหา

ในกรณีนี้ “การเรียกเก็บเงินฟรี” ที่สนามบินอาจส่งผลให้บัญชีถูกขโมย แต่ใครจะต้องการล่ะ?
จากบันทึกเหล่านี้เราสามารถแยกได้:

  • client_id и apikeyจำเป็นต้องเข้าถึง API;
  • URL การอนุญาตผู้ใช้ (แปลก แต่ไม่มีสิ่งใดในที่เก็บเกี่ยวกับวิธีการนี้ อาจไม่ได้ระบุไว้ใช่ไหม)

นั่นเป็นวิธีที่มันเกิดขึ้น จากการวิจัยเล็กๆ นี้ งานกำลังดำเนินอยู่ในโครงการขนาดเล็ก - การใช้งานแอปพลิเคชันมือถือของเราเอง ฉันขอให้ผู้ที่ต้องการช่วยเขียนข้อความและทุกคน - ลงคะแนน (เพราะฉันต้องการเข้าใจว่ามีใครต้องการสิ่งนี้หรือไม่)

ขอบคุณ!

เฉพาะผู้ใช้ที่ลงทะเบียนเท่านั้นที่สามารถเข้าร่วมในการสำรวจได้ เข้าสู่ระบบ, โปรด.

คุณใช้แอปพลิเคชันมือถือ Habr หรือไม่?

  • ใช่ ฉันใช้มัน ฉันพอใจกับมัน

  • ใช่ ฉันใช้มัน แอปพลิเคชันทำให้เกิดความไม่สะดวก

  • ไม่ ฉันใช้เวอร์ชันเว็บบนโทรศัพท์ของฉัน

  • ไม่ ฉันใช้ Habr จากคอมพิวเตอร์

ผู้ใช้ 357 คนโหวต ผู้ใช้ 30 รายงดออกเสียง

ที่มา: will.com

เพิ่มความคิดเห็น