عكس الهندسة الكهربائية كورنيش AM82TV

لدي بضعة قضبان ستارة كهربائية Akko - AM82TV. هذا النموذج يبرز من إخوانه مع مجموعة كاملة من واجهات الإدارة. يمكن التحكم في الستائر عن طريق الراديو ، وهناك "جهات اتصال جافة" ، ومراقبة تدريجية (عن طريق تقصير أسلاك التحكم في الشبكة). هناك واجهة RS485 - هذا إذا كنت تريد توصيل الستائر بـ "المنزل الذكي". يمكنك أيضًا فتح / إغلاق الستائر ببساطة عن طريق سحبها بيدك في الاتجاه المطلوب. "خارج الصندوق" مفقود ، ربما ، فقط واجهة الويب ، حسناً ، و MQTT.

منذ فترة طويلة كان لدي قضبان ستارة كهربائية تعمل بشكل موثوق ، ولكن من وقت لآخر بدأت الرغبة في تفكيكها - بدافع الفضول لمعرفة ما الذي بداخلها وما إذا كان من الممكن وضع ESP8266 (أو ESP32) من أجل إضافة المفقودين. يمكنك بالطبع توصيل كل شيء من الخارج ، لكن من الأفضل أن يظل المظهر كما هو ، وكل شيء مخفي في الداخل.

لا إصلاح ما لم ينكسر - هذا ليس عني. في البداية حاولت إبعاد الأفكار السيئة عن نفسي ، لكن مع مرور الوقت ، اشتدت الحكة والآن حان الوقت لمكافحتها بالفعل. أخذت المحرك من الطنف وتفكيكه. كان من المفترض أن يعطي التفتيش الأولي إجابات على سؤالين: هل هناك مجال ل ESP8266 وهل من الممكن استخدام مصدر الطاقة المدمج. تم فرز كل شيء ببساطة. يكفي فك بعض البراغي من نهايات المحرك. الشيء الوحيد هو أن فتحات المسامير ليست مصنوعة من مفك البراغي ، ولكن مع وجع عرافة توركس. بعد ذلك ، يمكنك استخراج المحتويات - محرك جامع في حاوية واحدة مع علبة تروس ومستشعر عمود المحرك ، مزود طاقة بقوة 24 فولت ولوحة تحكم.

يوجد مكان ESP ، مزود الطاقة مصمم لمحرك قوي ولن يلاحظ حمولة إضافية صغيرة. بدأت في التفكير في لوحة التحكم وبدأت الأفكار حول ESP تتلاشى في الخلفية - كان متحكم atmega168 هو قلب اللوحة. إذا لم تكن هناك جهات اتصال على اللوحة لتثبيت موصل ISP (واجهة البرمجة داخل الدائرة الخاصة بالمراقب الدقيق) فإن هذا لن يمنعني ، لكنهم كانوا هناك. لكي تفهموني بشكل صحيح ، أنا لست من محبي avr على الإطلاق. لا أملك مبرمجًا ولم أكتب سطرًا واحدًا من التعليمات البرمجية لميكروكنترولر atmega. كنت في حاجة ماسة إلى مبرمج لمحاولة قراءة البرامج الثابتة ، ولكن كان ذلك في المساء ولم تكن هناك طريقة لشراء شيء ما في المتجر الآن. حتى لا تنتظر حتى الصباح ، قمت بتجميع مبرمج Gromov. ثم قام بربط موصل ISP على لوحة التحكم ، وربط المبرمج وحاول قراءة البرنامج الثابت - وتم حسابه.

من المستحيل محاولة فهم شيء ما في البرامج الثابتة لجهاز التحكم الدقيق دون فهم مخطط الدائرة. لذلك ، على لوحة الدوائر المطبوعة ، قمت باستعادة الدائرة. لا أضطر غالبًا إلى رسم مخططات. لكي لا أرسم العناصر الموجودة على السبورة ، ولكن ليس في المكتبة القياسية ، قمت برسم مخطط في easyeda. نعم ، اتضح ليس وفقًا لـ GOST (لكن يتم رسم متحكم كما هو الحال في الوثائق ، وهو مناسب). جزء يكفي لفهم:



فيما يلي ، معظم الصور قابلة للنقر.

إذا كنت ترغب في ذلك ، يمكنك التعرف على المخطط الكامل .

بعد ذلك ، كنت مستعدًا للبحث في البرامج الثابتة. مجرد ترجمة رموز الآلة إلى فن الإستذكار التجميعي لا يكفي للتحليل. تحتاج إلى معرفة حالة السجلات والذاكرة في أي نقطة في البرنامج. لسوء الحظ ، لا يمكن تصحيح الأخطاء على المتحكم نفسه باستخدام atmega168 ، ولكن يمكنك تحميل البرامج الثابتة إلى جهاز المحاكاة. ليست مريحة للغاية إذا كنت ترغب في "الشعور" بالحديد الحقيقي لربط المتحكم الدقيق ، ولكن دعنا نتعرف على ما لدينا. لم أقم بتثبيت Atmel Studio 7. قررت أن برنامج AVR Studio 4. سيكون أكثر كفاية ، من حيث المبدأ ، يكفي استخدام برنامج Studio واحد للتحليل ، لكن من الممكن نقل بعض العمليات الروتينية إلى برامج أخرى. في مارس ، تم نشر أداة الهندسة العكسية Ghidra . كنت بحاجة إلى سبب ، بعض المهام العملية ، للتعرف عليه. هذه مجرد فرصة. كل أداة على حدة - AVR Studio 4 و Ghidra حصلت على القليل من العربات التي تجرها الدواب. AVR Studio ، مع العديد من انتقالات البرامج الفرعية المتداخلة ، قد يتوقف فجأة عن عرض عناوين الانتقال الصحيحة في الأوامر (أصبح العنوان صفرًا). غيدرا في بعض الأحيان ضلت في تحليل الفهرسة. لكن استخدام كلتا الأداتين في وقت واحد جعل من الممكن تحديد سبب هذه الشذوذ بسرعة.

حفر بلا هدف في البرامج الثابتة ليست مثيرة للاهتمام للغاية. من الأفضل إذا كان هناك أي مهمة محددة. في وضع إيقاف التشغيل ، قد يكون من الفضول تحليل بروتوكول التبادل لـ RS485 وبروتوكول التحكم على الهواء. قررت الخوض في بروتوكول الراديو.

ذات مرة ، كنت قد اتخذت بالفعل إشارة تنتقل عن طريق جهاز تحكم عن بعد لاسلكي وتحليلها.

قناة الراديو هي في اتجاه واحد. يكون المحرك قادرًا فقط على تلقي إشارة ولا يؤكد استلام أمر. من المستحيل استجواب حالة الكورنيش الكهربائي على الهواء. على المستوى المادي ، لا يوجد سوى مستقبل إشارة الراديو. لا يوجد جهاز إرسال في المحرك. يتم إرسال الإشارة بواسطة جهاز التحكم عن بعد اللاسلكي على تردد 433.92 ميغاهرتز. مشفرة بمعالجة السعة. يتألف الأمر من بت بدء نموذج خاص ، وعنوان + قناة والأمر نفسه. بيانياً ، يمكن تمثيل الإشارة بأكملها على النحو التالي:



يمكن اعتبار القناة جزءًا من عنوان. إذا قمت بنقل أمر على القناة صفر ، فسيتم تنفيذه بواسطة جميع الأجهزة بعنوان محدد ، ولكن مع قنوات مختلفة. أنها مريحة إذا كنت بحاجة إلى نقل الأمر على الفور إلى مجموعة من قضبان الستائر الكهربائية.

اقرأ المزيد عن بروتوكول الراديو .

عند تحليل كيفية قيام جهاز التحكم عن بعد بنقل الأوامر ، كنت أعرف بالفعل رموز الفرق الأربعة. ليس كثيرًا ، مقارنةً بإمكانيات التحكم في الستار الكهربائي عبر RS485. أردت التأكد من أنه تم تحديد جميع الفرق وأنه لا يوجد "بيض عيد الفصح" أو فرق الخدمة.

تحليل النهج بسيط. يُظهر مخطط الدائرة أي منافذ متحكم التوصيل متصلة بالأجهزة المادية. يتم تحليل ملف البرنامج الثابت في Ghidra. هذا مناسب - يتم تنفيذ العديد من العمليات الروتينية تلقائيًا. بعد تحليل تشغيل جزء معين من التعليمات البرمجية أو البرنامج الفرعي ، يُعطى اسمًا ذا معنى. علاوة على ذلك ، قصاصات الكود واللقطات التي سأحضرها من Ghidra. عندما تكون مملة ، قم بتشغيل الكود في المحاكاة. في المواقف المعقدة بشكل خاص ، عليك رسم الصور.

لضمان عرض أسماء السجلات الطرفية atmega168 بشكل صحيح أثناء التفكيك ، قمت بتصحيح ملف avr8.pspec. بطريقة جيدة ، سيكون من الضروري إنشاء ملف باسم مختلف ، لكنني لم أكن بحاجة إلى هذا الملف في شكله الأصلي وقمت بتصحيح الملف الذي كان موجودًا.
تبدأ البرامج الثابتة بنواقل المقاطعة. الأول هو ناقل الانتقال إلى بداية البرنامج. يبدو مثل هذا:



لا يتم استخدام معظم المقاطعات. إذا حدث هذا الانقطاع لسبب ما ، فسيتم تنفيذ أمر الإرجاع على الفور. بالإضافة إلى معالجة المقاطعات لإعادة التعيين ، تتم معالجة المقاطعات الخاصة بتجاوز الموقت 0 ، واستكمال الاستقبال ، واستعداد إرسال البايت التالي من البيانات إلى USART. تبادل RS485 ليس من مصلحة لنا الآن ، ولكن يحتاج تجاوز سعة الموقت إلى مراجعة.

بالطبع ، قبل تمكين مقاطعة المؤقت ، يجب ضبط المؤقت نفسه. لم أبدأ بالبحث في الشفرة المفككة عن المكان الذي تتم فيه التهيئة. في المحاكاة ، قمت بتعيين نقطة توقف على العنوان 0x1fc - هذا هو العنوان المسجل في معالج المقاطعة. لقد بدأت البرنامج وحصلت على ارتفاع ونظرت إلى ما تمت كتابته في السجلات. lock حدد timr0 مضبوط على clk / 8. مع وجود الكوارتز على لوحة MHz 8 ، تصل النبضات بتردد قدره MHz 1 إلى الموقت.

بداية معالج المقاطعة:



رسم بياني لمراقبة الطيور يراقب وظائف المعالج
صورة

يفيض الموقت كل 107 μs. من بين أشياء أخرى ، يعالج معالج المقاطعة الإشارة من إخراج مستقبل إشارة الراديو. إذا نجحت الإشارة في الاختبار بنجاح ، تتم كتابة البيانات المستلمة إلى المخزن المؤقت عند 0x4af. حجم المخزن المؤقت هو 6 بايت. هذا بايت واحد أكثر من اللازم لاستلام أربعة بايت من العنوان + قناة و بايت الأمر. ربما كان المقصود من البايت السادس من بروتوكول الراديو للاختبار ، ولكن ضمور. في بعض الأحيان يحدث ذلك. ربما مخصص للبيانات التي تكمل بعض الأوامر. في بروتوكول التحكم بالكورنيش الكهربائي RS485 ، هناك أمر لإغلاق الستائر جزئيًا. في هذه الحالة ، يتم إرسال بايت إضافي مع بيانات حول مقدار الإغلاق في المئة. يمكن أن يوجد فريق مماثل في بروتوكول الراديو. يتم إطلاع البرنامج الرئيسي على جاهزية البيانات عن طريق تعيين علامة - تتم كتابة الوحدة على العنوان 0x4bd.

هذا يكمل تحليل الانقطاعات والعائدات إلى البرنامج الرئيسي.

الرسم البياني للوظائف عند الانتقال إلى العنوان 0x1304 موجز وبسيط:

صورة

نحن بحاجة إلى في "الرئيسية". لقد حللنا بالفعل الانقطاعات ونفهم أنه إذا عدنا لسبب ما فجأة من الرئيسي ونصل إلى "go_to_sleep" ، فإن هذا الحلم سيكون خاملًا - ستظل الستار الكهربائي عن فعل شيء مفيد. ربما ، عند كتابة البرنامج الثابت ، تم استخدام قالب جاهز وظلت التحف بعده.

بشكل أساسي ، نحتاج إلى العثور على المكان الذي يتم فيه الوصول إلى المخزن المؤقت 0x4af. لن تضطر إلى البحث لفترة طويلة. حرفيًا بعد بضعة أوامر ، يتم استدعاء روتين فرعي ، بدءًا من العنوان 0x11b3 ، حيث يتم نسخ هذا المخزن المؤقت ومعالجته.

رسم بياني لوظائف الإجراء rf_signal_buffer_processing (0x11b3):



هذا هو بالضبط المكان الذي نحتاجه ، لكنه يبدو معقدًا بعض الشيء. لفهم ، بدأت في رسم الصور. شيء مثل مخطط انسيابي.

أول ما يحدث هنا هو أن يتم نسخ البيانات من المخزن المؤقت 0x4af إلى العنوان الجديد - 0x49f وإعادة تعيين علامة 0x4bd:



المقتطف التالي هو الأكثر إثارة للاهتمام:



في الواقع ، هذا هو التحقق الكامل للأمر المستلم عبر الهواء. على الرغم من أن هذا غير واضح ، إلا أن التحليل الإضافي أظهر أن الانتقال إلى الفروع التالية هو معالجة أوامر الراديو التالية إذا تم استلام أمر 0xcc قبل ذلك - التبديل إلى وضع الإعدادات. كنت مهتمًا بالرموز الجديدة للفرق نفسها. هل هناك أي شيء إلى جانب رموز الأوامر 0x11 ، 0x33 ، 0x55 و 0xcc.

لم أتمكن هنا ولا أكثر من العثور على معالجة البايت السادس - الأخير من الأمر. في الشكل ، يتم شطبه باللون الأحمر. لذلك تتكون جميع الفرق من خمسة بايت. على الأقل في البرامج الثابتة من AM82TV.

أول شيء نراه هو التحقق من البايت الخامس للمخزن المؤقت - رمز الأمر نفسه. هنا ، على ما يبدو ، كانت هناك رموز أوامر جديدة - 0xad و 0xda. يجتاز الأمر من المخزن المؤقت الاختبار بنجاح إذا كان حقل العنوان يطابق أحد العناوين المسجلة بالفعل في eeprom ، أو إذا كان رمز الأمر 0xad أو 0xda وحقل العنوان == 0xaaaaaaaa.

الصور المتبقية








صورة

حسنًا ، سنعتبر أننا نجحنا في الاختبار التالي. الآن رمز الأمر موجود في 0x4bf. نحن بحاجة إلى العثور على كيفية معالجة محتويات هذه البايت. هناك عدة طرق للقيام بذلك. أبسط هو البحث عن النص على رمز تفكيكها في Ghidra. يبقى أن نرى بالضبط أين تتم قراءة محتويات هذه البايت. هذه ليست طريقة مضمونة للعثور على جميع المكالمات ، لكنها في هذه الحالة بالذات ستنجح. لذلك ، أولاً ، سنرى قراءة بايت في الإجراء بدءًا من 0x1262:

صورة

الوصول إلى الذي يأتي من مكان واحد - فريق يقع في 0x5e0.

الرسم البياني وظيفة:

صورة

إنه أمر مؤسف ، ولكن يتم تجاهل جميع رموز الأوامر ، باستثناء تلك المعروفة بالفعل: 0x11 ، 0x33 ، 0x55 و 0xcc في هذا الإجراء. حتى الرموز 0xad و 0xda وجدت في الخطوة السابقة. على الأقل ، لم أتمكن من العثور على رموز جديدة لأوامر الراديو في البرامج الثابتة للكورنيش الكهربائي AM82TV.

ومع ذلك ، هناك إمكانية الوصول إلى البرامج الثابتة ، ويمكن تفكيكها ، ونرى كيف يتم تنفيذ وظائف محددة وتغيير شيء لنفسك. أو حتى إضافة شيء ما.

يتم نشر البرامج الثابتة وملف avr8.pspec المعدّل لـ atmega168 على GitHub .

Source: https://habr.com/ru/post/ar464657/


All Articles