
Specter-FlipperZero v2.8
👻 Specter — ماسح سلبي بتردد 13.56 ميجاهرتز لكشف أجهزة التنصت وقارئات/ناسخات NFC لجهاز Flipper Zero. مقياس EMF لمكافحة المراقبة يعتمد على شريحة NFC المدمجة. دون الحاجة إلى أي أجهزة إضافية.
Specter 👻
امسح بحثًا عن القارئات التي لا يمكنك رؤيتها.
Specter يحوّل جهاز Flipper Zero الخاص بك إلى أداة مكافحة تجسس جيبية لفحص قارئات NFC النشطة بتردد 13.56 MHz. يستمع بشكل سلبي إلى المجال الراديوي الذي يبثّه قارئ قيد التشغيل باستمرار — قارئ بطاقات مخفي مُدسوس في جهاز دفع، أو قارئ خفي خلف لوحة باب، أو مسجّل مارق مُلصق تحت مكتب — ثم يخبرك أين هو، ما نوعه، هل الغرفة نظيفة — وإذا تُرك في وضع المراقبة — بلحظة ظهور أحدها أثناء غيابك. لا يبثّ أبدًا.
القارئات غير مرئية. Specter يجعلها مرئية.
كما ظهر في
Help Net Security
·
Cyber Security News
📟 على جهاز Flipper
عملية مسح من البداية إلى النهاية: غرفة هادئة ← الاقتراب ← قفل على الإشارة ← ما هو ← حكم الغرفة.
مسح (هادئ) · مسح (قارئ مقفول) · بصمة · مسح موقعي (قيد التشغيل) · مسح موقعي (حكم)
مراقبة (واضح) · مراقبة (قارئ!) · سجل · معايرة · إعدادات
✨ الأوضاع الخمسة
Specter هو خمس أدوات حول مستشعر واحد. كل منها يجيب عن سؤال مختلف، لذا يعتمد الاختيار الصحيح على ما تحاول اكتشافه فعليًا:
| الوضع | السؤال الذي يجيب عنه | استخدمه عندما |
|---|---|---|
| 🔍 مسح | أين هو؟ | تشك في وجود جهاز وتريد تحديد موقعه بدقة بالتحرك حوله |
| 🔬 بصمة | ما نوع هذا الشيء؟ | وجدت باعثًا وتريد معرفة سلوكه |
| 🗺️ مسح موقعي | هل هذه الغرفة نظيفة؟ | تريد حكمًا واحدًا لمساحة كاملة، دون استخدام اليدين |
| 🛰️ وضع المراقبة | هل ظهر أحدها أثناء غيابي؟ | تترك Flipper في مكان ما ليقوم بالحراسة |
| 📖 سجل | ماذا وجدت، ومتى؟ | توثّق النتائج، أو تقارن اليوم بالأسبوع الماضي — صفِّ حسب نوع النتيجة |
🔍 مسح — أين هو؟
ما يفعله. مقياس EMF حي. أمسك Flipper بشكل مسطح وحرّكه ببطء فوق الشيء الذي تفحصه — جهاز بطاقات، قارئ باب، الجانب السفلي من حافة صراف آلي، طرد، مكتب. تتحرك الإبرة مع قوة المجال في الوقت الفعلي.
ما تراه.
- القرص — الإبرة = القراءة الحية، النقطة الصغيرة = ذروة الاحتفاظ (أقوى موضع لمسته، حتى تتمكن من مقارنة المواضع).
FIELD %— نفس القراءة كرقم، مع سهم اتجاه ▲ / ▼ يخبرك ما إذا كانت آخر نصف ثانية جعلت الأمور أسخن أم أبرد. عندما تبحث، هذا السهم أهم من الرقم.PK/C— قراءة الذروة وعدد الاتصالات المنفصلة التي أجريتها.- الشريط السفلي — الشكل الموجي الحي وحساسيتك الحالية أثناء الهدوء؛
يتحول إلى شريط إنذار أسود
● قارئ نشطمع كلمة قرب لحظة اكتشاف حامل إشارة. - القرب —
خافت ← قريب ← قريب جدًا ← قوي ← أقصى.أقصىتعني أن المقياس بلغ أقصى حد: أنت قريب بقدر ما يمكن لهذا القياس أن يحدد.
الصوت. نقرات جيجر اختيارية تتسارع كلما اقتربت، بحيث يمكنك المسح مع Flipper في جيبك والبحث بالأذن وحدها.
| المفتاح | الإجراء |
|---|---|
OK | إعادة تعيين ذروة الاحتفاظ وعدد الاتصالات |
اضغط مطولًا OK | حفظ هذه القراءة في السجل |
LEFT | المعايرة وفقًا لمستوى ضوضاء الغرفة (3 ثوانٍ) |
🔬 بصمة — ما نوع هذا الشيء؟
ما يفعله. بمجرد أن يجد وضع المسح شيئًا، أمسك Flipper بثبات ضده. تتوقف البصمة عن قياس القرب وتبدأ توقيت حواف تشغيل/إيقاف الحامل، وهو ما يميز فعليًا نوع باعث عن آخر.
ما تراه. حكمًا وشريط ثقة والأدلة وراء كليهما:
| الفئة | ما تعنيه عمليًا |
|---|---|
| مستمر | الحامل مرفوع بشكل دائم |
| استطلاع دوري | دورة استطلاع ثابتة مضبوطة بالكريستال — تُعرض الفترة بالمللي ثانية |
| متقطع | انفجاري لكن غير منتظم — غالبًا هاتف أو قارئ قيد الاستخدام |
تحتها توجد PER (فترة الاستطلاع)، BST (عرض الانفجار)، JIT (الارتعاش) و
DUTY (دورة التشغيل الفعلية)، بالإضافة إلى قطار نبضات محلل منطقي للحامل
الخام — بحيث لا يكون الحكم شيئًا يجب أن تصدقه دون دليل. يظهر القارئ
الاستطلاعي الحقيقي كموجة مربعة لا لبس فيها.
~قبل توقيت تعني أنه قريب من حد أخذ العينات البالغ 2 مللي ثانية، و يتم خصم الثقة ليتناسب مع ذلك.
| المفتاح | الإجراء |
|---|---|
OK | حفظ النتيجة في السجل |
اضغط مطولًا OK | إعادة تشغيل القياس |
🗺️ مسح موقعي — هل هذه الغرفة نظيفة؟
ما يفعله. مسح مؤقت لمساحة كاملة. ابدأه، تجوّل في الغرفة بشكل طبيعي، واحصل على حكم واحد في النهاية — دون مراقبة الإبرة.
ما تراه. عدّاد تنازلي وشريط تقدم أثناء التشغيل، ثم بطاقة حكم:
نظيف— لم يعبر شيء مستوى الضوضاءأثر— ضربات قصيرة أو خافتة؛ يستحق تمريرة ثانية أبطأقارئ نشط— كان هناك شيء يعمل ويبث فعليًا
…مع حقل MAX / AVG وعدد الاتصالات وFIELD % — كم من المسح كان فيه
حامل إشارة نشطًا فعليًا، وهو غالبًا الرقم الأكثر دلالة بين الأربعة.
يعمل لمدة 30 ثانية أو 60 ثانية أو دقيقتين، ويسجل النتيجة تلقائيًا.
| المفتاح | الإجراء |
|---|---|
OK | تشغيل المسح مرة أخرى |
🛰️ وضع المراقبة — هل ظهر أحدها أثناء غيابي؟
ما يفعله. يقف حارسًا إلى أجل غير مسمى. جهّزه، ضع Flipper، وابتعد. حيث يكون وضع المسح أنت تبحث ووضع المسح الموقعي اختبارًا بطول ثابت، فإن وضع المراقبة ينتظر فقط — لدقائق أو ساعات.
ما تراه. ساعة زمنية كبيرة وكل شيء واضح بينما لا يوجد شيء هناك.
في اللحظة التي يظهر فيها قارئ، ينعكس الشريط إلى قارئ حاضر، و
تستيقظ الشاشة، ويصدر الإنذار. الشريط ثابت بدلًا من أن يومض —
وميض صغير ينبض بدلًا من ذلك، بحيث يُقرأ كحالة حية دون أن يرمش أمامك. بعد مروره، تحتفظ الشاشة
بالأدلة: HITS (عدد الاتصالات المنفصلة)، PEAK، LAST (كم مضى منذ
آخر واحد) وSEEN (إجمالي الوقت الذي كان فيه حامل الإشارة نشطًا فعليًا).
وضع المراقبة يتجاهل عمدًا الوضع الخفي — حارس مظلم صامت لا يخبرك أبدًا أنه رأى شيئًا سيكون أسوأ من عدم الفائدة.
| المفتاح | الإجراء |
|---|---|
OK | إعادة التسليح — يمسح الساعة والعدادات |
📖 سجل — ماذا وجدت، ومتى؟
تُحفظ النتائج مرتين، من إجراء واحد، بحيث تكون قابلة للقراءة على الجهاز وأيضًا جدول بيانات جاهز — دون خطوة تصدير يجب تذكرها:
logbook.txt — مجمّع، لعارض الجهاز | logbook.csv — صف مسطح واحد لكل إدخال |
|---|---|
| ``` 2026-07-18 14:35:11 SURVEY 60s ACTIVE max74… 2026-07-18 14:32:07 READER POLLING 204ms… ``` | ``` timestamp,type,detail 2026-07-18 14:35:11,SURVEY,60s ACTIVE … 2026-07-18 14:32:07,READER,POLLING 204ms … ``` |
يتم وسم الإدخالات بـ SWEEP أو READER أو SURVEY أو WATCH وتُختم بوقت
ساعة الفلبر. يعيش كلا الملفين في apps_data/specter/ على بطاقة SD. لا شيء
يغادر الجهاز أبدًا. امسحها من Settings → Clear logbook (مع تأكيد
أولاً — إنه الشيء الوحيد غير القابل للتراجع الذي يمكن للتطبيق فعله).
⚙️ الأجزاء الداعمة
🎯 المعايرة التلقائية
اضغط LEFT على شاشة المسح وسيستمع Specter إلى مستوى الضوضاء المحيطة لمدة 3 ثوانٍ، ثم يضبط عتبة الكشف فوق ما قاسه تمامًا — ويُحفظ كحساسية Custom الخاصة بك. لكل غرفة مستوى ترددات راديوية مختلف؛ هذا يضبط على الغرفة التي تقف فيها بدلاً من رقم مُثبّت وقت البناء. قف في مكان هادئ عند تشغيله.
🕶️ وضع التخفي
يُبقي الشاشة وLED مظلمين طوال المسح، حتى لا يتوهج الفلبر بينما أنت من يقوم بالنظر. يستمر الصوت والاهتزاز في العمل — الهدف ليس تعطيل التغذية الراجعة التي تمسح بها. الخروج من شاشة التخفي يُعيد إضاءة العرض، لذا BACK يوصلك دائمًا إلى قائمة مضاءة.
📏 قراءة العداد
لماذا لا يُصدر القارئ الذي تلمسه إشارة 100% من الوقت. يقيس الكاشف شيئًا فيزيائيًا واحدًا: نسبة الوقت الذي يكون فيه ناقل 13.56 ميجاهرتز نشطًا. لكن القرّاء يستقصون — دفعة قصيرة، ثم سكون، ثم دفعة أخرى. يُشعّ الطرف النموذجي 20–35% فقط من الوقت، لذا فإن دورة التشغيل الخام تشبع عند حوالي 30% مهما اقتربت.
عرض ذلك الرقم الخام على المقياس جعل الكشف المثالي يبدو كثلث واحد. المقياس مُعاير مقابل نطاق الاستقصاء الحقيقي هذا بدلاً من ذلك:
| دورة الناقل الخام | المقياس | القرب |
|---|---|---|
| 3% (ضوضاء الغرفة) | 10% | FAINT |
| 12% | 40% | NEAR |
| 20% | 67% | CLOSE |
| 28% | 93% | STRONG |
| ≥30% (مستلقٍ على قارئ) | 100% | MAX |
الدورة الخام لا تُفقد أبدًا: مستوى الضوضاء، والمعايرة التلقائية، وDUTY في شاشة Fingerprint كلها تعمل بدورة تشغيل حقيقية، لأنها تصف الإشارة، وليس مسافتك عنها. تريد الرقم الحرفي؟ Settings → Meter → Raw.
💾 كل شيء يُحفظ
الحساسية، وطول المسح، والصوت، والاهتزاز، وLED، والتخفي، والتسجيل، ووضع العداد تُحفظ على بطاقة SD لحظة تغييرها. عدة مسح تنسى إعداداتها أسوأ من عدم وجود حفظ على الإطلاق.
🧠 كيف يعمل
كل قارئ NFC يعمل بالطاقة يُرسل باستمرار نبضات في الهواء بناقل 13.56 ميجاهرتز، منتظرًا بطاقة لتستيقظ. لا يمكنك رؤيته، لكن شريحة NFC في الفلبر تستطيع: ST25R3916 لديها كاشف مجال خارجي مدمج في العتاد (نفس الدائرة التي تسمح للفلبر بمحاكاة بطاقة ومعرفة متى يتحدث إليه قارئ). يُوقف Specter الشريحة في وضع الكشف فقط ويأخذ عينات من بت "هل المجال موجود؟" حوالي 500 مرة في الثانية — دون تشغيل ناقله الخاص أبدًا.
ذلك البت الواحد، المأخوذ بسرعة كافية، يحمل إشارتين مستقلتين:```mermaid
flowchart LR
R["🔍 Hidden 13.56 MHz reader / skimmer
(constantly polling its field)"] -- "RF carrier" --> A
subgraph FLIP["Flipper Zero — Specter.fap"]
A["ST25R3916 NFC chip<br/>external-field detector"] --> S["Sampler thread<br/>~500 samples/s"]
S --> M["<b>How much?</b><br/>carrier duty-cycle<br/>peak · average · contacts"]
S --> C["<b>What rhythm?</b><br/>burst / gap edge timing<br/>period · jitter"]
M --> G["EMF gauge · waveform<br/>geiger clicks · LED · vibe"]
M --> V["Survey verdict<br/>CLEAN / TRACE / ACTIVE"]
C --> K["Emitter class<br/>CONTINUOUS / POLLING /<br/>INTERMITTENT + pulse train"]
V --> L["📖 SD logbook"]
K --> L
end
**المقدار ← القوة.** خلال نافذة زمنية قصيرة، يقيس Specter *نسبة الوقت* التي يكون فيها الناقل
موجودًا ويحوّلها بسلاسة إلى **FIELD %**. القارئ الجالس مباشرة فوق Flipper يثبّت المؤشر؛
أما الأضعف أو الأبعد فيحرّكه قليلًا. وهذا ما يحرّك الإبرة وكلمة القرب ومعدل النقرات.
**الإيقاع ← الهوية.** بشكل منفصل، يتم توقيت كل انتقال لهذه البتة. القارئ الذي يستيقظ
لمدة 20 مللي ثانية كل 200 مللي ثانية يُنتج نمط اندفاع/فجوة مع عدم وجود شبه أي ارتعاش، لأن حلقة الاستطلاع لديه
محرّكة بآلة حالة مضبوطة بالكريستال. حركة اليد وضوضاء الترددات الراديوية ليست بهذا الثبات. هذا
الفرق هو ما يفصل **POLLING** عن **INTERMITTENT**.
### طبقات القرار تُختبر على حاسوب حقيقي
الأماكن التي يحوّل فيها Specter الأرقام إلى *ادعاء* — "هذا قارئ استطلاع"، "هذه الغرفة
نظيفة"، "هذا ما يجب أن تقرأه الإبرة" — هي كود C خالص بدون أي اعتماديات على العتاد، وهي
مثبّتة باختبارات المضيف بدلًا من اكتشافها على الجهاز:```bash
make -C test # 300 checks: classifier, verdict, meter scaling, presence
🚀 التثبيت
لا حاجة للوحة تطوير، ولا حاجة لوميض البرنامج الثابت — إنه ملف .fap واحد فقط.
الخيار أ — ملف .fap مُجمّع مسبقًا (الأسهل)
-
احصل على ملف
.fapالصحيح من صفحة الإصدارات:البرنامج الثابت لديك الملف الرسمي / الأصلي specter.fapUnleashed أو RogueMaster أو Momentum أو أي إصدار أحدث specter-fw-dev.fapإذا أظهر الجهاز رسالة
APP:87 < FW:88 — This app might not work، فأنت تملك الملف الخاطئ — خذ الملف الآخر. إصدار واجهة برمجة التطبيقات للتطبيق يُثبَّت عند تجميعه، لذا لا يمكن لبناء واحد أن يلبي خطي البرنامج الثابت معًا. عادةً ما يعمل التطبيق حتى لو ضغطت على "متابعة"، لكن البناء المطابق لن يطلب ذلك. -
افتح qFlipper، واسحب الملف إلى
SD Card / apps / NFC /. -
على الجهاز: Apps ← NFC ← Specter.
الخيار ب — قم ببنائه بنفسك باستخدام ufbt```bash
one-time
python3 -m pip install --upgrade ufbt
from the repo root, with your Flipper plugged in over USB:
ufbt # build specter.fap into ./dist ufbt launch # build, upload to the Flipper and open it make -C test # run the host tests for the pure logic
`.fap` في `dist/specter.fap`؛ `ufbt launch` ينسخه إلى `apps/NFC/` ويشغّله لك.
> الأيقونات في `icons/`، ولقطات الشاشة واللافتة في `images/` مولّدة — أعد توليدها بـ
> `python3 tools_gen_icons.py`، `python3 tools_gen_mockups.py` و`python3 tools_gen_banner.py` (يتطلب `pillow`).
---
## 🎮 طريقة الاستخدام
**مسح شامل، من البداية إلى النهاية:**
1. شغّل **Specter**. على شاشة **Sweep**، اضغط **LEFT** وابقَ ثابتًا لمدة 3 ثوانٍ لمعايرة مستوى ضجيج الغرفة.
2. أمسك Flipper بشكل مسطّح وحرّكه **ببطء** عبر الشيء الذي تفحصه — محطة بطاقات، قارئ أبواب، الحافة السفلية لحافة صراف آلي، طرد، مكتب.
- **موجة هادئة / مسطّحة** → لا يوجد قارئ نشط في النطاق.
- **الإبرة ترتفع، النقرات تتسارع** → أنت تقترب من باعث. واصل التحرك نحو الذروة.
- **`● ACTIVE READER` + إطار إنذار** → يوجد قارئ نشط هنا تمامًا.
3. وجدت شيئًا؟ ارجع وافتح **Fingerprint**. أمسك Flipper ثابتًا عليه ودع الإيقاع يستقر — بضع ثوانٍ عادةً ما تكفي. اضغط **OK** لحفظ النتيجة.
4. تريد مسح غرفة كاملة بدلًا من ذلك؟ افتح **Site Survey**، تجوّل في المكان حتى يمتلئ الشريط، واقرأ الحكم.
5. تغادر المنطقة؟ ضع Flipper في **Watch Mode** وسيقف حارسًا، يستيقظ ويطلق إنذارًا إذا ظهر قارئ أثناء غيابك.
6. تحقق من **Logbook** لكل ما حفظته، مع طوابع زمنية — أو اسحب `logbook.csv` من البطاقة إلى جدول بيانات.
> 💡 امسح قارئًا معروفًا سليمًا أولًا (هاتفك الخاص بتقنية NFC، أو محطة لمسية تثق بها) لترى كيف يبدو المجال القوي الشرعي على العداد — وما يُقرأ عليه بصمته. ثم ابدأ البحث.
### عناصر التحكم
| الشاشة | المفتاح | الإجراء |
|---|---|---|
| **Sweep** | `OK` | إعادة تعيين الذروة / جهات الاتصال |
| | `اضغط مطوّلًا OK` | تسجيل القراءة الحالية |
| | `LEFT` | معايرة مستوى الضجيج (3 ثوانٍ) |
| **Fingerprint** | `OK` | حفظ النتيجة في السجل |
| | `اضغط مطوّلًا OK` | إعادة تشغيل القياس |
| **Site Survey** | `OK` | تشغيل المسح مرة أخرى |
| **Watch Mode** | `OK` | إعادة التجهيز (مسح العداد والساعة) |
| *في أي مكان* | `BACK` | الصعود مستوى واحد |
---
## 🔬 القيود بصراحة
- **تردد 13.56 ميجاهرتز (HF) فقط.** يستشعر Specter **نطاق NFC** — النطاق المستخدم في قارئات الدفع اللاتلامسي، ومعظم قارئات الوصول الحديثة، وقارئات النقل والفنادق. **لا يمكنه** رؤية قارئات **125 كيلوهرتز (LF)** (لوحات أبواب HID Prox / EM4100 الأقدم)؛ مسار LF في Flipper لا يحتوي على بت مكافئ لكشف المجال.
- **يستشعر *الموجة الحاملة* للقارئ، وليس ما يقرؤه.** يخبرك Specter أن *قارئًا نشطًا هنا، ومدى قربه تقريبًا، وما الإيقاع الذي يستقصي به* — لا يفك تشفير أو يحدد أو يلتقط أي شيء يفعله القارئ.
- **القوة نسبية، وليست معايرة.** `FIELD %` وكلمات القرب هي دليل مقارن "أقرب / أبعد" للمسح، وليست مسافة مقاسة بالسنتيمتر. إنها قراءة *مقيّسة* لدورة عمل الموجة الحاملة مقابل نطاق استقصاء نموذجي (انظر [قراءة العداد](#-reading-the-meter--fixed-in-23))؛ القارئ الذي يستقصي بشكل متناثر بشكل غير عادي سيُقرأ أقل عند نفس المسافة، والقارئ في وضع الموجة المستمرة سيصل إلى الذروة من مسافة أبعد.
- **العداد يصل إلى الحد الأقصى.** `MAX` تعني أن الموجة الحاملة مرفوعة بقدر ما يرفعها هذا القارئ دائمًا — بعد تلك النقطة، الاقتراب حقًا لا يمكن أن ينتج رقمًا أكبر. استخدم تثبيت الذروة `PK` لمقارنة المواضع بدلًا من ذلك.
- **الإيقاع يُحل إلى ~2 مللي ثانية.** هذه هي فترة أخذ العينات. التوقيتات القريبة منها تُعرض بعلامة **`~`** ويُخصم من الثقة وفقًا لذلك — يفضّل Specter الإشارة إلى حد دقته الخاص بدلًا من اقتباس رقم يبدو دقيقًا لا يمكنه ضمانه.
- **`CLEAN` تعني نظيفًا عند الحساسية التي اخترتها.** قارئ خامل يستيقظ فقط عند لمسة حقيقية، أو قارئ محمي، يبقى غير مرئي عند *أي* عتبة. غياب القراءة ليس ضمانًا للغياب.
- **راديو واحد في كل مرة.** يستحوذ Specter على شريحة NFC أثناء المسح، لذا أغلق أي تطبيق NFC آخر أولًا (سيقول *NFC غير متاح* إذا كان شيء آخر يمسك بالراديو).
---
## ⚖️ الجانب القانوني والأخلاقي
Specter أداة **دفاعية، للاستماع فقط** — **لا يبث أبدًا**، ولا يشغّل مجالًا، ولا يلمس القارئ أبدًا. استخدمه لمسح **منطقتك الخاصة** لنقاط البيع، أو بابك، أو مكتبك، أو ممتلكاتك، أو أجهزة لديك **تفويض صريح** لتقييمها. أنت مسؤول عن كيفية استخدامك له. اعرف قوانينك المحلية.
---
## 🗺️ خارطة الطريق
- [x] حفظ الحساسية / الصوت / الاهتزاز / LED عبر عمليات إعادة التشغيل
- [x] "سجل" للاكتشافات مع طوابع زمنية على بطاقة SD
- [x] مسح في الخلفية مع إيقاف الشاشة — *وضع التخفي*
- [x] عتبة قابلة للضبط للتحكم الدقيق في النطاق — *معايرة تلقائية + حساسية مخصصة*
- [x] بصمة باعث عبر إيقاع استقصائه
- [x] مسح موقع مؤقّت مع حكم على الغرفة
- [x] تصدير السجل بصيغة CSV للتقارير — *يُكتب مباشرةً بجانب ملف .txt*
- [x] وضع مراقبة غير مراقب طويل المدى مع إنذار استيقاظ عند الاكتشاف
- [x] جعل العداد يستخدم نطاقه الكامل ضد قارئات الاستقصاء الحقيقية
- [x] سهم اتجاه "أقرب / أبعد" أثناء البحث
- [ ] التحقيق في استشعار قارئ قائم على ملف (125 كيلوهرتز) كوضع منفصل
- [ ] تصفية السجل على الجهاز حسب النوع
---
## 🗂️ هيكل المشروع```
Specter-FlipperZero/
├── application.fam # Flipper app manifest (category: NFC)
├── specter.c / specter_i.h # app entry, wiring, alert feedback, stealth
├── helpers/
│ ├── field_detector.{c,h} # worker thread: samples the field-present bit,
│ │ # duty-cycle + edge timing + calibration
│ ├── emitter_classify.{c,h} # pure: cadence -> CONTINUOUS/POLLING/INTERMITTENT
│ ├── survey_verdict.{c,h} # pure: survey stats -> CLEAN/TRACE/ACTIVE
│ ├── field_scale.{c,h} # pure: raw carrier duty -> full-scale meter
│ ├── present_hold.h # pure: debounce presence across poll gaps
│ ├── specter_settings.{c,h} # persisted settings (saved_struct)
│ └── specter_log.{c,h} # SD logbook, RTC-stamped .txt + live .csv
├── views/
│ ├── sweep_view.{c,h} # the EMF gauge / waveform / alarm screen
│ ├── fingerprint_view.{c,h} # classification card + pulse-train trace
│ ├── survey_view.{c,h} # progress + verdict card
│ └── watch_view.{c,h} # unattended guard: clock + count + alarm
├── scenes/ # scene-manager navigation
├── test/ # host tests for the pure decision layers
├── icons/ # 1-bit Flipper icons (generated)
├── images/ # banner + screen mockups (generated)
└── tools_gen_*.py # regenerate icons / mockups / banner
🎨 العلامة التجارية
جميع الأعمال الفنية مولّدة، لذا لا تنحرف أبدًا عن التطبيق:
| الأصل | الحجم | مكان استخدامه |
|---|---|---|
images/banner.png | 2560×800 | ترويسة README (بمقاس 2× لتبقى واضحة على شاشات Retina) |
images/social-preview.png | 1280×640 | الإعدادات ← المعاينة الاجتماعية — الحجم الموصى به من GitHub (الحد الأدنى 640×320، حد أقصى 1 ميجابايت) |
images/mark.png | 512×512 | شعار مربع: الصور الرمزية، الأيقونات، الشرائح |
images/demo.gif | 768×384 | الرسوم المتحركة أعلاه، ~9 ثوانٍ، مبنية من ثوابت العرض الفعلية |
| python3 tools_gen_banner.py # banner, social preview, logo mark | ||
| python3 tools_gen_gif.py # the demo animation | ||
| python3 tools_gen_mockups.py # screen stills | ||
| python3 tools_gen_icons.py # 1-bit Flipper icons |
> المعاينة الاجتماعية هي الأصل الوحيد الذي لا يمكن لـ GitHub التقاطه من المستودع — يجب
> رفعها يدويًا مرة واحدة في **الإعدادات ← المعاينة الاجتماعية**. وهي ما يظهر
> عند مشاركة المستودع على Slack أو X أو LinkedIn أو Discord.
---
## 🙏 الاعتمادات
- بُني بواسطة **[at0m-b0mb](https://github.com/at0m-b0mb)**.
- جزء من عائلة أدوات أمان Flipper: **[Argus](https://github.com/at0m-b0mb/Argus-FlipperZero)** (مراقب Wi-Fi deauth / evil-twin)، و**[GhostTag](https://github.com/at0m-b0mb/GhostTag-FlipperZero)** (مطارد مضاد للتتبع عبر BLE)، و**[Cerberus](https://github.com/at0m-b0mb/flipper-cerberus)** (مراقب راديو Sub-GHz RF).
- مدعوم بواسطة [برنامج Flipper Zero الثابت](https://github.com/flipperdevices/flipperzero-firmware) NFC HAL (كشف المجال `furi_hal_nfc`) + [ufbt](https://github.com/flipperdevices/flipperzero-ufbt).
## 📄 الترخيص
[MIT](https://github.com/at0m-b0mb/specter-flipperzero/blob/main/LICENSE) © 2026 at0m-b0mb