هل يمكن جعل الملفات الديناميكيه dll لا تعمل الا مع برنامجي فقط بمعني انني قمت بتصميم ملف dll ولكني اريد استخدامه بكلمة سر تستخدم في الكود البرمجي لبرنامجي
هل يمكن جعل الملفات الديناميكيه dll لا تعمل الا مع برنامجي فقط
تستطيع بأبسط شكل
تمرير كلمة مرور أو قيمة معيّنة إلى التوابع الموجودة في الملف
وهناك يتم تنفيذ خوارزمية معينة للتحقق من تطابقها وحينها يتم تنفيذ التابع أو يعيد قيم فارغة.
مثلاً:
مرر كلمة طويلة ومعقّدة
في التوابع قم بحساب MD5 hash لهذه الكلمة وقم بمطابقتها مع قيمة مخزنة مسبقاً في الملف.
من يحصل على الملف فقط لا يمكنه الحصول على الكلمة التي تقوم بتمريرها لأنه من الصعب الوصول إلى الكلمة من الـ hash إن كان طويلاً ومعقداً
الحل الوحيد لتجاوز هذه الحماية هي بالحصول على الكلمة من برنامجك أو التعديل على ملف DLL لتجاوز التحقق.
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
شكرا على هذه المعلومه القيمة
حاولت اكثر من مرة تنفيذ هذه الطريقة ولكن لم استطع هل يمكن وضع مثال
السلام عليكم ورحمة الله وبركاته
قمت بعمل مثال على السريع لإحدى الأفكار التي خطرت لي بهذا الخصوص
وهي أن تتضمن المكتبة صنف مسؤول عن التخويل فيه خاصيتان الأولى قيمة مفتاح والأخرى قيمة استجابة لهذا المفتاح و منهج يقوم بالمطابقة فإن اختلت يرمي استثناء مولدا خطأ عدم توفر نقطة دخول
ولا شك أي استدعاء لمكونات المكتبة بدون معرفة معادلة المطابقة سيرمي خطأ ولن يستطيع تشغيلها إلا هاكر
أما في حال قمت أنت باستخدام المكتبة فيجب عليك أولا توليد مفتاح عشوائي وتحسب استجابته من خلال نفس المعادلة وتضعهما في خصائص صنف التخويل
ومن ثم يتم استدعاء منهج فحص التخويل في مشيدات الأصناف و المناهج الستاتيكية وعندما تتم المطابقة يسير العمل بشكل طبيعي
كان بالإمكان وضع قيمة واحدة ثابتة وفحصها كما تفضل الإخوة ولكن حتى نصعب الموضوع على الهاكر قليلا :)
المكتبة :
using System;
using System.Collections.Generic;
using System.Linq;
namespace PrivateDllLib
{
public class PrivateDll
{
public PrivateDll()
{
Authorizer.CheckAuthorization();
}
public void Method1()
{
// Do some thing.
}
public void Method2()
{
// Do some thing.
}
public static bool Method3()
{
Authorizer.CheckAuthorization();
// Do some thing.
return true;
}
}
public class Authorizer
{
public static int Key { get; set; }
public static int ResponseKey { get; set; }
public static void CheckAuthorization()
{
int tmp = (((Key + 23) * 7) - 11) * 2;
if (ResponseKey != tmp)
throw new EntryPointNotFoundException();
}
}
}
و الاستدعاء من قبل تطبيقك
using PrivateDllLib;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
namespace YourApplication
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
int Key = new Random(1000).Next(1000);
Authorizer.Key = Key;
Authorizer.ResponseKey = (((Key + 23) * 7) - 11) * 2;
}
private void btnCallStaticMethod_Click(object sender, RoutedEventArgs e)
{
if (PrivateDll.Method3())
MessageBox.Show("Method3 has return true.");
}
private void btnCreateInstnce_Click(object sender, RoutedEventArgs e)
{
PrivateDll pd = new PrivateDll();
if (pd != null)
MessageBox.Show("Instance has created.");
pd.Method1();
}
}
}
أما من يستدعيها بدون وضع القيم وفق المعادلة الخاصة فستولد خطأ ويقف ويتجاوز التنفيذ داخل المكتبة
المثال كاملا
ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها
كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور