Hady 🍍
Hady 🍍

@HadySata

18 تغريدة 342 قراءة Nov 27, 2022
امس كنت ادور تطبيق اتابع فيه انمي على الـ Smart tv، واكتشفت ان على شاشتي مافيه تطبيق يمديني اتابع فيه كل حلقات الانمي اللي ابيها
فقررت اسوي لي واحد 🏃🏻‍♂️😂
ملاحظة: بهذا الثريد بسولف عن كيف سويت هندسة عكسية(RE) لتطبيق انمي اكثر من اني كيف بنيت التطبيق لشاشتي 🧵
الثريد بيكون عن كيف كنت افكر وقتها والحلول اللي جربتها بدون شرح مفصل، ممكن اكتب article شرح اذا احد مهتم🤔
المهم، التطبيق كان AC، بس محذوف من المتجر فاضطريت ادخل من حساب اب ستور قديم لي عشان احمله، الفكرة كانت اجيب ال API حقهم وابني موقع بسيط يستخدم ال API وافتحه من متصفح شاشتي
التطبيق ماكان في منه الا نسخة IOS، ماعندهم موقع ونسخة الاندرويد معطلة وماتشتغل
شبكت HTTP debugger على جوالي وبديت اشوف الريكويستات اللي تطلع من التطبيق
الريكويستات كانت طبيعية POST requests & JSON responses
استانست وقلت سهالات😂
(مثال على ريكويست يجيب معلومات انمي بال ID) 👇
لكن اخر وأهم ريكويست اللي يجيب لك رابط الحلقة MP4 كان يرجع response غريب شوي
اول نظرة تحسه base64 طبيعي بس من الفرغات وعلامة + حسيته لا، بس قلت خل اجرب افكه…
وماضبط، لما اسوي decode يطلع رموز غريبة يعني فيه شي غلط
ثاني شغلة جات على بالي هي انهم يستخدمون خوارزمية LZ، هذي خوارزمية تستخدم لضغط(compress) البيانات وقد شفت كثير تطبيقات يستخدمونها مشان يقللون حجم الـresponse و مشان يوصل اسرع
الزبدة بعد محاولات طلع ماهو LZ compressed 🙂💔
More about LZ:
en.m.wikipedia.org
بعدها وانا اطالع بال response جاء ببالي انه يشبه ال gzip encoded response، وجربت وطلع لا، المهم جربت كم خوارزمية بعد وماكان مضغوط بولا واحد منهم 🙂
هنا استسلمت للأمر الواقع، وكان لازم افك التطبيق عشان اعرف وش جالس يصير وكيف جالسين يفكون التشفير
بالبداية تجنبت افك تطبيق الـ IOS لانه مشوار وكريه، قلت خليني افك تطبيق الاندرويد حتى لو انه حاليا مو شغال ممكن افهم منه كيف كانوا يفكون التشفير، استخدمت APKLab عشان افكه
اول شغلة انتبهت لها ان ال endpoint تبع الاندرويد مختلفة عن الـ IOS
المهم بديت اقرا بالسورس كود حبة حبة لما وصلت لجزء تشغيل الفيديو، اكتشفت ان في endpoint الاندرويد ماكانوا يشفرون الـ response اصلا!
فـ تطبيق الاندرويد كان dead-end 👨‍🦯
هنا استوعبت اني يا افك تطبيق الIOS او اروح انام😂 اكره افك تطبيقات IOS خصوصا النيتف
الزبدة قررت اعطي تطبيق الIOS نص ساعة
تطبيقات الـ IOS مايمديك تسحب اي نسخة من المتجر وتحللها، لان النسخ اللي على المتجر تكون signed & encrypted ومايصير لها decryption الا لما تثبتها على جهازك
فتحتاج جهاز عليه جيلبريك و frida عشان تسوي dump للـ API
FMI: github.com
المهم، شغلت جهاز قديم لي وسويت له جلبريك وطلعت ال ipa لـ Anime cloud ✅
الـ IPA للتطبيقات عبارة عن ملف مضغوط تقدر تفتحه وتشوف محتوياته
داخل الملف بتحصل assets مثل ايقونات وصور بس اللي يهمني هو ملف binary التطبيق نفسه وراح يكون ملف بنفس اسم التطبيق
بعدها نفتح الملف في Ghidra
Ghidra هي اداة تستخدم للهندسة العكسية مطورة من وكالة الأمن القومي الأمريكية(NSA)
ghidra-sre.org
بعد مافتحت الملف وخليت Ghidra يسوي له analyze، بحثت عن getVideoURL، لان هذا الريكويست اللي يهمني اعرف وش جالس يصير فيه وكيف جالس التطبيق يفك تشفير ال response بعد مايوصله
طلعت لي اكثر من result بس هذي ال result اللي كنت مهتم لها لان من هنا جالس يطلع الـ POST request
حلو الحين عرفت من وين يطلع الريكويست، باقي اعرف وش جالس التطبيق يسوي بعد مايرجع ال response عشان اعرف كيف جالس يفك التشفير
لما شفت ال Functions call graph، واضح ان ذي الفنكشن جالسة تكلم فنكشن اسمها FUN_1000…(اللي بالاصفر)
ولما قريت كود الفنكشن هذي، طلعت مسؤولة عن تشغيل الحلقة واعلان قبلها
بس انتبهت لكلمة decrypt هنا (اخيرًا مسكت خيط وماطلع dead-end😂🎉)
طبعًا الكود جالس يكلم ذي الفنكشن لكن مو طالعة لي بشكل مباشر في Ghidra(اعتقد لانها muilt-threaded)، الزبدة جلست ادور على الفنكشن يدوي لما حصلتها
ولما قريت كود فنكشن decrypt
لاحظت كلاس اسمه RNDecryptor ومن معرفتي بسويفت ذا ماهو شي built-in، فبحثت بقوقل وطلعت مكتبة بسويفت اسمها RNCryptor للـ AES encryption and decryption
الحين عرفت وش المكتبة والخوارزمية المستخدمة للتشفير بس عشان افك تشفير الresponse احتاج باسورد 🫠
جلست ابحث بـ Ghidra عن اشياء لها علاقة مثل password, key, encryptionKey بس ماحصلت شي يسوى
فقلت خليني اسحب كل ال strings اللي موجودة في باينيري التطبيق(الكوماند بالصورة)
واجرب افك ال response بوحدة منهم(brute force) على امل ان الباسورد يكون static variable داخل التطبيق
كتبت كود جافاسكربت على السريع ياخذ لستة الstrings اللي من التطبيق ويجلس يجرب يفك ال response المشفر فيهم
طبعًا لستة الstrings اللي مطلعها من التطبيق كبيرة شوي فيها حول ٥٠ الف سطر 😂
المهم، شغلت السكريبت وعطيته حول ٣ دقايق
شوي وطلع لي الـpassword(مفتاح التشفير) 🎉🎉
وبكذا خلصت 😂
دام عندي مفتاح التشفير اقدر افك اي response مشفر واطلع رابط الـ MP4 لحلقات الانمي
طبعًا على السريع بنيت موقع ڤانيلا HTML & JS (لان متصفح شاشتي es5) وشغال زي العسل 😂🔥

جاري تحميل الاقتراحات...