التنفيذ demo demo التنفيذ: دليل افتراضي للمفهوم (العربية (Arabic))

التنفيذ demo demo التنفيذ: دليل افتراضي للمفهوم

Thursday, 20 November 2025

//

9 minute read

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

▪ تحذير نقدي عن الدهون

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

هيكل المشروع

الـ عرض عرض هو a منفصل ASP.net or or or or مشروع مشروع 9.0 في المستودع عند Mostlylucid.SecureChat.Demo/ مع المكونات التالية:

Mostlylucid.SecureChat.Demo/
├── Controllers/DemoController.cs       # Routes for demo pages
├── Hubs/SecureChatHub.cs              # SignalR for real-time chat
├── Views/
│   ├── Demo/Company.cshtml            # Fake company site (client)
│   └── Demo/Support.cshtml            # Support staff interface
└── wwwroot/js/
    ├── compatibility-shim1.js         # Tiny trigger (1KB)
    └── secure-chat.js                 # Chat application

كيف تُدير الديمو

  1. استنسخ المستودعات وابحر إلى Mostlylucid.SecureChat.Demo
  2. تنفيذ تنفيذ dotnet build && dotnet run
  3. فتح إلى http://localhost:5000/Demo/Company
  4. ?ref=newsletter_2025_jan
  5. هذا هو: SAFE2025
  6. في تبويب آخر، افتح /Demo/Support الاستجابة كموظفي دعم

الـ مُنتج مُنتج مخطوط مخطوط مخطوط

هذا هو الرمز الفعلي من compatibility-shim1.js - ملاحظة مدى صغرها وصغرها:

(function() {
    'use strict';

    // Actual compatibility checks (makes it look legitimate)
    if (!window.Promise) {
        console.warn('Browser does not support Promises');
    }
    if (!window.fetch) {
        console.warn('Browser does not support Fetch API');
    }

    // Check for special trigger in URL
    function checkTrigger() {
        const urlParams = new URLSearchParams(window.location.search);
        const ref = urlParams.get('ref');

        // Pattern that looks like a marketing tracking parameter
        // e.g., ?ref=newsletter_2025_jan
        if (ref && ref.match(/^newsletter_\d{4}_[a-z]+$/i)) {
            console.log('Loading enhanced support features...');
            loadSecureChat();
            return true;
        }
        return false;
    }

    // Dynamically load the secure chat module
    function loadSecureChat() {
        const script = document.createElement('script');
        script.src = '/js/secure-chat.js';
        script.onload = function() {
            if (window.SecureChat) {
                window.SecureChat.init();
            }
        };
        document.head.appendChild(script);
    }

    // Check on page load
    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', checkTrigger);
    } else {
        checkTrigger();
    }
})();

هذا النص هو -1KB فقط ويقوم بعمل شيئين مشروعين (فحص توافق المتصفح) قبل التحقق من الزناد. بالنسبة لأي شخص يتفقد الشفرة، فإنه يبدو كمساعد عادي للبوليفيل.

محور الإشارة

الـ خلفية نهاية استخدامات إشارة لـ آني الوقت مُوجّه اتصال هنا مبسط محور بنية:

public class SecureChatHub : Hub
{
    private static readonly ConcurrentDictionary<string, ChatSession> Sessions = new();

    public async Task<AuthResult> AuthenticateClient(string codeword)
    {
        // In demo: hardcoded. Production: dynamic, time-limited, rotated
        var validCodeword = "SAFE2025";

        if (codeword == validCodeword)
        {
            var sessionId = Guid.NewGuid().ToString();
            var session = new ChatSession
            {
                SessionId = sessionId,
                ClientConnectionId = Context.ConnectionId,
                StartTime = DateTime.UtcNow,
                IsAuthenticated = true
            };

            Sessions.TryAdd(Context.ConnectionId, session);
            await Groups.AddToGroupAsync(Context.ConnectionId, "authenticated-users");

            // Notify support staff
            await Clients.Group("support-staff")
                .SendAsync("NewSessionAvailable", sessionId, DateTime.UtcNow);

            return new AuthResult { Success = true, SessionId = sessionId };
        }

        return new AuthResult { Success = false };
    }

    public async Task SendMessage(string sessionId, string message)
    {
        if (!Sessions.TryGetValue(Context.ConnectionId, out var session)
            || !session.IsAuthenticated)
        {
            return; // Silently fail
        }

        var chatMessage = new ChatMessage
        {
            SessionId = sessionId,
            Message = message,
            Timestamp = DateTime.UtcNow,
            FromSupport = false
        };

        // Send to support staff in this session
        await Clients.Group($"session-{sessionId}")
            .SendAsync("ReceiveMessage", chatMessage);
    }

    // Additional methods for support staff, session management, etc.
}

الدردشة

عندما يتم تشغيل وحدة الدردشة، تنشئ نافذة واسطة مع 30 ثانية توثق العد التنازلي:

function showAuthPrompt() {
    const chatBody = document.getElementById('chat-body');
    const countdown = { seconds: 30 };

    chatBody.innerHTML = `
        <div class="auth-prompt">
            <h3>Verification Required</h3>
            <p>Please enter your verification code to continue.</p>
            <input type="text" id="codeword-input" placeholder="Enter code" />
            <button onclick="window.SecureChat.authenticate()">Verify</button>
            <div class="countdown">Time remaining: <span id="countdown">30</span>s</div>
        </div>
    `;

    // Countdown timer
    authTimeout = setInterval(() => {
        countdown.seconds--;
        document.getElementById('countdown').textContent = countdown.seconds;
        if (countdown.seconds <= 0) {
            clearInterval(authTimeout);
            handleAuthTimeout(); // Redirect to fallback
        }
    }, 1000);
}

إذا فشل التوثيق أو خرج منه، فإن النظام يعيد توجيهه إلى URL (مخزون في بطاقة مُقلّدة مخفية على الصفحة):

function handleAuthFailure() {
    const fallbackMeta = document.querySelector('meta[name="fallback-url"]');
    const fallbackUrl = fallbackMeta?.getAttribute('content')
        ?? 'https://www.example.com/support';

    // Show "service unavailable" briefly
    chatBody.innerHTML = `
        <div class="message system">
            Service temporarily unavailable.<br/>
            Redirecting to standard support...
        </div>
    `;

    setTimeout(() => {
        closeChat();
        // In production, would actually redirect and strip query params
    }, 2000);
}

ما يُظهره ما يُظهِر

المفاهيم الأساسية الموضحة في:

  1. منفذ(ب) ?ref=newsletter_2025_jan يَحْبُ مثل تَعَقْب
  2. ***** وحدة دردشة فقط الأحمال عندما يتم تشغيلها، مع الاحتفاظ بحمولة أولية صغيرة جداً.
  3. الوقت محدود الوقت: 30 ثانية نافذة منع التثبيت لأجل غير مسمى
  4. النخــف من الانكــانفشل وثثث يشبه دعم مُكَسِر
  5. الاتصال الحقيقي في الوقت الحقيقيالدالة الدالة الدالة الدالة الدالة تمكين تمكين الدردشة الثنائية الاتجاه
  6. الفصل في: الوصلة البينية لموظفي الدعم منفصلة تماماً.

ما لا يظهره الديمو:

وكان لنظام الإنتاج خصائص أكثر تطوراً بكثير وغير مدرجة في العرض:

  • الترميز الفعلي (رسائل مُرسِلَة في النص البسيط في العرض)
  • التخلّف/ الشفرة المميّزّة (مقروءة شفر ديمو كود)
  • تسجيل حركة المرور والتوقيـت
  • بروتوكولات ضمان أمن أمن تبادل الضمانات
  • التبديل الرمزي
  • الحد من المعدل ومنع إساءة الاستعمال
  • قطع الأخشاب المشمولة بالمراجعة
  • تدابير مكافحة التمييز
  • وعشرات من الطبقات الأمنية الأخرى...

نظام البناء: التشويه والعزل

وأحد الجوانب الحاسمة في النظم التفاضلية هو جعل الشفرة من الصعب تحليلها. ويشمل التجريب نظاماً بسيطاً للبناء يبين تقنيات التشويش الأساسية.

من المصدر إلى النشر

هذه هي عملية التحويل:

flowchart LR
    A[Source Code<br/>compatibility-shim1.src.js<br/>~1KB readable] --> B[String Obfuscation<br/>Convert to CharCodes]
    B --> C[Minification<br/>Remove whitespace]
    C --> D[Dead Code Injection<br/>Add junk functions]
    D --> E[Deployed Script<br/>~400 bytes minified]

    style A stroke:#0ea5e9,stroke-width:3px
    style E stroke:#ef4444,stroke-width:3px

المصدر الرمز (معاد تعديله)

المصدر نظيف ومفهوم:

// Check for trigger pattern
const params = new URLSearchParams(window.location.search);
const ref = params.get('ref');

if (ref && /^newsletter_\d{4}_[a-z]+$/i.test(ref)) {
    // Load the secure chat module
    const script = document.createElement('script');
    script.src = '/js/secure-chat.js';
    document.head.appendChild(script);
}

الإصدارات الناثرة (المنقول)

بعد التخلّص من التخلّص من التخلّص من الأوّل:

!function(){if(new URLSearchParams(window.location.search).get(String.fromCharCode(114,101,102))?.match(new RegExp(String.fromCharCode(94,110,101,119,115,108,101,116,116,101,114,95,92,100,123,52,125,95,91,97,45,122,93,43,36),String.fromCharCode(105)))){const e=document.createElement(String.fromCharCode(115,99,114,105,112,116));e.src=String.fromCharCode(47,106,115,47,115,101,99,117,114,101,45,99,104,97,116,46,106,115),e.async=!0,document.head.appendChild(e)}}();

ملحوظة:

  • 'ref' & String.fromCharCode(114,101,102)
  • /^newsletter_\d{4}_[a-z]+$/i يصبح a مصفوف مُحال
  • 'script' & String.fromCharCode(115,99,114,105,112,116)
  • الكل كل كل شيء أبيض لم مُزز

& عملية الإنشاء

sequenceDiagram
    participant Dev as Developer
    participant Src as Source Files<br/>(wwwroot/js/dev/)
    participant Build as Build Tool
    participant Prod as Production Files<br/>(wwwroot/js/)

    Dev->>Src: Write readable source code
    Dev->>Build: Run ./build.sh
    Build->>Src: Read source files

    Build->>Build: 1. Extract string literals
    Build->>Build: 2. Convert to CharCode arrays
    Build->>Build: 3. Minify (remove whitespace)
    Build->>Build: 4. Rename variables
    Build->>Build: 5. Add dead code

    Build->>Prod: Write obfuscated files
    Prod-->>Dev: Ready for deployment

أولاً - مقدمة

نص سلسلة نص س س

// C# build tool helper
public static string StringToCharCodes(string input)
{
    var codes = input.Select(c => ((int)c).ToString());
    return $"String.fromCharCode({string.Join(",", codes)})";
}

// "ref" becomes "String.fromCharCode(114,101,102)"

2 - توزيع الأُسس

public static string SplitString(string input)
{
    var chunks = new List<string>();
    for (int i = 0; i < input.Length; i += 3)
    {
        var chunk = input.Substring(i, Math.Min(3, input.Length - i));
        chunks.Add($"\"{chunk}\"");
    }
    return $"[{string.Join(",", chunks)}].join('')";
}

// "newsletter" becomes ["new","sle","tte","r"].join('')

3. XOR الترميز (مصغر)

public static string XorEncode(string input, int key)
{
    var encoded = input.Select(c => (char)(c ^ key)).ToArray();
    var codes = encoded.Select(c => ((int)c).ToString());
    return $"String.fromCharCode({string.Join(",", codes)})";
}

ما هو الإنتاج المضاف

وستشمل نظم الإنتاج الحقيقي ما يلي:

  1. عملية تش

    • )مفاتــح التكاليــد
    • اشتقاق المفتاح عبر الزمن
    • التشفرات الخاصة بالبيئة
  2. وحدة المراقبة

    • هياكل تحكم
    • يستعاض عن ما إذا كان/يستعاض عنه بجداول البحث
    • إضافة فروع مشروط
  3. الميؤول

    • إعادة هيكلة رمز عند مستوى شجرة الجملة
    • تحويل تعبيرات إلى أشكال مكافئة
    • حقّ حقّ الحقّ الشفرة التي تُنظِب شرعيّة
  4. مكافحة التصحيح

    • اكشف وجود مزيل المزيل
    • (أ) توقيت عمليات التحقق من الكشف عن فرادى الخطوات
    • شف شف شفك
  5. حركة المرور

    • تأخيرات التوقيت
    • حركة المرور
    • البروتوكول الذي يُعجَز به

التشكيل والمرونة

الـ هو مصمّم إلى لـ مختلف خلفيات:

// Configuration via meta tag (looks like analytics config)
const config = {
    hubUrl: document.querySelector('meta[name="chat-hub-url"]')
        ?.getAttribute('content') || '/securechat',
    codeword: null
};

// Can point to different backends
// e.g., LLMApi (https://github.com/scottgal/LLMApi)

في HTML (يشبه البيانات الفوقية القياسية):

<meta name="chat-hub-url" content="/securechat" data-hidden />

وهذا يسمح لنفس رمز العميل بالعمل مع مختلف عمليات التنفيذ الخلفية بدون تعديل.

هذه هي الطريقة التي تعمل بها كل القطع معاً

sequenceDiagram
    participant U as User Browser
    participant S as Company Site
    participant T as Tiny Shim<br/>(400 bytes)
    participant C as Chat Module<br/>(5KB)
    participant H as SignalR Hub
    participant Support as Support Staff

    U->>S: Visit site normally
    S->>U: Page loads with shim
    T->>T: Check URL params

    Note over U,S: User receives special URL via separate channel

    U->>S: Visit ?ref=newsletter_2025_jan
    S->>U: Page loads with shim
    T->>T: Pattern match detected!
    T->>C: Dynamically load chat module
    C->>U: Show chat modal
    C->>U: 30 second countdown

    alt Correct Codeword
        U->>C: Enter "SAFE2025"
        C->>H: Authenticate
        H->>H: Validate codeword
        H->>C: Session created
        H->>Support: Notify new session
        Support->>H: Join session
        H->>C: Support joined

        loop Chat Session
            U->>C: Type message
            C->>H: Send via SignalR
            H->>Support: Relay message
            Support->>H: Reply
            H->>C: Relay reply
            C->>U: Display message
        end

        Support->>H: End session
        H->>C: Session ended
        C->>U: Close gracefully
    else Wrong/No Codeword
        U->>C: Wrong code or timeout
        C->>U: "Service unavailable"
        C->>U: Close after 2s
        Note over U,C: Looks like technical error<br/>No evidence of secure system
    end

جرِّبها بنفسك

الشّفرة الأوّلية الكاملة موجودة في المستودع. اقرأ README بعناية للقائمة الكاملة من التحذيرات الأمنية. الشّفرة مُعلّقة بشدة لشرح كلّ مفهوم.

ملفّات المهمّة للفحص:

جافا سكرbrett (المصدر vs. Overfuuscated):

  • wwwroot/js/dev/compatibility-shim1.src.js صالح مُشر مُنتر
  • wwwroot/js/compatibility-shim1.js - زناز معبأ ( <400 بايتات)
  • wwwroot/js/dev/secure-chat.src.js - تطبيق تطبيق الدردشة المقروءة
  • wwwroot/js/secure-chat.js - تطبيق دردشة مخفز (~5KB)

المجلد:::

  • Hubs/SecureChatHub.cs - محور الإشارة للدردشة في الوقت الحقيقي
  • Controllers/DemoController.cs - تحديد الاتجاه

المصدر:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

  • Views/Demo/Company.cshtml - "الموقع الإلكتروني" مع تشكيلات مخفية
  • Views/Demo/Support.cshtml - الوصلة البينية لموظفي الدعم

نظام الإنشاء النظام:

  • Build/JsObfuscator.cs - مرافق التعويج
  • Build/BuildObfuscated.cs - بناء أداة لإنشاء النسخ الملطفة
  • build.sh - نص الشفرة للبناء

يُذكّر هذا a - تنفيذ مفهوميُظهر أفكاراً، وليس أمن إنتاجيّ.

Finding related posts...
logo

© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.