22-06-18, 05:22 PM
(آخر تعديل لهذه المشاركة : 22-06-18, 08:27 PM {2} بواسطة silverlight.)
إقتباس :لكن كيف اقوم بتشفير ملف dll و عند تشغيل البرنامج يقوم بفتح التشفير و بعد غلق البرنامج ..
يقوم بالتشفير مره آخري
جزء كبير من كتابة الكود يعتمد علي الإلهاء و الخداع
أهم شئ في كتابة الكود انك أنت شخصيا تكون فاهم الكود
مثلا ممكن تكتب الكود بطرق صعبة الفهم علي من قد يطلع علي الكود الخاص بك
خاصة أن كتابة الكود بشكل مباشر يؤدي الي سرعة كسر الكود
مثلا الكلاس التالي يقوم بالتشفيير ....... وهو كلاس مظهره صعب لكن باطنه سهل جدا
PHP كود :
Public Class MemoryDumper
Private Delegate Function Validator(s As String)
Private _ptr As IntPtr
Private _byte As Byte
Private _index As Integer
Private _guard As Integer
Public Sub New(index As Integer, value As Byte, guard As Integer)
Me._index = index
Me._byte = value
Me._guard = guard
Me._ptr = IntPtr.Zero
End Sub
Public ReadOnly Property Handle As IntPtr
Get
Return _ptr
End Get
End Property
Public ReadOnly Property Valid As Boolean
Get
Return Me._ptr <> IntPtr.Zero AndAlso (Not Me._index < 0)
End Get
End Property
Public Sub Allocate()
Me._ptr = System.Runtime.InteropServices.Marshal.AllocHGlobal(_index)
End Sub
Public Sub Write()
System.Runtime.InteropServices.Marshal.WriteByte(_ptr, _byte)
End Sub
Public Function Read() As Byte
Dim size As Integer = Me.Validate(Me._guard)
Return (System.Runtime.InteropServices.Marshal.ReadByte(_ptr)) Xor CByte(size)
End Function
Public Sub Flush()
If _ptr <> IntPtr.Zero Then
System.Runtime.InteropServices.Marshal.FreeHGlobal(_ptr)
_ptr = IntPtr.Zero
End If
End Sub
Private Function Validate(value As Integer, callback As Validator) As Integer
Dim result As Integer = Nothing
If Not String.IsNullOrEmpty(value.ToString) Then
result = Integer.Parse(callback(value.ToString))
End If
Return result
End Function
Private Function Validate(value As Integer) As Integer
Dim callback As Validator = New Validator(AddressOf Me.Validate)
Return Me.Validate(value, callback)
End Function
Private Function Validate(value As String) As String
If Not String.IsNullOrEmpty(value) Then
Dim s As String = Me.Validate(value, 4, value.Length - 1)
Dim chars As Char() = s.ToCharArray
Dim result As Char() = New Char(chars.Length - 1) {}
For i = 0 To chars.Length - 1
result(i) = chars(chars.Length - i - 1)
Next
Return New String(result)
End If
Return String.Empty
End Function
Private Function Validate(s As String, ByRef index As Integer, ByRef count As Integer) As String
While index < count
If Not Char.IsWhiteSpace(s(index)) Then
Exit While
End If
index += 1
End While
While count >= index AndAlso Char.IsWhiteSpace(s(count))
count -= 1
End While
Return s.Substring(index, count - index + 1)
End Function
End Class
الكود التالي عبارة عن دالة توضح كيفية استخدام الكلاس
PHP كود :
Private Function Dump(bytes() As Byte, guard As Integer) As Byte()
Dim result As Byte() = New Byte(bytes.Length - 1) {}
Dim i As Integer = 0
While i < bytes.Length
Dim md As New MemoryDumper(i + 1, bytes(i), guard)
md.Allocate()
If md.Valid Then
md.Write()
result(i) = md.Read
End If
md.Flush()
i += 1
End While
Return result
End Function
والكود التالي يوضح كيفية استخدام الدالة
انا هنا اقوم بتشفيير مصفوفة بايت بغض النظر عن اصلها , الأصل هنا عبارة عن String
PHP كود :
Private dumpers As List(Of Integer) = New List(Of Integer) From {608561, 475623, 12345, 24688}
PHP كود :
Dim s As String = "omar"
Dim bytes As Byte() = System.Text.Encoding.UTF8.GetBytes(s)
Dim result As Byte() = Me.Dump(bytes, dumpers(3))
إن لم تستطع فهم كيف تتم عملية التشفيير وحدك
اذن أنت أمامك الكثيير لتتعلمه
لأنه جزء أساسي في التشفيير انك أنت فقط من يجب أن يكتب نظام التشفيير الخاص بك وبالتالي تكون حينها لديك القدرة علي كتابة الدوال و الروتينات المناسبة من أجل فك التشفيير
ملحوظة أخيرة
أنت لست في حاجة الي اعادة تشفيير الملفات عد اغلاق البرنامج الرئيسي
تقبل تحياتي و شكرا لمرورك
Retired

