في أمسية ضيقة ومملة إلى حد ما ، وأنا ، وأنا أتصفح التطبيق الرسمي للحبر ، عازمت أصابعي مرة أخرى ، واحدة لكل ميزة خاملة. هنا ، على سبيل المثال ، من المستحيل التعليق ، فهم محرومون من حق التصويت ، وبشكل عام ، لماذا لا تظهر الصيغ على الشاشة؟
لقد تقرر: أنت بحاجة إلى شيء مريح ، ممتع ، خاص بك. ماذا عن تطبيقك للحبر؟
دعنا نقدم بعض لقطات الشاشة لفهم الموقف.
بطريقة ما يبدو هذا - من. تطبيق habr.comقائمة "المضايقات"- لا يمكنك تقييم المنشور الذي يكون تقييمه غير الصفر
- ليس من الممكن دائمًا كتابة تعليق
- المسوحات لا تعمل
- الصيغ غير مرئية في الموضوع المظلم (الأسود على الأسود)
- ليس كل الإشارات المرجعية المتاحة
نعم ، لم يتم تحديث التطبيق منذ آب (أغسطس) الماضي ، لكنه لا يزال سيئًا. بشكل عام ، تحتاج إلى إصلاحه.
الجزء الأول بحثا عن الوصول.
تم إصدار طلب سريع إلى Google "habrahabr API" بالفعل من قبل مستودع جيثب المتقادم ، والذي لم يتم تحديثه منذ 21 نوفمبر 2016 ، وهذا لمدة دقيقة ونصف العام .
تجاهل حقيقة أن هذا هو PHP ، انتقل لأسفل وقراءة:
الحصول على معرف التطبيق
باستخدام هذا النموذج على Habrahabr ، تحتاج إلى وصف موجز للتطبيق الجديد والغرض الذي يحتاج إلى API.
ليس السؤال إذا كنت بحاجة إلى الوصول ، فأنت بحاجة لذلك. نكتب خطابًا (باختصار):
خطابهناك رغبة في تقديم طلب للحصول على Habr بناءً على PWA. هناك عدة أسباب لذلك.
الأول والأكثر قابلية للفهم: تطبيق Android لا يلبي متطلباتي الشخصية.
ثانياً: لا يوجد عدد كافٍ من الإشعارات المحلية حول جميع أنواع الأشياء التي تأتي عادة إلى مكتب البريد (التعليقات ، على سبيل المثال).
ثالثًا: الهضم الشخصي (كاحتمال) للأشخاص / المراكز التي تهمني ، نظرًا لاهتماماتي.
الجواب ، بالطبع ، لم يكن لطيفًا جدًا ، ولكن على الأقل صادق:
لسوء الحظ ، الوصول إلى API لدينا غير متاح حاليًا. نحن نخطط لاستئناف توفير إمكانية الوصول بعد الانتهاء من الانتهاء من API ، لكن ليس لدينا أي تواريخ محددة بعد ، لأن في الوقت الحالي ، نحن مشغولون بحل المهام الأخرى ذات الأولوية.
"حسنًا ، لا يهم! سنأتي بشيء! " قلت لنفسي ، وبدأت في البحث.
الجزء الثاني الحفر العميق.
بناءً على المنطق ، إذا كان التطبيق يعمل ، فيمكنه الوصول إلى واجهة برمجة التطبيقات ، ويتم توصيله بالتطبيق. دعنا نحلل.
بما أننا نتعامل مع حركة المرور ، فإن Wireshark هو خيارنا. لا تخلو من العذاب عن طريق توصيل الهاتف بالإنترنت من خلال جهاز كمبيوتر ثابت ، افتح التطبيق وانظر إلى الطلبات:
واضح أن لا شيء واضحنعم ، كل شيء مشفر ، لكنني لا أريد العبث بالتشفير. ثم تحتاج إلى النظر داخل التطبيق نفسه.
بعد فك ترميز .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"
هذا هو رمز الجهاز الظاهري لنظام أندرويد ( Dalvik 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
لعرض سجلات التطبيق.
بشكل غير متوقع ، ولكن السجلات كانت أكثر تفصيلا مما كان متوقعا.
هنا ليس فقط client_id
الذي client_id
، ولكن أيضًا رمز المستخدم / التطبيق ، وكذلك تسجيل الدخول وكلمة المرور client_id
!
بعض نظريات المؤامرةلا يضر وجود سجلات تسجيل الدخول وكلمة المرور في حد ذاته بأي شيء ، حيث لا يمكن قراءة هذه السجلات إلا باستخدام حقوق الجذر أو اتصال adb
. ولكن نظرًا لوجود حقيقة بين الأشخاص الذين يقرؤون Habr ، هناك مطورون على نظام android يمكنهم تمكين تصحيح الأخطاء ، فقد أصبحت هذه مشكلة.
في هذه الحالة ، يمكن أن تؤدي "الرسوم المجانية" في المطار إلى سرقة الحساب ، على الرغم من من يحتاج إليها؟
من هذه السجلات يمكنك إجراء:
client_id
و apikey
اللازمة للوصول إلى api ؛- عنوان URL لترخيص المستخدم (غريب ، ولكن لا يوجد شيء في المستودع عن هذه الطريقة ، فربما لم يتم توفيره؟)
وهذا ما حدث. بناءً على هذه الدراسة الصغيرة ، يجري العمل بالفعل على مشروع صغير - تنفيذه الخاص لتطبيقات الهاتف المحمول. إذا كنت ترغب في المساعدة ، يرجى الكتابة في الرسائل وأي شخص آخر - للتصويت (لأنني أريد أن أفهم ما إذا كان أي شخص يحتاج إلى ذلك).
شكرا لاهتمامكم!