كيف يمكنني التجسس على التواصل بين العملية والمحطة؟
-
25-09-2019 - |
سؤال
لدي عملية Linux التي طورتها طرف ثالث تتواصل مع محطة. لتصحيح الأخطاء ، أريد أن أرى التواصل يتراجع.
قد يعتقد المرء cat
هل سيفعل الخدعة (لرؤية اتجاه واحد):
./third-party-app &
cat /dev/tty
... لكنها لا. على الاصح، cat
سوف يسرق نصف البيانات المخصصة للتطبيق ، والذي لا قيمة له إلى حد كبير.
إن تطبيق الطرف الثالث مرمز بالتواصل /dev/tty
.
إحدى الطرق التي وجدتها بالتجسس على التواصل هي إعادة تسمية /dev/tty
الجهاز ، على سبيل المثال ، /dev/real_tty
وإنشاء أنبوب اسمه يسمى /dev/tty
في مكانها. ثم الجري:
cat /dev/real_tty | tee /dev/tty &
... سوف يدعني على الأقل رؤية إخراج /dev/real_tty
, ، عن طريق نسخ البيانات من /dev/real_tty
إلى الأنبوب المسماة /dev/tty
و stdout
.
هذا النوع من الأعمال ولكنه يشعر بالموسيقى المراوغة حقًا ، ويعتمد على خداع استبدال الجهاز. كما أنه لا يعمل في كلا الاتجاهين ، لأن الأنابيب المسماة تحمل فقط البيانات في اتجاه واحد.
ما هي الطريقة الصحيحة للقيام بذلك؟
إذا كان أي شخص يتساءل ، فإن الجهاز TTY هو رابط RS-232 إلى متحكم. المعلومات ليست حساسة أو مؤمنة. يمكن أن تعمل جميع العمليات (التطبيق والجواسيس) كجذر.
المحلول
يمكنك إلقاء نظرة على SLSNIF. إنه يفعل بالضبط ما تريده ، أو إذا كنت مهتمًا بكتابة أحد المصدر ، يتوفر المصدر لمعرفة كيفية عمله.
نصائح أخرى
هل فكرت في استخدام strace/ltrace؟ يمكنك رؤية مكالمات النظام التي يقوم بها ، على وجه الخصوص ، يمكنك رؤية مكالمات الكتابة/IOCTL وما إلى ذلك.
RS-232؟ فقط اضغط على خطوط RXD/TXD/GND مع مقاطع. لقد كان إلى الأبد منذ أن رأيت أي جهاز يهتم حتى DCD ، DTR ، إلخ.
هناك بعض البدائل:
افعل ذلك بنفسك مع GDB: إعادة توجيه الإخراج من عملية التشغيل
Cryopid يتيح لك التقاط حالة عملية التشغيل في Linux وحفظها في ملف. يمكن بعد ذلك استخدام هذا الملف لاستئناف العملية لاحقًا ، إما بعد إعادة التشغيل أو حتى على جهاز آخر.
توزيع multithedded checkpointing هي أداة للتحقق بشفافية عن حالة مجموعة من البرامج التعسفية المنتشرة عبر العديد من الآلات ومتواصلة بواسطة مآخذ.
ال script
البرنامج موجود للقيام بذلك باستخدام طرف psudo. الجهاز /dev/tty
عادة ما يكون مميزًا ويشير إلى محطة التحكم في العملية الحالية ، لذلك قد لا تضطر إلى اللجوء إلى إعادة تسمية الأشياء.
script
يفتح طرفًا psudo ثم يدير مثيلًا آخر من الصدفة مع تلك القشرة الجديدة كحرف مسيطر عليها (لذا /dev/tty
يشير إلى هذا الطرف psudo لهذه القشرة وعملياتها الفرعية). يتيح لك خيار -C تشغيل أمر معين بدلاً من قذيتك.
المشكلة الرئيسية مع script
هل من المستحيل معرفة الطريقة التي تم التقاطها في ملف الإخراج (./typescript
بشكل افتراضي) - تم إلقاء البيانات التي تتدفق في كلا الاتجاهين على نفس الملف وتبدو مشابهة لما يظهر على الشاشة عند استخدام محطة تفاعلية (باستثناء تضمين الهروب ، وإرجاع النقل ، والأشياء الأبله من هذا القبيل بالإضافة إلى ذلك الأحرف المعروضة).
على أي حال ، أعلم أنه تم الإجابة منذ فترة طويلة على هذا السؤال ، لكنني اعتقدت أنه إذا كان أي شخص يبحث عن حل مشابه ولم يستخدم منفذًا تسلسليًا حقيقيًا ، فقد يساعدهم ذلك.
ليست بسيطة (ليس بالنسبة لي على الأقل) ، ولكن الآلية التي يجب أن تعمل مع برامج التشغيل التسلسلية TTY هي الانضباط خط.
لقد قدم الناس هنا بالفعل اقتراحات جيدة ، ولكن إليك آخر:
يمكنك أيضًا كتابة مكتبة مشتركة مع write()
هذا يقوم ببعض العمل قبل الاتصال write()
من عند libc.so
. ثم يمكنك استخدام LD_PRELOAD
متغير البيئة لتحميل مكتبتك عند بدء العملية.