الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

فكرة عمل برامج الحماية

مغلق
بدأه Delphawi في 26 مايو 2007 · 42 رد · 3,354 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#26

هي الأساس في ماذا؟ في القرصنة؟ لماذا هي الأساس؟ أو ما هو تعريف الأساس

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

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

السلام عليكم

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#28

أخ Xacker أعتقد أن فيه سوء تفاهم , أنا مقلتش أن التجميع لغة للقرصنة فقط , التجميع فى نظرى أفضل و أهم لغات العالم الى الآن و مفيش لغة تقدر تصمد قدامها حتى السى , و أنا فاهم كويس أنها كأى لغة تقدر تعمل حاجات كتير.

لكن أنا مصر على أنها الأصل و الأساس لأختراق اى برنامج (لا أقصد أنها معمولة أساسا للأختراق).

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

و أنت نفسك فى موضوعك لماذا تريد تعلم الأسمبلي؟ حطيت أختيارات :

اقتباس
لأنها الأساس لقراصنة البرمجيات
و
اقتباس
لأنها الأساس لاكتشاف الثغرات وتحليل النظم البرمجية

--------------------------------------------

طبعا وجود خبير بالتجميع زيك فى الموضوع ده مهم و أسمح لى بأسئلة لك و لكل واحد عنده خبرة بالتجميع و يقدر يفيدنا , ما رأيك بفكرة الـ Anti-Debugger و هى توجد طريقة فعالة و ليكن بنسبة 85% ؟ و لو تقدر تقولنا كلام مختصر مفيد عن الفكرة دى ( أو رابط بيتكلم عنها )

ما هى فكرة طرق عمل Obfuscation و ايه أفضل البرامج الموودة حاليا ؟

--------------------------------------------

اقتباس
ما معنى Low level أخي msayed2004

اقتباس
low level

Relating to a computer language, such as an assembly language, in which each instruction corresponds to an instruction in machine language or allows instructions to address specific memory locations or other architectural elements.

اقتباس
Low-level vs. High-level

Low-level interfaces, such as assembly language, often perform more efficiently than high-level interfaces. However, high-level programming filters increases usability since they are easier to program. High-level filters are also more portable since they are less dependent upon hardware and underlying internal filter representation.

#29

شكراً أخي على التوضيح , واللي انا فهمته ان low level هي لغة الآلة و تشبه الاسمبلي إلى حد بعيد

اقتباس
If A is success in life, then A equals x plus y plus z. Work is x; y is play; and z is keeping your mouth shut

Albert Einstein

مدخل إلى برمجة وتصميم الألعاب : كيف أبدأ ؟

#30

اوكيه لنناقش الفكرة,

anti-debugging technique, جيد, كيف تنوي القيام بها في الفيجوال بيسك؟ تبحث عن عنوان نافذة olly, ماذا عن softice؟

تبحث عن القيم الخاصة به في الريجستري؟ عن الدرايفرات المستخدمة من قبله؟ ماذا عن IDA؟ ماذا عن بقية البرامج؟؟

لنفرض الان انك تكتب مكتبة بـ C++ او الدلفي لتجاوز مثل هذه الازمات المتعلقة بتنفيذ ما ذكر في الفيجوال..

اليست المكتبة خارجية؟ الا استطيع كقرصان قطعها عن البرنامج بالكامل والاستغناء عنها.. لربما بمكتبتي الخاصة التي تعيد ما اريد متى اريد ولمن اريد؟

http://www.woodmann.com/crackz/Tutorials/Protect.htm

هذه بعض الحيل القديمة للـ anti-debug كيف تنوي تنفيذها في الفيجوال بيسك؟

تقنيات الـ anti-debug قديما وحاليا تحتاج الى لغة تستطيع ان تقدم لها ما تريد لتقدم لك ما تريد.

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

نأتي الى الـ code obfuscation

مثل ما قيل تقريبا.. كيف تنوي تنفيذ obfuscation عليه؟ البرنامج يكون polymorphic؟ بالفيجوال؟ كيف؟؟؟

تكتب برنامج آخر ليقوم بالتعديل على برنامجك الذي تريد حمايته؟ جيد, هل تتقن لغة الأسمبلي؟ كيف إذن ستقوم بالتعديل على التعليمات لتتركها صالحة دون المساس ببنية البرنامج وتجعل البرنامج يقوم بعمل deobfuscation قبل ان يتم تنفيذه بالشكل الكامل؟

لنفرض أننا فعلنا, البرنامج الآن في الذاكرة بدون obfuscation, ماذا عن الـ dump؟

هل تريد تنفيذ anti-dump techniques أيضا؟

لا اريد ان احبط المعنويات هنا, اريد فقط شخص يخبرني كيف ينوي تنفيذ كل هذه الحمايات التي قد تذكر هنا وهناك او معروفة للقراصنة, بالفيجوال بيسك.

طالما اننا في قسم الفيجوال بيسك, ولا احد يأتي ليقول نكتب الحمايات بالاسمبلي.. كيف تضعها ضمن شفرة الفيجوال بيسك؟ في ملف خارجي؟

اذن لننتقل الى قسم الاسمبلي فنحن في القسم الخطأ!

السلام عليكم ورحمة الله وبركاته

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#31

فعلا يا ريت يا شباب تاخدولكم كام ليله هناك في قسم الأسمبلي وتدوروا في المواضيع القديمة والمثبته علشان تنكشف الغيوم ...,,,

#32

أولا : يمكن بالفعل الأحتيال و تنفيذ أكواد ASM بالـ VB6 أبحث على PSC لتجد أمثلة.

ثانيا : فى فعلا Anti-Debuggers مكتوبة بالـ VB طبعا محولة من الأسمبلى , راجع آخر المشاركة.

ثالثا : بالنسبة للـ code obfuscation كنت أقصد الفكرة العامة و أفضل الأدوات الجاهزة.

رابعا : بالنسبة للـ Anti-Dump techniques فأنا عمرى ما سمعت عنها.

مثال للـ Anti-Debugger :

Option Explicit

Public Const MEM_DECOMMIT = &H4000
Public Const MEM_RELEASE = &H8000
Public Const MEM_COMMIT = &H1000
Public Const MEM_RESERVE = &H2000
Public Const MEM_RESET = &H80000
Public Const MEM_TOP_DOWN = &H100000
Public Const PAGE_READONLY = &H2
Public Const PAGE_READWRITE = &H4
Public Const PAGE_EXECUTE = &H10
Public Const PAGE_EXECUTE_READ = &H20
Public Const PAGE_EXECUTE_READWRITE = &H40
Public Const PAGE_GUARD = &H100
Public Const PAGE_NOACCESS = &H1
Public Const PAGE_NOCACHE = &H200
Public Declare Function VirtualAlloc Lib "kernel32" (ByVal lpAddress As Long, ByVal dwSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As Long
Public Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Public Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)
Public Declare Function CreateThread Lib "kernel32" (lpThreadAttributes As Any, ByVal dwStackSize As Long, lpStartAddress As Long, lpParameter As Any, ByVal dwCreationFlags As Long, lpThreadId As Long) As Long
Function InstallAntiDebugger() As Long
Dim ThreadID As Long
Dim ThreadEntryPoint As Long
Dim ThreadCode As String
Dim ThreadCodeByte() As Byte
Dim ModuleHandle As Long
Dim ProcIDPAddr As Long
Dim ProcGCPAddr As Long
Dim ProcTPAddr As Long
Dim ProcSPAddr As Long

'This is the assembler code to check when your application is beeing debugged
'----------------------------------------------------------------------------
'00401FBC      BF B1F5577C   MOV EDI,KERNEL32.IsDebuggerPresent
'00401FC1      FFD7          CALL EDI
'00401FC3      83F8 01       CMP EAX,1
'00401FC6      75 0F         JNZ SHORT 00401FD7
'00401FC8      BF 2579597C   MOV EDI,KERNEL32.GetCurrentProcess
'00401FCD      FFD7          CALL EDI
'00401FCF      50            PUSH EAX
'00401FD0      BF 6D6A597C   MOV EDI,KERNEL32.TerminateProcess
'00401FD5      FFD7          CALL EDI
'00401FD7      BF 91A2597C   MOV EDI,KERNEL32.Sleep
'00401FDC      B8 10270000   MOV EAX,2710                           ;Sleep 10 seconds before check the debugger again
'00401FE1      50            PUSH EAX
'00401FE2      FFD7          CALL EDI
'00401FE4    ^ EB D6         JMP SHORT 00401FBC

'Get the module entry point for the kernel32.dll
ModuleHandle = LoadLibrary("Kernel32.dll")
If ModuleHandle = 0 Then
    InstallAntiDebugger = 0
Else
    'Get the function address
    ProcIDPAddr = GetProcAddress(ModuleHandle, "IsDebuggerPresent")
    ProcGCPAddr = GetProcAddress(ModuleHandle, "GetCurrentProcess")
    ProcTPAddr = GetProcAddress(ModuleHandle, "TerminateProcess")
    ProcSPAddr = GetProcAddress(ModuleHandle, "Sleep")

    'Build the assembler code (opcodes)
    ThreadCode = "BF" & AlignDWORD(ProcIDPAddr) & _
                 "FFD7" & _
                 "83F801" & _
                 "750F" & _
                 "BF" & AlignDWORD(ProcGCPAddr) & _
                 "FFD7" & _
                 "50" & _
                 "BF" & AlignDWORD(ProcTPAddr) & _
                 "FFD7" & _
                 "BF" & AlignDWORD(ProcSPAddr) & _
                 "B810270000" & _
                 "50" & _
                 "FFD7" & _
                 "EBD6"
    'Transform the string into a byte array
    ConvHEX2ByteArray ThreadCode, ThreadCodeByte

    'Allocate virtual memory to install our code
    ThreadEntryPoint = VirtualAlloc(0, UBound(ThreadCodeByte) - LBound(ThreadCodeByte) + 1, MEM_COMMIT, PAGE_EXECUTE_READWRITE)
    If ThreadEntryPoint <> 0 Then
        'Copy the assembler codes from our array into the new allocated virtual memory
        CopyMemory ByVal ThreadEntryPoint, ByVal VarPtr(ThreadCodeByte(LBound(ThreadCodeByte))), ByVal UBound(ThreadCodeByte) - LBound(ThreadCodeByte) + 1

        'Start the new thread, using as entry point then start of allocated virtual memory
        CreateThread ByVal 0&, ByVal 0&, ByVal ThreadEntryPoint, ByVal 0&, ByVal 0&, ThreadID

        'Return the threadid for future uses on ur main program (like suspendthread, resumethread, etc)
        InstallAntiDebugger = ThreadID
    Else
        InstallAntiDebugger = 0
    End If

End If
End Function


Sub ConvHEX2ByteArray(pStr As String, pByte() As Byte)
Dim i As Long
Dim j As Long
ReDim pByte(1 To Len(pStr))
For i = 1 To Len(pStr) Step 2
    j = j + 1
    pByte(j) = CByte("&H" & Mid(pStr, i, 2))
Next
End Sub



Function AlignDWORD(pParam As Long) As String
Dim HiW As Integer
Dim LoW As Integer

Dim HiBHiW As Byte
Dim HiBLoW As Byte

Dim LoBHiW As Byte
Dim LoBLoW As Byte

HiW = HiWord(pParam)
LoW = LoWord(pParam)

HiBHiW = HiByte(HiW)
HiBLoW = HiByte(LoW)

LoBHiW = LoByte(HiW)
LoBLoW = LoByte(LoW)

AlignDWORD = IIf(Len(Hex(LoBLoW)) = 1, "0" & Hex(LoBLoW), Hex(LoBLoW)) & _
         IIf(Len(Hex(HiBLoW)) = 1, "0" & Hex(HiBLoW), Hex(HiBLoW)) & _
         IIf(Len(Hex(LoBHiW)) = 1, "0" & Hex(LoBHiW), Hex(LoBHiW)) & _
         IIf(Len(Hex(HiBHiW)) = 1, "0" & Hex(HiBHiW), Hex(HiBHiW))

End Function

Public Function HiByte(ByVal wParam As Integer) As Byte

    HiByte = (wParam And &HFF00&) \ (&H100)

End Function

Function HiWord(DWord As Long) As Integer
   HiWord = (DWord And &HFFFF0000) \ &H10000
End Function

Public Function LoByte(ByVal wParam As Integer) As Byte

  LoByte = wParam And &HFF&

End Function

Function LoWord(DWord As Long) As Integer
   If DWord And &H8000& Then ' &H8000& = &H00008000
      LoWord = DWord Or &HFFFF0000
   Else
      LoWord = DWord And &HFFFF&
   End If
End Function

و أكيد طبعا ممكن كتابة حاجات أفضل.

تم تعديل هذه المشاركة بواسطة msayed2004 في 27 مايو 2007 في 01:02

#33

فعلا اسوا مافى اللغات عامة هى اكواد المقارنة

مهما فعلت من دوال التشفير فلايمكنك حماية برنامجك لان cracker يصل لنقطة الضعف فى البرامج

بس ممكن يبقى فيه حلول زى عمليات arth و logic

بس تكون معقدة شوية

ولا اييييه

#34

بعودة الحديث عن دوال المقارنة , هل المقارنة بالـ API سهل التعرف عليها كالمقارنة العادية ؟

يعنى الدوال : CompareString و lstrcmp و lstrcmpi

#35
msayed2004 كتب:
بعودة الحديث عن دوال المقارنة , هل المقارنة بالـ API سهل التعرف عليها كالمقارنة العادية ؟

يعنى الدوال : CompareString و lstrcmp و lstrcmpi

مش برضه نتيجة الcompare حتعمل عليها compare تانى ولا انا فهمت غلط

انت مثلا حتعمل مقارنة بين "aaa" , "bbb"

وطبعا لو ناتج المقارنة رجع باى قيمة اكيد حتقارنه بالقيمة اللى انت متوقعها

يعنى لو بيرجع ب 1 اكيد حتقارنه ب 1 او 0

ب if او select

ولا ايييييييييه

تم تعديل هذه المشاركة بواسطة hossam2525 في 27 مايو 2007 في 02:00

#36

صحيح , ما خدتش بالى من الحتة دى.

#37

الـ anti-debug الموجودة في الشفرة تحتاج الى بضع اسطر بالاسمبلي او حتى بالـ C !

وهي كلها في طرق قديمة جدا جدا جدا جدا بدون مبالغة

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

لكن أذكر أن التعليمات لم تكن كلها مدعومة.. لم أجد الموضوع نفسه الذي رأيته منذ زمن للتأكد

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#38

محمد بالنسبة code obfuscation بيبقى فى طرق لفك تشفيرها لكنها بتقتصر على المحترفين بس

لكن انا لقيت برامج كتير معمول لها code obfuscation وبيكون الحل انك تعمل Dump لل memory بمعنى انك بتعرض قيم البرنامج من الذاكرة وبرنامج OllyDb فى حتة انك ممكن تاخد نسخة من البرنامج بعد ما يتعمل له Deopfuscation وتحفظة فى ملف Executable من جديد وكدة انت عنك ملف تانى خالى من ال Obfuscation واعمل Debugging زى ما انت عاوز

لكن ذى ما Xacker قال فى ال anti-dump techniques يعنى من الاخر الموضوع كله واقف على الاسمبلى

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

موقع البرنامج

مبارك لشعب تونس photo-thumb-42837.png

#39

الأسمبلي ليست أساس كل شئ, لكن هناك قدر أدنى من المعرفة قبل البدء بالقيام بأي شئ مثل ما قال busbar

فهل هناك من قرأ عن الـ polymorphic ويستطيع كتابة شئ فيها, او في الـ VM أو في .....

لا؟

اذا تريد ان تحمي برنامجك بماذا؟ بالدعاء؟

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#40

السلام عليكم ...

أولاً أشكركم على الردود وعلى هذه المناقشة الساخنة

لكن انا جاتلي فكرة , الشيطان ابن الكلب جابهالي وانا بأصلي الظهر اليوم ... قلت في نفسي ليش ما نحارب النار بالنار (الاسمبلي بالاسمبلي)

فوضعت طلب برنامج في منتدى الاسمبلي وهو شاشة الدخول (Log In)

وعن كتابة الاسم صحيح ... يقوم بعمل Shell لبرنامجنا المراد

ما رأيكم ؟؟؟

ممكن تكون خطرت على بالكم , لكن مش مشكلة

وأنا منتظر رد شباب منتدى الاسمبلي

اقتباس
If A is success in life, then A equals x plus y plus z. Work is x; y is play; and z is keeping your mouth shut

Albert Einstein

مدخل إلى برمجة وتصميم الألعاب : كيف أبدأ ؟

#41
اقتباس
وعن كتابة الاسم صحيح ... يقوم بعمل Shell لبرنامجنا المراد
نعمل أحنا Shell على طول لوحدينا , صح :lol:

ركز فى الصلاه و أنسى الـ VB شوية :lol:

#42
اقتباس
ركز فى الصلاه

لم أفهمك أخي ؟؟

بعدين احنا نعمل Shel دا عادي , لكن اللي مش عادي ان نخفي الشيفرات السرية

بعدين ..

هل توافق شخصاً يقول إن الفاجوال بيزك غبية ؟؟ لماذا ؟؟

اقتباس
If A is success in life, then A equals x plus y plus z. Work is x; y is play; and z is keeping your mouth shut

Albert Einstein

مدخل إلى برمجة وتصميم الألعاب : كيف أبدأ ؟

#43
اقتباس
لم أفهمك أخي ؟؟
اقتباس
لكن انا جاتلي فكرة , الشيطان ####### جابهالي وانا بأصلي الظهر اليوم

-----------------------------------

فى فكرتك يا علاء هنعمل مثلا 2 EXE و واحد ينادى التانى , بأى حال من الأحوال هيبقى الأمر مفضوح و هيتعرف ان فيه EXE تانى و ده طبعا بكل بساطة عن طريق البحث.

-----------------------------------

اقتباس
هل توافق شخصاً يقول إن الفاجوال بيزك غبية ؟؟ لماذا ؟؟
هى مش غبية لكن MS لما عملتها طنشت فيها حاجات كتيييييييييييييييييييييييييييير و طبعا الناس فى العالم كله بتعافر معاه لتجاوز عيوبه و نقاط ضعفه.

هذا الموضوع مغلق.

مواضيع مشابهة