Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
claude-awm — يتجاوز العلامات المائية لنصوص LLM عن طريق حقن محددات الاختلاف في يونيكود؛ يشمل مولّد SynthID، وكاشف mean-g، ودفاعات التطبيع، وتجارب الإنتروبيا. | Kitploit
أدوات/GitHubGitHub/aloshdenny/claude-awm
إخفاء المعلوماتالخصوصيةتعلم الآلةأمن الذكاء الاصطناعيالهجوم العدائي
GitHubaloshdenny/claude-awm

claude-awm

يتجاوز العلامات المائية لنصوص LLM عن طريق حقن محددات الاختلاف في يونيكود؛ يشمل مولّد SynthID، وكاشف mean-g، ودفاعات التطبيع، وتجارب الإنتروبيا.

عرض المستودع
173منذ 4 أياملم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

claude-awm: هل يمكنك محو علامة SynthID المائية النصية عن طريق تحرير النص؟

مرحبًا، ألوش هنا ✌🏻

نعم، لكن عائلة هجوم واحدة فقط تنجح، وهي ليست التي يظنها الجميع.

محددات الاختلاف في Unicode (الفئة Mn، من U+FE00 إلى U+FE0F ومن U+E0100 إلى U+E01EF) تُنزل الكاشف إلى ما دون العتبة وتبقى هناك. كل هجوم بالحروف غير المرئية الآخر الذي جرّبته يُلغى بالكامل بسطر واحد من تطبيع الإدخال. محددات الاختلاف لا تُلغى، لأنها نقاط رمزية ذات معنى (عرض الإيموجي، متغيرات CJK) لا يستطيع NFKC طيّها ولا ينبغي له ذلك.

أُعيدت التجربة على ثلاثة نماذج وفي مجالين:

النموذجالمجالخط الأساس zبعد vs16_30معدل التحرير
gpt-oss-20bنثر45.030.7257%
gpt-oss-20bكود37.240.6858%
Qwen3.8-27Bنثر35.50-0.6757%

العتبة هي z = 2.33. الثلاثة جميعًا تقع دونها، وتبقى دونها بعد التطبيع (0.09 و0.45 و-0.78 على التوالي). يُعرض النص بشكل مطابق للقارئ البشري.

الاكتشاف الحقيقي الثاني لا يحتاج إلى أي هجوم: النص منخفض الإنتروبيا بالكاد يكون موسومًا بالماء من الأساس. توليد الكود بواسطة Qwen3.8-27B يعطي خط أساس نظيفًا عند z = 4.31، وهو قريب بالفعل من العتبة دون فعل أي شيء.

ما هذا

شركة أنثروبيك (وقبلها Google DeepMind في ورقة SynthID-Text) وسمت النص المولَّد بانحياز عينات التوكن عبر بطولة بمفتاح. الإشارة تكمن في أي التوكنات اختيرت، لا في أي حرف خفي. أردت معرفة مدى هشاشة ذلك أمام شخص محفّز يستخدم البحث والاستبدال، لذا بنيت المولّد وكاشف mean-g غير مدرب ورميت الهجمات عليه.

عتبة الكاشف هي z = 2.33 (معدل إيجابيات كاذبة 1%). فوق ذلك = تم اكتشاف العلامة المائية. ولّدت نصًا موسومًا، هاجمته، أعدت تجزئته إلى توكنات، ثم قيّمته. يحمل كل جدول نتائج عنصر تحكم roundtrip (نص موسوم لم يتعرض لهجوم) حتى ترى أن الكاشف يعمل فعلًا في ذلك الصف. خلال هذه الدراسة، تسبب خلل مرتين في انهيار كل قيم z إلى الصفر، ولم يكشف الخلل سوى عنصر التحكم.

نطاق الهجوم: ما الذي ينجح فعلًا

ينقسم سطح الهجوم بوضوح حسب فئة Unicode، والتي اتضح أنها القصة كلها.

ما ينجح (الفئة Mn، علامات غير متباعدة):

ما لا ينجح (الفئة Cf، أحرف تنسيق):

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

النطاق العملي: يتطلب هذا لمس حوالي 20% أو أكثر من الأحرف لدفع خط أساس قوي إلى ما دون العتبة، لكن الأحرف المُدرجة غير مرئية، لذا يظل النص مقروءًا بشكل طبيعي في أي معدل تحرير. تم التحقق من أنه مطابق بصريًا، انظر src/fidelity_check.py. أربع عائلات تُدرج أحرفًا لا تُظهر شيئًا؛ المتجانسات الشكلية (homoglyphs) هي الاستثناء الصريح (تعتمد على الخط، وليست مضمونة الخفاء).

ما لا ينجح: الأشياء الواضحة

خوفي الأولي كان الأمر الممل: أن الشرطات الطويلة وتحويل "و" إلى "&" وإزالة ترميز Markdown ستعمل ببساطة، فتتحول العلامة المائية إلى مجرد مسرح أمني. كثير من الناس على الإنترنت يفترضون ذلك تمامًا.

لا ينجح ذلك. سلم التحرير السطحي بأكمله على gpt-oss-20b حتى 32k توكنًا:

عبر ثلاثة نماذج (0.8B و4B و20B = 294 خلية)، عبرت خلية واحدة فقط العتبة: حذف 39% من كل كلمة عند أقصر طول على نموذج 4B. هذا ليس هجومًا، هذا تمزيق للمستند.

أمران فاجآني:

  • عدد التعديلات لا يتنبأ بالضرر، بل شكل التعديلات هو الذي يتنبأ. إزالة كل ترميز Markdown (13.6% من التوكن) لم تفعل شيئًا؛ بل سجلت درجة أعلى قليلًا من خط الأساس. حقن مسافات عشوائية بنسبة 1.6% سبّب ضررًا أكبر بـ25x لكل تعديل. علامات Markdown متجمّعة، لذا تتداخل نوافذ إفسادها، والمقاطع النثرية الطويلة بينها تُبقي بذرة العلامة المائية سليمة عند إعادة توليدها. التعديلات المتناثرة التي تزيل مزامنة الـTokenizer تصيب نوافذ جديدة في كل مرة.
  • الطول يساعد الكاشف، لا المهاجم. z ينمو مثل جذر التوكنات. "خداعه عبر سياق طويل" هو عكس الصواب؛ 32k هي أصعب حالة للهجوم، وليست الأسهل.

الآلية الكاملة وجداول كل هجوم في docs/FINDINGS.md.

جرّب النسخة التفاعلية ← عينات حقيقية من الدراسة مع مفتاح إظهار قبل/بعد، إضافة إلى ساحة تجارب لتشغيل تحويل الهجوم على نصك الخاص. لن يخبرك ما إذا كان النص الملصق عشوائيًا موسومًا بالماء فعلًا (فهذا يتطلب مفتاحًا لا نملكه)، وهو يوضح ذلك؛ انظر site/ للاطلاع على سكربت التوليد.

النتيجة التي لا تحتاج إلى هجوم

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

نموذج Qwen3.5-4B، نثر مقابل كود، عينات من 512 توكنًا، دون أي هجوم:

المجالالإنتروبياz
نثر1.19 bits/tok11.1
كود0.55 bits/tok5.0

نسبة z 0.45x، ونسبة الإنتروبيا 0.46x، وهما تتحركان معًا، وهذا هو أثر الآلية الظاهر. 3 من 8 عينات كود هبطت إلى عتبة الكشف أو دونها من تلقاء نفسها. أكثرها إحكامًا (خوارزمية مجردة، 0.2 bits/token) سجلت 1.7، أي فشل كشف.

يصبح الأمر أكثر تطرفًا على نطاق واسع. خط الأساس z دون أي هجوم إطلاقًا:

النموذجالنثرالكودالنسبة
gpt-oss-20b45.0337.240.83
Qwen3.8-27B35.504.310.12

مخرجات الكود من Qwen3.8-27B قالبية جدًا لدرجة أن العلامة المائية النظيفة غير المُهاجَمة تقع عند z = 4.31، فوق العتبة 2.33 بالكاد. لا يُشترط أي خصم.

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

الخلاصة الدفاعية

إذا كنت تُطلق أحد هذه الكواشف، فإن تطبيع الإدخال يوصلك إلى معظم الطريق، لكن ليس كله:

  1. أزل أحرف الفئة Cf. يقتل أحرف العرض الصفري (zero-width) وثنائية الاتجاه (bidi) والمجموعات المركبة. هذا هو الربح الكبير.
  2. طيّ NFKC. يعالج nbsp وأشكال التوافق.
  3. أزل نطاقات محددات الاختلاف صراحةً. لن يفعل NFKC ذلك نيابةً عنك، وهذه هي الفجوة المفتوحة حاليًا.
  4. احتفظ بخريطة ملتبسات Unicode (UTS-39) للمتجانسات الشكلية (homoglyphs). لن يفعل NFKC ذلك أيضًا.

الخطوتان 3 و4 هما ما يغفله المطبِّع الساذج.

ما الخطأ في هذا / ما لم أصل إليه

صراحةً بشأن الثغرات.

  • أرقام الكود على نموذج 27B غير مفيدة كنتيجة هجوم. خط الأساس غير المُهاجَم هناك هو z = 4.31، لذا لا يمكنك إظهار هجوم يتغلب على كاشف شبه أعمى أصلًا. أبقيت تلك الصفوف لكن وسمتها؛ الإشارة المفيدة هي خط الأساس، وليست دلتا الهجوم.
  • مسألة ما إذا كانت نتيجة الكود على نموذج 27B ناتجة عن الإنتروبيا أم أسلوب النموذج غير محسومة. الأمر يتطلب قياس إنتروبيا لكل توكن مثل ما حصل عليه نموذج 4B، وهو ما لم أشغّله لذلك النموذج.
  • GLM-5.2 لم ينتج أي بيانات. استأجرت حزمة 8xA100 وواجهت خمسة أعطال في البنية التحتية متتالية (أمر تنزيل مهمَل، كسر توافق ABI بين torch وtorchvision، تحميل النموذج في ذاكرة المضيف بدل وحدات GPU)، أهدرت نحو 25$ شاملة 19$ على حزمة بقيت خاملة لأنني وثقت بتنزيل لم يبدأ أصلًا، وأنهيتها دون شيء. لم أحاول Kimi-K3 أصلًا؛ فبحوالي 1.5 تيرابايت حتى مع التكميم يحتاج أكثر من 20 وحدة A100. سؤال النطاق الحدودي ما زال مفتوحًا.
  • فشل تحميل ثلاث نقاط تفتيش مكمّمة من المجتمع لنموذج Qwen3.8-27B (FP8 يتطلب torch dtype لا نملكه، وإعادة تعبئتان AWQ/compressed-tensors مع عدم تطابق في التعبئة). شغّلته بدلًا من ذلك بصيغة bf16 على وحدة H100. إذا كنت تعيد التجربة، فتجاوز إعادة التعبئة.
  • الكاشف هو مقياس mean-g غير المدرب، وليس الكاشف البيزي المدرب الوارد في الورقة. الكاشف البيزي سيكون على الأرجح أكثر حساسية، لذا هذه القيم z هي حد أدنى، لكنني لم أقِس ذلك.
  • ادعائي حول تطابق homoglyph هو للقارئ النموذجي، وليس مثبتًا. الحرف السيريلي а من الفئة Ll، لذا فإن خفاءه خاصية خط، وليست ضمانة من Unicode.
  • حجم العينة n صغير، مستندان لكل خلية في السلالم، و8 عينات لكل مجال للإنتروبيا. كافٍ لأحجام التأثير هنا (فهي كبيرة)، وغير كافٍ لأشرطة خطأ ضيقة لكل هجوم.
  • لا أقدم وصفة مراوغة مضبوطة، وهذا مقصود. كل هجوم هنا مُبلَّغ عنه إلى جانب نتيجة التطبيع التي تهزمه أو لا تهزمه. الهدف كان قياس موقع الخط الأمامي، لا تغليف طريقة تجاوز.

البنية

root@kitploit:~
src/synthid_robustness.py   generator + attack ladder + mean-g detector + normalizer
src/code_vs_prose.py        the entropy experiment (with per-token entropy tap)
src/fidelity_check.py       proves the stego attacks are visually identical
src/synthid_mlx.py          watermarking bridge for Apple Silicon (MLX), validated vs HF
src/prompts_code.py         prose / code / mixed prompt sets
src/build_report_data.py    assembles results/ into the tables in FINDINGS.md
results/                    the JSON this is all computed from
docs/FINDINGS.md            every table, the defense hierarchy, the bugs I caught

التشغيل

root@kitploit:~
python -m venv .venv && . .venv/bin/activate
pip install -r requirements.txt
root@kitploit:~
# generate watermarked docs + run the full attack ladder on a model
MODEL=Qwen/Qwen3.5-4B LENGTHS=1024,2048,4096,8192 N_DOCS=2 \
  DOCS=docs_4b.json OUT=res_4b.json python src/synthid_robustness.py

# the entropy experiment (code vs prose)
python src/code_vs_prose.py --model Qwen/Qwen3.5-4B --out res_cvp_4b.json

# the variation-selector / stego attacks, scored raw AND post-normalization
ATTACK_SET=desync DEFENSE=1 PROMPT_SET=prose MODEL=Qwen/Qwen3.5-4B \
  DOCS=docs_4b.json OUT=res_defense.json python src/synthid_robustness.py

PROMPT_SET يقبل prose أو code أو mixed. FAST_WM=1 يستخدم جسر وسم مائي numpy (أسرع على نماذج المفردات الصغيرة مع CPU قوي)، وFAST_WM=0 يستخدم معالج GPU الخاص بـ HF (أسرع بكثير على نماذج المفردات الكبيرة؛ على H100 كان هذا هو الفرق بين 0% و46% من استخدام GPU).

يتطلب الوسم المائي توزيع التوكن التالي الكامل، لذا يعمل عبر transformers (CUDA MXFP4 الأصلي، أو MPS/CPU). لا يمكن لـ Ollama وllama.cpp فعل ذلك، لأنهما لا يعرضان logits أثناء التوليد. على Apple Silicon، يجسر src/synthid_mlx.py توليد MLX إلى رياضيات الوسم المائي؛ وهو مُتحقق منه كمتطابق بتًّا ببت مع مرجع HF.


الحلم، كما يُزعم

(الميم الذي بدأ كل هذا. تبيّن أنك تحتاج إلى محددات اختلاف، لا إلى بحث واستبدال.)


ملاحظة: استخدمت Claude Code بكثافة في التنفيذ وإعادة تشغيل التجارب عبر أربعة أجهزة (جهاز Mac، وبطاقة 4090 الخاصة بي، و3090 مستأجرة، ووحدة H100). تصميم التجارب، والهجمات التي أردت تجربتها، وقرارات التأطير هي مني. أصرّ كلود على قياس كل هجوم مقابل دفاعه الخاص، ولهذا تحتوي جداول الإخفاء (stego) على عمود خام وعمود مُطبَّع بدل العمود الخام فقط؛ هذا ما حوّل عبارة "الأحرف غير المرئية تكسرها" إلى النتيجة الفعلية، وهي أن أحرف الفئة Mn فقط هي التي تنجو من المطبِّع.

تنزيل الأداة
الهجومما يفعلهمعدل التحريرينجو من التطبيع؟
vs16_30محدد اختلاف بعد ~30% من الأحرف57%نعم
vs16محدد اختلاف بعد ~10% من الأحرف23%نعم (z 3.46)
vs_suppمحددات المستوى الإضافي (U+E0100+)24%نعم (z 3.40)
homoglyphа سيريلية بدل a لاتينية (الفئة Ll)9%نعم، لكن التأثير ضعيف
الهجومz الخامz بعد التطبيعالحكم
zwsp_30-0.0935.68أُلغي بالكامل
combo0.9235.68أُلغي بالكامل
bidi24.3735.68أُلغي بالكامل
nbsp41.0446.51بالكاد يغيّره
الهجوممعدل التحريرz @ 1kz @ 32k
roundtrip (مجموعة ضابطة)0%25.7104.3
شرطة طويلة إلى واصلة~0%26.4113.7
إزالة كل ترميز Markdown13.6%27.2103.3
من الإنجليزية الأمريكية إلى البريطانية + اختصارات1.3%~28~100
حذف 40% من كل كلمة38%4.925.4