
ابحث عن بيانات الاعتماد في لقطات الشاشة، واحفظها في مدير الأسرار الخاص بك، واحذفها بشكل غير قابل للإلغاء من الصورة — محليًا، دون اتصال، باستخدام التعرف البصري على الأحرف (OCR).
ابحث عن بيانات الاعتماد في لقطات الشاشة، واستخرجها إلى مدير أسرار، وقم بإخفائها بشكل لا رجعة فيه من الصور — حتى لا تتعفن الأسرار في ملاحظاتك ولقطات الشاشة و~/Desktop.
محلي. دون اتصال. صامت. لا شبكة، لا تتبع عن بعد افتراضياً.
سكرين سكراب يربط بين فئتين من الأدوات الحالية: أدوات الإخفاء الرسومية (Xnapper، Shhshot، macshot) تطمس المعلومات الشخصية يدوياً ولكنها لا تستطيع التمييز بين السر والعنوان أو تسجيل ما تخفيه؛ أدوات فحص الأسرار (gitleaks، TruffleHog) تجد بيانات الاعتماد الحقيقية ولكن فقط في النصوص، وليس أبداً في PNG. سكرين سكراب يجلب كشفاً من الدرجة الأولى لـ gitleaks — بالإضافة إلى حزمة اختبار اختراقي وتحليل الانتروبيا — إلى البكسل، بدون رأس: فهو يلتقط كل سر إلى مدير الأسرار الخاص بك، ويخفي الصورة بشكل لا رجعة فيه، ويعيد OCR للنتيجة لإثبات اختفاء السر.
شبكة أمان، وليس ضماناً — سكرين سكراب لا يدعي أبداً أن الصورة "مضمونة النظافة"; فكل من OCR والكشف يغفلان أشياءً، لذا تحقق دائماً من النتائج بنفسك. اقرأ هذا قبل الاعتماد عليه.
screenscrub scan ~/Screenshots # جولة جافة: كشف + تقرير، بدون كتابة
screenscrub clean ~/Screenshots --out ~/clean \ # استخراج، إخفاء، تحقق، عزل
--sink file://./secrets.age --yes
screenscrub verify ~/clean # أثبت أن المجلد نظيف (يخرج ≠0 إن لم يكن)
screenscrub clean --keep-originals ./tmp
Cleaning 7 image(s) in ./tmp (7 worker(s))…
[1/7] tmp/ssh.jpg — 6 region(s) → tmp/ssh.redacted.jpg ✓ verified
[2/7] tmp/key.jpg — 13 region(s) → tmp/key.redacted.jpg ✓ verified
[3/7] tmp/test2.jpg — 12 region(s) → tmp/test2.redacted.jpg ✓ verified
[4/7] tmp/test5.jpg — 13 region(s) → tmp/test5.redacted.jpg ✓ verified
[5/7] tmp/test3.jpg — error: verification failed: 4 secret region(s) still detectable in tmp/test3.redacted.jpg; original preserved
[6/7] tmp/test4.jpg — error: verification failed: 9 secret region(s) still detectable in tmp/test4.redacted.jpg; original preserved
[7/7] tmp/test6.jpg — error: verification failed: 7 secret region(s) still detectable in tmp/test6.redacted.jpg; original preserved
7/7 file(s) flagged, 382 region(s) total, 3 file(s) errored/unverified.
By kind:
high-entropy 343
keyword-secret 15
db-connection-uri 10
github-pat 6
unix-crypt-hash 6
aws-access-key 1
stripe-key 1
Needs manual attention (3):
tmp/test3.jpg — error: verification failed: 4 secret region(s) still detectable in tmp/test3.redacted.jpg; original preserved
tmp/test4.jpg — error: verification failed: 9 secret region(s) still detectable in tmp/test4.redacted.jpg; original preserved
tmp/test6.jpg — error: verification failed: 7 secret region(s) still detectable in tmp/test6.redacted.jpg; original preserved
| قبل — قيم سرية مرئية | بعد clean — مخفية بشكل لا رجعة فيه |
![]() |
![]() |
نفس لقطة الشاشة قبل وبعد clean: كل قيمة سرية تُفك شفرتها إلى بكسل، وتُحاط بمربع، ثم تُعاد ترميزها إلى صورة جديدة (لا رجعة فيه) — التسميات والهيكل يظلان قابلين للقراءة.
يتطلب وجود ثنائي OCR tesseract في PATH:
brew install tesseractwinget install UB-Mannheim.TesseractOCR (أو مثبت UB Mannheim)apt-get install tesseract-ocrثم قم بالبناء:
go build -o screenscrub ./cmd/screenscrub
يتم التجميع عبر الأنظمة إلى macOS (arm64/amd64) وWindows (amd64) — فهو يستخدم tesseract خارجياً بدلاً من cgo. تم اختباره فقط على macOS.
scan <dir|file> — جولة جافةيكشف ويُبلغ؛ لا يكتب شيئاً.
screenscrub scan ~/Screenshots --ignore 'node_modules/**' --ignore '*.thumb.png'
screenscrub scan shot.png --json # تقرير قابل للقراءة آلياً
screenscrub scan ~/Screenshots --preview ~/review # تفقد ما سيجري إخفاؤه باستخدام clean
--preview <dir> يكتب نسخة غير مدمرة من كل صورة مرفوضة مع تحديد كل منطقة مكتشفة (غير مملوءة)، لتتمكن من تأكيد ما سيقوم clean بإخفائه قبل الالتزام. ⚠️ هذه النسخ لا تزال تحتوي على الأسرار — يتم إنشاء الدليل بصلاحيات 0700 ويجب عدم مشاركته.
ينتهي التقرير بمجموع: تفصيل حسب النوع وقائمة صريحة "تحتاج إلى اهتمام يدوي" — الملفات التي أخطأت أو فشلت في التحقق أو لم تنتج نص OCR على ما يفترض أن تكون لقطة شاشة (خطأ OCR صامت يُقرأ مثل الصورة النظيفة، لذا يتم عرضه بدلاً من الوثوق به).
scan --fail-on-findings يخرج بقيمة غير صفرية عند اكتشاف أي شيء — بوابة pre-commit/CI.
clean <dir|file> — استخراج، إخفاء، عزلSCREENSCRUB_PASSPHRASE=… screenscrub clean ~/Screenshots \
--out ~/Screenshots/clean \
--sink file://./secrets.age \
--yes
لكل صورة بها نتائج، يقوم clean بما يلي:
<name>.redacted.png في --out (أو بجانب المصدر)،<out>/quarantine/ مشفراً باستخدام age.تذهب الأسرار إلى أي مصرف تمرره إلى --sink: ملف age (افتراضي)، 1Password (op://)، KeePassXC (keepassxc://)، سلسلة المفاتيح في macOS (keychain://)، أو HashiCorp Vault (vault://) — أو مستلمي age المعتمدين على العتاد (YubiKey، Touch ID). راجع مصارف الأسرار.
الوسائط:
| الوسيط | المعنى |
|---|---|
--out <dir> | مكان وضع النسخ المخفية (افتراضي: بجانب المصدر) |
--sink <uri> | file://./secrets.age · op://Vault · keepassxc://./v.kdbx · keychain://service · vault://KV |
--recipient <age1…> | تشفير إلى مستلم age (قابل للتكرار): X25519، YubiKey، أو Touch ID |
--recipients-file <f> | ملف مستلمي age، واحد في كل سطر |
--passphrase | كلمة المرور لمصرف الملف / العزل (فضل استخدام المتغير البيئي أو --config) |
--watch | استمر في التشغيل؛ معالجة لقطات الشاشة الجديدة لحظة ظهورها (fsnotify) |
--purge | تمزيق الأصول بدلاً من عزلهم (راجع التحذير أدناه) |
--keep-originals | كتابة نسخ مخفية فقط؛ ترك الأصول في مكانها (لا عزل، لا كلمة مرور، لا --yes) — حصري متبادل مع --purge |
--yes | تأكيد التعامل المدمر مع الأصول (مطلوب) |
--config <file> | إعدادات JSON؛ يتيح لك إبقاء كلمة المرور خارج argv |
--no-verify | تخطي التحقق بإعادة OCR من المخرجات المخفية (غير موصى به) |
-i, --interactive | فتح كل صورة مرفوضة وتأكيد الإخفاء/التخطي قبل لمسها |
--llm | استخدام Claude لتجاهل العلامات الزائدة الحميدة؛ يرسل سلاسل المرشح إلى واجهة Anthropic API |
--llm-api-key | مفتاح Anthropic API لـ --llm (أو ANTHROPIC_API_KEY) |
--jobs N | معالجة N صورة بالتوازي (افتراضي: عدد وحدات المعالجة) |
--manifest <file> | كتابة خريطة JSON من الأصل←المُخفى←المناطق |
--ocr-raw / --ocr-upscale N | تعطيل المعالجة المسبقة للمحطة المظلمة / التكبير قبل OCR |
--exclude-kind <kind> | إخفاء نتائج من نوع معين (قابل للتكرار)، مثلاً high-entropy — مقبض دقة دون اتصال |
--min-confidence <0..1> | إسقاط النتائج تحت هذه الثقة — مقبض دقة دون اتصال |
--json | إصدار التقرير بصيغة JSON |
--ignore <glob> | تجاهل glob، قابل للتكرار؛ ** يطابق أي عمق |
--lang | لغة tesseract (افتراضي eng) |
--exclude-kind و --min-confidence هما مقابض دقة محلية (بدون شبكة) لنصوص صاخبة — النظير غير المتصل لـ --llm. يتبادلان الاستدعاء مقابل تقرير أكثر هدوءاً، لذا استخدمهما عن قصد. كلاهما يعمل أيضاً على scan/verify ويمكن ضبطهما في --config (exclude_kinds، min_confidence).