آژانس هواپیماییexchanging

چگونگي نوشتن قفل با وي بي

شروع موضوع توسط saeedsmk ‏20 ژوئن 2005 در انجمن Visual Basic 6

  1. saeedsmk

    saeedsmk مدیر بازنشسته

    تاریخ عضویت:
    ‏6 سپتامبر 2003
    نوشته ها:
    1,519
    تشکر شده:
    4
    اقا مي خوام يه بحث شروع كنم در مورد چگونگي قفل گذاشتن رو برنامه ها .
    نمي دونم اين رو بايد اينجا بگم و يا مثل يكي از دوستان اين اطلاعات يه فوته. بهر حال من كه نه برنامه نويسم(حرفه اي) و نه قفل گذار پس بي خيالش :lol:
    حالا هر كي نظري داره بگه كه ايا بايد اينجا باشه و يا تو قسمت عمومي و ...

    اولين پروژه هم در مورد قفل گذاري رو فايل كامپايل شده است .سعي مي كنم همه چيز رو خيلي ساده توضيح بدم (ممكنه اطلاعات من غلط باشه پس بهم بگين ) اما ممكنه سخت بنظر بياد پس پيشنهاد ميكنم اسمبلي رو و چگونگي ساختار فايل اجرايي رو تا حدودي بلد باشين
    اين قفل رو با وي بي و اسمبلي مي نويسيم . درسته وي بي در اين زمينه مشكل داره ولي بهر حال كمك مي كنه كه شما!!!! اين ضعفها رو ببندين ودر نتيجه قدرت كاري شما افزايش پيدا كنه.

    راستي بگم من عددي نيستم ها :blink:
    باميد موفقيت براي شما :lol:
     
  2. saeedsmk

    saeedsmk مدیر بازنشسته

    تاریخ عضویت:
    ‏6 سپتامبر 2003
    نوشته ها:
    1,519
    تشکر شده:
    4
    ايا شما با برنامه tzcopy كار كرديد يا نه. يه برنامه است براي تغيير iso و سپس قرار دادن يه لودر براي فايل exeكه اگه فايل قفل با سايز مشخص رو سي دي نبود اون فايل اجرايي اجرا نشه و....
    اين برنامه رو با وي بي نوشتن چون به runtime dll msvb... نيازمنده.
    پرتكتور اين برنامه مياد يه فايل exe درست ميكنه و بعد از فايل شما رو به پسوند .dat ذخيره كرده و.....
    ولي اين كار يه باگ داره اونم اينه كه اگه يكي بياد و فايل با پسوند dat رو تغيير پسوند به exe بده فايل اجرا ميشه :(
    حالا ما ميخواييم همچين كاري رو يكنيم ولي يه زره پيشرفته تر يعني اگه حتي فايل dat رو به exe تغيير داد اجرا نشه
    يعني در كل فايل exe مون رو پچ نيم و يه پچر براش بنويسيم
    براي اجرا يه برنامه توسط وي بي فرماني هست به نام shell كه فايل رو اجرا كرده و بعد از اجرا فايل بر اساس تنظيمات ما سكان كشتي رو يا در اختيار فايل ميزاره و يا به برنامه ما .
    يه راه حل ديگه استفاده از api ويندوز :
    کد:
    Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long 
     ويا 
    Declare Function ShellExecuteEx Lib "shell32.dll" Alias "ShellExecuteEx" (SEI As SHELLEXECUTEINFO) As Long
    مثلا 
        ShellExecute Me.hwnd, vbNullString, "mailto:[email protected]", vbNullString, "C:\", SW_SHOWNORMAL
    
    خوب براي اينكه بتونيم اخيتار كامل رو در دست بگيريم بايد ببينيم اين تابع چي كار ميكنه يا اصلا چه جوري يه فايل اجرايي احرا ميشه.
    1-اول از همه لودر ويندوز مياد چك ميكنه كه ايا هدر فايل اگزه درست يا نه اگه نه كه يه خطا گزارش ميكنه
    2-اگه فايل dll داشت ( كه اگه تحت ويندوز باشه صد در صد داره) ميبينه كه چه dll رو بايد استفاده كنه كه اين اطلاعات هم باز توي هدر فايل اگزه است .
    3-بعد از اون تمامي توابع api رو بر اساس نوع فايل اگزه مشخص و ادرس دهي ميكنه
    4-بعد مياد تمامي سكشنها رو براساس اين هدر توي حافظه لود ميكنه( وتمامي ريسورسها رو )
    5-سكشن اجرايي رو براساس خصوصيات اون سكشن با خاصيت WRC لود كرده و تمامي كالها به api رو مقدار دهي ميكنه
    6-بعد از اون تمامي Call هاي برنامه رو اگه ديناميك بود متغيير دهي كرده و كد رو اماده اجرا ميكنه
    8-EPO رو براساس هدر معين كرده وسپس مياد نوع اجرا رو معين كرده
    9-حالا با ست كردن ريجستر ,esp,ebx,eds,EPI اختيار برنامه اجرايي رو بدستش ميده
    اين EPO =Entry point يا نقطه شروع كد.كه ما باهاش كار داريم( ممكنه يه لودر كار هاي ديگه اي هم بكنه ولي تا اونجا كه يادم بود سعي كردم همه چيز رو بنويسم و ممكنه توي ترتيب مراحل وسطي اشتباه كرده باشم ولي مهم فهم چگونگي اجراست ولي مرحه 9 هميشه اخر همه هست)

    بر اساس اين اطلاعات ميشه ديد كه اگه به لودر بگيم (دستور بديم) مرحله 9 رو اجرا نكن چي ميشه هيچي فايل اجرايي ما اجرا نيمشه و به حالت معلق در مياد (suspended ) و ما حالا مي تونيم چك كنيم و ....

    ادامه دارد :wacko:
     
  3. saeedsmk

    saeedsmk مدیر بازنشسته

    تاریخ عضویت:
    ‏6 سپتامبر 2003
    نوشته ها:
    1,519
    تشکر شده:
    4
    حالا فرض كنيم كه اين اتفاق افتاد يعني اينكه برنامه معلق شد .چيكار بايد بكنيم
    فرض كنيم كه نقطه شروع برنامه ما در حافظه 401000 باشه ودر افست ( بيت ) 0x445B كد برنامه ( به هگزه ) و شامل اطلاعات
    کد:
    E9XXXXXXXX
    كه يعني به نقطه اي از حافظه بپر .
    خوب ما اين كد رو با يه برنامه ( يك هگزه اديتور و يا برنامه اي كه مي شه نوشت ) به مقادير
    کد:
    EBFE9090C0
    تغيير ميديم
    خوب EB يعني پرش از نوع نزديك حداكثر مقدار پرش 128 تا جلو يا 127 تا عقب
    عدد بعدي يعني : مقداربايتي كه بايد بپره (از بايت بعدي ) رو معين مي كنه در اين حالت خاص چون عدد ما بيشتر از 128 پس پرش ما منفي شده يعني برگشت به عقب كه اينطوري حساب ميشه:
    مقدار كنوني(0) منهاي مقداري كه بايد بپره يعني 2 تا عقب ( برگرده به اول دستور خودش) ميشه FE ( هر پرش نزديك دو بايت ميگيره يكي دستور EB و مقدار پرش )
    بعد 90 كه يعني nop يعني هيچ كاري نكن و بگذر ( no oprate)
    بعدش دوباره 90
    و بعدش C0 يعني Ret خروج از برنامه ( چون هيچ الوكيت نشده پس احتياج به استفاده كردن از تابع Exitprocess و از اين دست توابع نداريم )
    خوب اگه كسي اين برنامه رو كه ما تغيير داديم اجرا كنه چي ميشه :
    هيچي يا ويندوزش هنگ ميكونه ( خيلي خيلي كند ميشه ) و برنامه تو حافظه ميمونه ( رجيستر ميشه ) و بايد يه جوري از حافظه اونرو پاك كنه
    و يا اينكه از برنامه خارج ميشه ( يعني به طريقي به كد C0 ميرسه ).
    نكته براي اطمينان بيشتر ميشه كدهاي بيشتري رو برداشت يعني منظورم از ابتدا كد هاست كه درون برنامه قرار داره ( برنامه اي كه مي خوايم روش قفل بگذاريم ) و در نتيجه يه ذره كار ها بيشتر ميشه و ميشه حفاظت رو بيشتر كرد .( بعدا بيشتر توضيح مي دم :rolleyes: )

    حالا ما بايد به عنوان برنامه نويس يه لودربراي اين برنامه تحت ويندوز بسازيم و بعد از لود كامل فايل اجراي اون رو تغيير بديم و به كد اصلي برگردونيم تا برنامه درست عمل كنه ;) مثل يه پكر
     
  4. saeedsmk

    saeedsmk مدیر بازنشسته

    تاریخ عضویت:
    ‏6 سپتامبر 2003
    نوشته ها:
    1,519
    تشکر شده:
    4
    هيچكس نظري نداره؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ :blink: :blink: :blink: :blink: :blink:
     
  5. saeedsmk

    saeedsmk مدیر بازنشسته

    تاریخ عضویت:
    ‏6 سپتامبر 2003
    نوشته ها:
    1,519
    تشکر شده:
    4
    انگار كسي ايده نداره . خوب براي اينكه كه كاري كه شروع شده رو تموم كنم اين قسمت و فكر كنم اخرين قسمت ) در اين بحث)رو ميزارم .
    خوب براي مثال ما يه برنامه واقعي مثل Notepad.exe رو قفل مي كنيم .( ورژن اين برنامه 5.1.2600.2180 متعلق به ويندوز xp)
    براي اين كار فايل notepad.exe رو توي به فولدر مثل work كپي ميكنيم حالا با يه برنامه كه اطلاعات هدر فايل exe رو نشون ميده برنامه notepad رو مورد بررسي قرار ميديم ( مثل برنامه ProcDump32 توي قسمت PE Editor)
    *نكته تمامي عددها در مبناي hex مي باشد
    Entry Point : 739d
    Size of image:14000
    Image Base: 01000000​
    يعني EP ما در حافظه برابر است با
    EP=01000000+739d=0100739d​
    و در قسمت سكشنها داريم:
    کد:
    .text 
    Virtual Size:00007748 مقدار فضايي كه اين سكشن در حافظه ميگيره
    Virtual Offset:00001000 ( Image base محل شروع در حافظه(بعلاوه 
    RAW Size:00007748 مقدار فضايي كه اين سكشن در روي هارد ميگيره
    Raw Offset:00000600 محل شروع در روي هارد  
    Characteristics:60000020 خصوصيت اين سكشن مثل خواندن و توشتني و ....
    .data
    Virtual Size:00001BA8 مقدار فضايي كه اين سكشن در حافظه ميگيره
    ....
    .rsrc
    Virtual Size:00008958 مقدار فضايي كه اين سكشن در حافظه ميگيره
    ....
    همانطور كه ديده ميشه EP برنامه ما درون سكشن .text پس محل شروع برنامه بروي هارد ميشه:
    REP:739d-1000+600=699d​
    حالا با يه برنامه هگزه اديتور اگه به اين محل پرش كنيم :
    6A706898180001 ​
    كه يعني :
    6A70 push 00000070
    6898180001 push 01001898​
    حالا ما خط اول رو با اين كد عوض مي كنيم ( موقعيت 699d از اول فايل )
    EBFE كه قبلا توضيح دادم يعني چي​
    و برنامه رو به اسم test.lck ذخيره مي كنيم . حالا اگه فايل رو اجرا بكنيم مي بينيم كه فايل اجرا نميشه ( براي اجرا اون بايد با پسوند Exe ذخيرش كنيم (
    . حالا بايد برنامه اي با وي بي بنويسيم كه بياد و اين كد رو يعيني EBFE رو با 6A70 عوض كنه . برنامه Microsoft Visual Basic رو ران كرده و يه پروژه جديد از نوع STANDARD EXE مي سازيم و بعد فرم پيش فرض وي بي رو حذف كرده و يك Module به برنامه اضافه مي كنيم . براي اينكه برنامه مون اجرا بشه احتياج به
    Public Sub Main()
    End Sub​
    ست كردن اين نوع برنامه ها رو همه بلدن:D
    توي قسمت توضيحات اين كدها رو اضافه مي كنيم:
    کد:
    Option Explicit
    
    Dim lngProcess As Long
    Dim lngThread As Long
    Dim lngProcessID As Long
    Dim lngThreadID As Long
    Dim lngReply As Long
    
    Public Type STARTUPINFO
            cb As Long
            lpReserved As String
            lpDesktop As String
            lpTitle As String
            dwX As Long
            dwY As Long
            dwXSize As Long
            dwYSize As Long
            dwXCountChars As Long
            dwYCountChars As Long
            dwFillAttribute As Long
            dwFlags As Long
            wShowWindow As Integer
            cbReserved2 As Integer
            lpReserved2 As Byte
            hStdInput As Long
            hStdOutput As Long
            hStdError As Long
    End Type
    
    Public Type PROCESS_INFORMATION
            hProcess As Long
            hThread As Long
            dwProcessId As Long
            dwThreadId As Long
    End Type
    
    Public Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess _
        As Long, ByVal uExitCode As Long) As Long
    
    Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As _
        Long) As Long
    
    Public Declare Function WaitForSingleObject Lib "kernel32" _
        (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
    
    Public Declare Function CreateProcess Lib "kernel32" Alias _
        "CreateProcessA" (ByVal lpApplicationName As String, ByVal _
        lpCommandLine As String, lpProcessAttributes As Any, _
        lpThreadAttributes As Any, ByVal bInheritHandles As Long, ByVal _
        dwCreationFlags As Any, lpEnvironment As Any, ByVal _
        lpCurrentDriectory As String, lpStartupInfo As STARTUPINFO, _
        lpProcessInformation As PROCESS_INFORMATION) As Long
     
    Public Declare Function GetWindowThreadProcessId& Lib "user32" _
        (ByVal hWnd As Long, lpdwProcessID As Long)
        
    Public Declare Function ResumeThread Lib "kernel32" _
        (ByVal hThread As Long) As Long
        
    Public Declare Function WriteProcessMemory Lib "kernel32" _
        (ByVal hProcess As Long, ByVal lpBaseAddress As Any, ByVal lpBuffer As Any, _
        ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
        
    Public Const GW_HWNDNEXT = 2
    Public Const WM_QUIT = &H12
    Public Const WM_CLOSE = &H10
    
    Public Const SYNCHRONIZE = &H100000
    Public Const NORMAL_PRIORITY_CLASS = &H20&
    Public Const CREATE_SUSPENDED = &H4&
    
    Public pInfo As PROCESS_INFORMATION
    Public sInfo As STARTUPINFO
    Public sNull As String
    و بعد توي سابروتين main اين كدها رو اضافه مي كنيم

    کد:
    Public Sub Main()
        Dim txtStart As String, pHandle As Long, BufferTXT As String
    
    [RIGHT]' اسم برنامه ما كه مي خواييم با تابع زير اون رو اجرا كنيم[/RIGHT]
        txtStart = "test.lck"
    
    [RIGHT]' چك كردن وجود فايل در زير شاخه اجرا برنامه [/RIGHT] 
        If Dir(txtStart) = "" Then
            MsgBox "Failed to Start "
            End
        End If
    
    [RIGHT]'مقدار دهي متغييري كه مشخصات برنامه ما رو مثل دستگيره برنامه  رو نگه ميداره[/RIGHT]
        sInfo.cb = Len(sInfo)
    
    [RIGHT]' اجرا برنامه بوسيله تابع CreateProcess با خاصيت Suspended كه باعث ميشه برنامه بصورت معلق اجرا بشه  و هنگامي كه لودر به EP رسيد برنامه 
    ' متوقف بشه و منتظر فرمانResumeThread بشه كه برنامه اجرا بشه در اين صورت ميشه هر موقعه بخواييم برنامه رو متوقف و يا ادامه دهيم[/RIGHT] 
        lngReply = CreateProcess(sNull, txtStart, ByVal 0&, ByVal 0&, 1&, _
            CREATE_SUSPENDED, ByVal 0&, sNull, sInfo, pInfo)
    
    [RIGHT]' چك ميكنه ايا برنامه اجرا شد يا نه ؟[/RIGHT]
        If lngReply = 0 Then
            MsgBox "Unable to start "
            End
        End If
    [RIGHT] 'ذخيره اطلاعات اوليه برنامه براي استفاده هاي بعدي[/RIGHT]
        lngProcessID = pInfo.dwProcessId
        lngThreadID = pInfo.dwThreadId
        lngProcess = pInfo.hProcess
        lngThread = pInfo.hThread
        
    [RIGHT]'6A70 مقدار دهي بافري كه بايد نوشته بشه يعني مقدار   [/RIGHT]   
        BufferTXT = Chr(&H6A) & Chr(&H70)
    
    [RIGHT]' نوشتن در حافظه برنامه ( ِD100739 ) توسط تابع  WriteProcessMemory[/RIGHT]
        lngReply = WriteProcessMemory(lngProcess, &H100739D, BufferTXT, Len(BufferTXT), 0&)
    
    [RIGHT]' چك كردن اينكه نوشتن با موفقيت  انجام شده يا نه و گرنه به تابع اتمام برنامه برو[/RIGHT]
        If lngReply = 0 Then
            MsgBox "Failed to change. " 
            GoTo End_Process
        End If
    
    [RIGHT]' ادامه دادن برنامه ( تمامي تغييرات اعمال شده و مثل فايل اوليه شده اما در حافظه )[/RIGHT]
        lngReply = ResumeThread(lngThread)
      
    [RIGHT] ' چك كردن ادامه برنامه و در صورت عدم ادامه برنامه پرش به قسمت اتمام برنامه[/RIGHT]
        If lngReply = 0 Then
            MsgBox "Failed to Resume " 
            GoTo End_Process
        End If
    
    [RIGHT]' بستن هندلهاي استفاده شده[/RIGHT]
        lngReply = CloseHandle(lngThread)
        lngReply = CloseHandle(lngProcess)
    
    [RIGHT]' خروج از برنامه[/RIGHT]
        End
        
    End_Process:
    
    [RIGHT]' اتمام برنامه[/RIGHT]
        lngReply = TerminateProcess(lngProcess, 0&)
    
    [RIGHT]' بستن هندلهاي استفاده شده[/RIGHT]
        lngReply = CloseHandle(lngThread)
        lngReply = CloseHandle(lngProcess)
    
    [RIGHT]' خروج از برنامه[/RIGHT]
        End
    
    End Sub
    اميدوارم توضيحات كافي باشه و بتونه به شما كمك كنه :D
     
  6. cracki

    cracki Registered User

    تاریخ عضویت:
    ‏23 مارس 2004
    نوشته ها:
    672
    تشکر شده:
    23
    عجب بحث توپي
    صبر كن من از اول بخونمش !
    من اولين مشتريتم !
     
  7. appbannerkhuniresbanner
  8. saeedsmk

    saeedsmk مدیر بازنشسته

    تاریخ عضویت:
    ‏6 سپتامبر 2003
    نوشته ها:
    1,519
    تشکر شده:
    4
    حالا مي خوايم يه تغييرات بديم توي فايل exe تا اونو نشه براحتي شناخت كه با وي بي نوشته شده. اول بايد فايل اجرايي رو طوري تغيير بديم كه نشانه هاي وي بي حذف بشه . اولين مشكل msvb ران تايم dll .خوب همه ميدونن كه براي اجراي فايل اي كه با وي بي نوشته شده احتياج به اين dll هستش .
    خوب ابتدا ما برنامه اجرايي رو با يك هگزا اديتور بازش مي كنيم و بعد دنبال msvbvm60.dll ( براي وي بي 6) مي گرديم و اونرو به testtest.tst تغيير مي ديم و برنامه رو ذخيره كرده و بعد اجرا مي كنيم . سيستم ارور ميده كه اين فايل رو پيدا نكرده. testtest.tst .
    براي اينكه فايل اجرا بشه از msvbvm60.dll يه نسخه توي جاي كه فايل اجراي هست كپي كرده و بعد اون رو به نام testtest.tst تغيير نام مي ديم و حالا برنامه رو اجرا مي كنيم. بينگو اجرا شد.
    با اين ترفند ميشه همه توايع موجود توي فايل رو كه با vba شروع ميشن رو تغيير نام داد . ( بايد هر اسمي كه براي اون تابع مشخص ميكنيم توي فايل اجرايي توي فايل testtest.tst هم همون اسم رو براش بذاريم)
    بعضي از توابع هم با rtc شروع ميشن
    مثلا rtcMidBstr كه همون تابع mid است. خوب با يك مثال فكر كنم قضيه روشن تر بشه:
    همون rtcMidBstr رو دنظر بگيريم اگه اين تابع رو به توي فايل اجرايي به ord0000001 تغيير نام بديم بايد توي فايل testtest.tst هم به همين نام تغييرش بديم .لذا هنگامي كه فايل اجرايي لود ميشه لودر توي هدر فايل testtest.tst دنبال محل شروع ord0000001 ميگرده و اگه ما توي اين فايل اين rtcMidBstr عوض نكرده باشيم به ما صفحه خطا رو نشون ميده.
    حالا بر اساس اين توضيحات ميشه يه فايل نوشت كه دقيقا اين كار رو بكنه و بعد فايل testtest.tst رو با يك برنامه exepacker پك كرد و درنتيجه كركر ها گمراه ميشن . چون يكي از كارهاي كه كركر ها ميكنن قرار دادن بريك پوينت روي تابع مقايسه است ( بطور مثال براي مقايسه دو عبارت رشته اي وي بي معمولا از تابع vbaStrTextCmp __ استفاده ميكنه) حالا اگه كركر سر فصل فايل msvbvm60.dll رو توي ديباگرش لود كنه چون برنامه ما از فايل اصلي msvbvm60.dll استفاده نميكنه نمي تونه رو اين تابع به راحتي بريك پوينت قرار بده و....
     
  9. Piter1356

    Piter1356 کاربر تازه وارد

    تاریخ عضویت:
    ‏11 اکتبر 2004
    نوشته ها:
    395
    تشکر شده:
    0
    محل سکونت:
    tehran
    مثل اينكه دوستمونsaeedsmk تجربه خوبي داره .

    saeedsmk جان شفاف و خلاصه جواب اين مساله رو تشريح كن :

    صورت مساله : تصميم داريم نرم افزاري توليد كنيم كه يك جا بيشتر نصب نشه . ( با اين فرض كه نصب نرم افزار به عهده خريدار مي باشد ) . يعني اگر يكي از ما سي دي نرم افزار بخصوصي رو خريد نتونه به رفيق رفقاش هديه بده . دقت كن كه هدف تكثير نشدن مثلا سي دي نيست . هدف اينه كه فقط روي يه كامپيوتر نصب بشه .

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

    saeedsmk جان منتظرم
     
  10. saeedsmk

    saeedsmk مدیر بازنشسته

    تاریخ عضویت:
    ‏6 سپتامبر 2003
    نوشته ها:
    1,519
    تشکر شده:
    4
    ببين توي برنامه حالا به هر زبوني كه نوشته بشه فرق نمكنه براي قفل گذاري بايد اصول قفل گذاري رعايت بشه
    اما جواب سئوال بر اساس اطلاعاتي كه من دارم قفل رو ميشه به چند طريق اعمال كرد:
    1- قفل نرم افزاري
    2- قفل سخت افزاري
    وقتي قفل قفل نرم افزاري بايد ديد كه نحوه عمل كرد اون قفل چيه مثلا همين قفل سيدي ويندوز هميشه ثابته يعني مياد كي رو توي يه لوپ قرار ميده وبعد اگه نتيجه درست بود ادامه ميده ونه ..... كه در مورد سئوال شما جواب كامل نيست اما ميشه با تغيراتي اون رو كامل كرد . برنامه اول مياد اطلاعاتي كه ثابت هستند و تا زمان تغيير سخت افزار تغيير نيمكنن رو بدست مياره مثل سريال هارد. سريال سي پي يو سريال كارت گرافيك( زياد كاربردي نيست) سريال lan card و ... رو بدست آورده و بعد اونها رو توي يك تابع قرار ميده و بعد بر اساس كد سيدي ( كه ثابته) مياد و يك سريال رو جنريت كرده و يا با تلفن ويا اينترنت اونرو به شما داده وشما بر اساس يك تابع ديگر كد نصب رو در اختيار اون شخص و يا كاربر گذاشته و....( حتي ميشه با تغييراتي كاري كرد كه هر بار به اينترنت وصل ميشه اين كد رو چك كنه)

    توي روش دوم
    بجاي سخت افزار متدوال از سخت افزار متصل استفاده ميشه و قضيه تماما مثل بالاست مثل تمامي دانگلها و ...

    روش سوم هم تلفيقي از دو روشه بالا است

    اما تمام اينها توي فايل اجراي و يا كامپونتهاي مصرفي برنامه است و اگر يه كسي ( بر اساس ارزش برنامه ) بياد و برنامه رو كرك كنه ( و در صورت درست بسته نشدن استراكچر برنامه خيلي كار راحت تر ميشه) تمامي اين تلاشها ها از بين ميره و برنامه خيلي راحت با قيمت پايين در اختيار هر كسي قرار ميگيره.

    پس بايد كاري كرد كه برنامه به راحتي كرك نشه .حالا ميشه از قفلهاي ديگه هم در كنار قفل هاي ذكر شده استفاده كرد.

    تماي شركت هاي سازنده و يا برنامه نويسها براي هر برنامه كار بردي معمولا يه محدوده زماني رو پيش بيني مي كنن كه توي اون محدوده زماني برنامه كرك نشه ( يعني هر برنامه اي كرك ميشه ) و با فروش برنامه توي اون بازه شركت سازنده هم اصل سرمايه گذاري و هم سود پيش بيني شده رو بدست بياره .

    مشكل اينجاست كه توي كشور هاي ديگه قانون كپي رايت خيلي به برنامه نويسان و شركت هاي سازنده برنامه كمك مي كنه ولي توي ايران اين قانون وجود عملي نداره .

    اميدوارم توضيحات كامل باشه و بتونه كمك كنه
    نكته:::
    بيشتر توي اين مبحث توي همه دنيا سعي ميشه ايده داده بشه نه خود برنامه محافظت كننده چون هر كس روشي براي برنامه نويسي داره كه خودش باعث سختي كار كركر ميشه منم سعي ميكنم از همين روش استفاده كنم نميدونم تونستم درست برنامه ريزي كنم و مبحث رو درست ادامه بدم يا نه به هر حال هر كسي منابع اطلاعات كمي
    داره و اگه كسي در مورد مطلبي ميدونه دليل نيست كه اون استاد و يا حرفه اي باشه ممكنه دوستان بيشتر بلد باشن و اگه كمك كنن من يكي كه خيلي ازشون ممنون ميشم . :cool:
     
  11. darklord

    darklord Registered User

    تاریخ عضویت:
    ‏23 آپریل 2005
    نوشته ها:
    1,083
    تشکر شده:
    1
    محل سکونت:
    System32
    سعید جان این آخری رو خیلی قشنگ نوشتی (مثل بقیش) . آره پیتر جان نمیشه کاری کرد که برنامه غیر قابل نفوذ بشه ولی میشه کاری کرد که یه کم کار کرکر سخت تر بشه. مطمئن ترین راه چک کردن آنلاین برنامه و سریال برنامه است ولی اینکار منطقی نیست چون ممکنه من به عنوان یه کاربر به اینترنت دسترسی نداشته باشم و بخوام از برنامت استفاده کنم ! میبینی نمیشه کاربر رو مجبور کرد که هر وقت خواست با برنامه کار کنه به اینترنت وصل بشه.

    با این حال اگه این کار رو هم انجام بدی مشکل اصلی به قوت خودش باقیه. با این ارتباط (به اینترنت) از دست keygen ها راحت میشی ولی crack ای که برای برنامت نوشته میشه میاد و کلا وصل شدن به اینترنت رو از برنامت حذف میکنه و با تغییر چند دستور به برنامه میگه که "الان وصل شدیم و اطلاعات صحیح است" به همین قشنگی سریال برنامه شد : پشم!

    بعضی نرم افزارهای پا رو فراتر می ذارن :
    1- وارد کردن اطلاعات کد شده به رجیستری
    2- ذخیره اطلاعات در چند فایل در قلب سیستم عامل
    3- جایگزینی چند تابع بتا با توابع اصلی در dll ها پس از دریافت سریال (اگر برنامه کرک شود این قسمت ناخودآگاه حذف خواهد شد و برنامه دیگر کار نخواهد کرد)
    4- دستکاری فایل اصلی اجرایی برنامه توسط یک برنامه اجرایی کوچک پس از تایید سریال
    5- ارتباط با اینترنت و چک کردن سریال
    6- قرار دادن قفل سخت افزاری و نرم افزاری برای جلوگیری از کپی شدن اطلاعات
    7- استفاده از فلاپی و سی دی به طور هم زمان
    8- و در انتها تغییر متداوم سریال نامبر با هر بار اتصال به اینترنت (اطلاعات سیستم شما نیز فرستاده میشود نوعی نرم افزار جاسوس در برنامه اصلی جاگذاری می شود )

    با این وجود نرم افزاری که تمامی 8 مورد بالا را نیز به کار ببندد قابل کرک کردن است چرا؟ چون تمامی کدهایی که این کار را میکنند پس از نصب بر روی سیستم شما هستند و شما می توانید آنها را آنگونه که می خواهید تغییر دهید.

    تنها مورد قابل استفاده مورد شماره 8 است البته قانونی نیست ولی با این وجود تنها قسمتی است که اطمینان لازم را میتواند فراهم کند :

    قطعه کدی را که در واقع یک spyware است را در برنامه استتار می کنیم . هر چند وقت یکبار به عنوان live Update تقاضای برقراری ارتباط با اینترنت را میکنیم پس از برقراری ارتباط توسط توابع checksum گیری از سورس کد میکنیم و به همراه مشخصات سیستم به سایت مربوطه ارسال میکنیم. اگر checksum برنامه با checksum مورد نظر در سایت یکی نبود برنامه با اجرای بعدی قسمتی از خود را نابود می کند.

    این روش نسبتا مطمئن است البته بهید مخفیانه باشد و کاربر متوجه آن نشود. مثلا با آغاز برنامه سریال نامبر را بخواهیم یعنی تمتمی قفلهای ممکن را بگذاریم و در کنار آنها این سیستم جاسوسی نیز فعالیت کند . با این روش و کمی شانس کرکر قطعه کر جاسوسی را جزئی از برنامه ی اصلی خواهد دید و به آن دست نخواهد زد.

    بازم میگم این روق به هیچ عنوان قانونی نیست ازش استفاده نکنید ;)
     
  12. saeedsmk

    saeedsmk مدیر بازنشسته

    تاریخ عضویت:
    ‏6 سپتامبر 2003
    نوشته ها:
    1,519
    تشکر شده:
    4
    از darklord جان خيلي خيلي ممنونم كه به كمك ما اومد :D بنظرم من كه توضيحات كاملي بودن

    بيشتر روشهاي ابداعي در واقعه از يك واقعيت كمك ميگيرن توانايي بدست اوردن اطلاعات و بعد تغيير تكه هاي از سيستم -برنامه و يا كامپنت هاي برنامه . اما چه چيزي باعث ميشه كه يه برنامه به راحتي كرك بشه ؟. نحوه گرفتن اطلاعات .
    بزارين يك مثال بزنم تا مشخص تر بشه: برنامه اي بصورت دمو اجرا ميشه و هر دفعه بعد از اجرا مياد و صفحه پيغامي نشون ميده كه 20 روز هنوز مونده و يا 10 بار استفاده
    براي نوشتن اين نوع از قفلها كه به قفلهاي زماني يا دفعه اي معروف هستند معمولا از توابع اي استفاده ميكنن كه ميشه اونها را به توابع زير تقسيم بندي كرد
    1- توابع گرفتن زمان مثل date توي vb
    2- توابع بدست اوردن زمان اجرا برنامه
    3- توابع گرفتن تاريخ يك فايل
    4- توابع بدست اوردن اخرين تغيير فايل
    كه همگي تابلو هستند .اما ايا ميشه به روشي برنامه رو نوشت كه با اين توابع تابلو هم داراي ساختار مناسبي ياشن ؟
    بله ميشه

    حالا اگه اين گرفتن اطلاعات سخت تر بشه ايا بازم به راحتي كرك ميشه ؟

    بله . اگه قسمت تغيير اطلاعات بد نوشته شده باشه

    مثلا بعضي از برنامه ها براي اينكه سخت تر بشه اون ها رو كرك بكنن كد قسمت قفل رو در حالت اجرا تغيير ميدن
    و.......
    اگه وقت كنم و اين پروژه دفاع از پايان نامه بزاره يك نمونه اش رو اينجا ميزارم

    :D
     
  13. saeedsmk

    saeedsmk مدیر بازنشسته

    تاریخ عضویت:
    ‏6 سپتامبر 2003
    نوشته ها:
    1,519
    تشکر شده:
    4
    يه فايل قفل نوشتم كه از همين روش استفاده مي كنه بعدا كدش رو ميزارم فايل اصلي اينه :
    و كدش 235154027412062812064
     
  14. avajang.com .leftavajang.com.right
  15. saeedsmk

    saeedsmk مدیر بازنشسته

    تاریخ عضویت:
    ‏6 سپتامبر 2003
    نوشته ها:
    1,519
    تشکر شده:
    4
    خوب نحوه چگونگي قفل رو اينجا توضيح دادم
    از اينجا هم مي تونين بخونين
    http://forum.persiantools.com/showpost.php?p=400786&postcount=126


    اما سورش هم اتچ كردم

    البته ببخشيد كه خوب برنامه نويسي نشده اخه من برنامه نويس خوبي نيستم( چند تا برنامه ديگه هم داره كه كار خاصي نميكنن مثل چسباندن فايل اصلي به اجرا كننده با ديكد كردن اون )
    لازم بگم كد crc چكر نداره !!!

    فعلا :)

    فايل سورس : اينجا است
     
  16. soda

    soda کاربر تازه وارد

    تاریخ عضویت:
    ‏21 آپریل 2005
    نوشته ها:
    5
    تشکر شده:
    1
    سلام saeedsmk عزيز
    خياي خوب بود
    استفاده كرديم
    در ضمن فكر نكنم به اون راحتي ( يعني تغيير msvbvm به يه فايل كذايي ) بتوني كركر رو از فهميدن اينكه با وي بي نوشته شده دور كني
    ميشه بيشتر توضيح بدي ؟
     
  17. saeedsmk

    saeedsmk مدیر بازنشسته

    تاریخ عضویت:
    ‏6 سپتامبر 2003
    نوشته ها:
    1,519
    تشکر شده:
    4
    اره میشه سودا جان
    چرا نمیشه چه توضیحی بگو تا کاملش کنم
    ببین شما میتونید فایل مورد نظرتون رو که msvb باشه رو بصورت پک کنید و تمام توابعش و که اکسپورت میشه رو تغییر نام بدی همچنین اسمشو و بعد هم توی فایل اگزه تم همین کار رو بکنی و در ضمن فایل رو پیکد ببندی و هم ایمنکه بعد فایلت رو هم پک کنی و ...
    این سری فایلها جلوی خیلی از مشکلات رو میگیره
    ولی مشکلاتی رو هم اضافه میکنه ....
     
  18. redjoker

    redjoker کاربر تازه وارد

    تاریخ عضویت:
    ‏21 فوریه 2006
    نوشته ها:
    91
    تشکر شده:
    0
    محل سکونت:
    نصف جهان
    جالب کار کردی ... اگه با دلفی مینوشتی منم پایه بودم ولی VB هیچی نبفهمم ;)
     

    فایل های ضمیمه:

    • serial.zip
      اندازه فایل:
      8.6 KB
      نمایش ها:
      81
    • crk.zip
      اندازه فایل:
      8.6 KB
      نمایش ها:
      76
    • serial_coded.zip
      اندازه فایل:
      11.7 KB
      نمایش ها:
      76
  19. techmix

    techmix Registered User

    تاریخ عضویت:
    ‏12 آگوست 2004
    نوشته ها:
    75
    تشکر شده:
    0
    محل سکونت:
    Tehran
    آخ جون ! آخ جون ! من اصلا ميام pt واسه همين بحثا ، برم بخونم ...
     
  20. saeedsmk

    saeedsmk مدیر بازنشسته

    تاریخ عضویت:
    ‏6 سپتامبر 2003
    نوشته ها:
    1,519
    تشکر شده:
    4
    سلام تک مکس جان ( خواستم اسمت رو بگم گفتم شاید ناراحت بشی) بابا تو که خودت این کاره ای . چی کار داری با قفل مردم، میخوای بشکنیش .
    شوخی کردم سال نو ات هم مبارک .
    راستی یه نگاهی هم به pm ات بنداز.
    راستی اقای " جوکر قرمز " این فایل ها رو چی کار باید بکنیم . از چه روشی استفاده میکنه یه توضیح بدی یک ادم کم سوادی مثل من هم میتونه بفهمه اینها چی هستند
    سال نو شما هم مبارک
     
  21. redjoker

    redjoker کاربر تازه وارد

    تاریخ عضویت:
    ‏21 فوریه 2006
    نوشته ها:
    91
    تشکر شده:
    0
    محل سکونت:
    نصف جهان
    ای بابا سرکارم گذاشتی :)
    فایل اصلی که بعد از اکستراکت شدن با پسوند .dat بود یا همون exe اصلی که تریس کردم و شرطهای چک قفل و.... ( فکر کنم 3تا بود ) را تغییر دادم .


    عید شما هم مبارک :)
     
  22. saeedsmk

    saeedsmk مدیر بازنشسته

    تاریخ عضویت:
    ‏6 سپتامبر 2003
    نوشته ها:
    1,519
    تشکر شده:
    4
    کارت عالی بود اما یک مشکل داشت میدونی چی شما تابع اصلی برنامه رو از کار انداختین در نتیجه نوشتها به نمایش در نمیاید!
    یعینی هنوز یک قسمت مونده