اطلاعیه

Collapse
No announcement yet.

الگورینم پسورد و بانک اطلاعاتی

Collapse
X
 
  • Filter
  • زمان
  • Show
Clear All
new posts

  • الگورینم پسورد Ùˆ بانک اطلاعاتی

    سلام دوستان
    دو تا سوال داشتم

    اول دومی رو میگم بعد سوال اولی رو مطرح میکنم.

    به این کد دقت کنید
    کد:
    if password=12345 then
    open
    else
    close
    end if
    بیشتر برنامه برای وارد شدن به محیط کاربری از این الگوریتم استفاده می کنن و کرکر ها با یه دستکاری کوچک از این مانع رد میشن
    حالا میخواستم بدونم راهی و یا الگوریتمی وجود داره که این قطعه کد رو بدون استفاده از شرط و بدون سریز شدن بافر به خوبی انجام بده؟
    بر خاتم انبیاء محمـــــــــــــــــد صلوات بفرست.
    (انشالا مشکلت حل شه!)

  • #2
    هر کاری کنید بازم کرکر میتونه جامپ کنه. اما در بهنرین حالت اینه که برنامه رو درگیر این شرط کنید.
    مثلا :
    در بانک اطلاعاتی دیتا رو کد کنید و ذخیره کنید. در اینجا کلید باز کردن دیتای کد شده ، درگیر با شرططتون باشه.
    اینچوری اگه جامپ کنه دیتا رو نمیتونه دیکد کنه و حتما باید مقدار صحیح رو بررسی کنه.
    البته این روش هم قابل دور زدن هست.
    و روشی دیگر :
    خود من شرطهای برنامه رو به صورت پوینتر و بدون IF مینویسم.
    یعنی اگر مقدار فلان شرط True بود بپر سر پوینتر فلان پروسیجر. اینجوری بازم کار سخت تر میشه.
    موفق باشید.
    Last edited by Delphi_7; 10-08-2013, 02:15 AM.
    صد سال ره مسجد و ميخانه بگيري
    عمرت به هدر رفته اگر دست نگيري

    بشنو از پير خرابات تو اين پند
    هر دست که دادي به همان دست بگيري...

    Comment


    • #3
      برنامه نویسی یک اصولی که داره که شکر خدا برنامه نویس های ایرانی بیشترشون اصلا نمی دونن چی هست که بخوان بهش عمل کنن
      نتیجه این می شه که راهکار هایی مثل TFS استفادش توی ایران صفر مطلقه

      این رو گفتم برای این که شما برنامه ات رو طبق اصول بنویس و مباحثی مثل Obfuscation رو اگر خودت برش تسلط داری برو سراغش در غیر این صورت بدش دست پروتکتور ها و افرادی که در این زمینه فعالیت می کنن البته Obfuscation به تنهایی توصیه نمی شه و استفاده اصلی اش برای جلوگیری از کرک نیست
      Last edited by 4n0nym0us; 10-07-2013, 03:54 AM.
      I'm Not Related To Anonymous Group
      بنده ارتباطی به گروه Anonymous ندارم

      Comment


      • #4
        نوشته اصلی توسط Delphi_7 نمایش پست ها
        هر کاری کنید بازم کرکر میتونه جامپ کنه. اما در بهنرین حالت اینه که برنامه رو درگیر این شرط کنید.
        مثلا :
        خود من شرطهای برنامه رو به صورت پوینتر و بدون IF مینویسم.
        یعنی اگر مقدار فلان شرط True بود بپر سر پوینتر فلان پروسیجر. اینجوری بازم کار سخت تر میشه.

        انجام پروژه های نرم افزاری در کمترین زمان و نازلترین قیمت
        برای تماس به آیدی Arashjeyjey در یاهو مسنجر پیام بدید.

        http://www.jeyjey.blogfa.com

        Comment


        • #5
          نوشته اصلی توسط web01 نمایش پست ها
          سلام دوستان
          دو تا سوال داشتم

          اول دومی رو میگم بعد سوال اولی رو مطرح میکنم.

          به این کد دقت کنید
          کد:
          if password=12345 then
          open
          else
          close
          end if
          بیشتر برنامه برای وارد شدن به محیط کاربری از این الگوریتم استفاده می کنن و کرکر ها با یه دستکاری کوچک از این مانع رد میشن
          حالا میخواستم بدونم راهی و یا الگوریتمی وجود داره که این قطعه کد رو بدون استفاده از شرط و بدون سریز شدن بافر به خوبی انجام بده؟
          واقعا برنامه ای هست که این جوری چک کنه !!؟
          :|
          اصلا این الگوریتمه ؟؟؟؟؟؟ :||||
          ما این دیتابیس مربوط به برنامه رو salt میکنیم ! و دوباره چند مرحله کد میکنیم ! آخرش کرک میشه !

          Comment


          • #6
            سلام

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


            موفق باشيد.

            Comment


            • #7
              ممنون از همتون به جوابم رسیدم
              و به گفته اقا ارش که نقل از Delphi_7 کرده بود پوینتر میتونه کارو سخت میکنه

              حالا سوال اولیم میخوام بپرسم
              ما میخوایم یه برنامه پرتابل به همراه بانک اطلاعاتی sql داشته باشیم
              تنها راهی که به ذهنم زد ریسورس کردن بانک داخل برنامست داخل نت فقط تونستم ریسورس تصویر-موزیک و... رو پیدا کنم ولی از پایگاه داده حرفی نزده بود
              دوستان سورسی با زبان ویژال دارن ؟ و یا راهنمایی در این مورد؟
              بر خاتم انبیاء محمـــــــــــــــــد صلوات بفرست.
              (انشالا مشکلت حل شه!)

              Comment


              • #8
                اگر تجربه و توان فنی برای امن کردن برنامه ای که نوشتی نداری بهتره وقتت رو برای بالا بردن کیفیت برنامت بذاری و در نهایت از کسی که بلده بخوای تا قسمتهای لازمه رو پیاده سازی کنه. معمولا در تیمهای نرم افزاری افرادی هستند که فقط وظیفه پیاده سازی قسمتهای امنیتی و تست اون قسمتها رو انجام میدن. اگه خودت سعی کنی بدون داشتن تجربه و علم کافی اینکارو انجام بدی نتیجش میشه کلی وقت و انرژی که از دست میدی و در نهایت از اینکه یه کرکر تازه کار تونسته ترتیب برنامتو بده مدتها متعجب میمونی و همه چی به باد میره... (البته بعدش دیگه تقریبا یاد میگیری امنیت نرم افزار یعنی چی !)

                ساده ترین روشی که میتونی برای امن کردن قطعه کدی که دادی انجام بدی اینه که تابعی طراحی کنی که در صورت درست بودن ورودی همیشه یک مقدار ثابت تولید کنه که اون مقدار میتونه آدرس مکان بعدی ادامه کد اجرایی برنامه باشه. باید به این نکته هم توجه داشته باشی که داخل اون تابع هم به هیچ وجه مقایسه ای نباید وجود داشته باشه. فقط روی مقدار ورودی یه سری محاسبات انجام میشه و یک مقدار ساخته میشه که میتونه درست یا نادرست باشه. اگه درست باشه برنامه به کارش ادامه میده و اگه نباشه با پرش به مکان اشتباه خطای بهرانی ایجاد میشه و بسته میشه یا میتونی با کنترل خطاها (استثنا) پیغام لازمه رو نمایش بدی...

                کد:
                Adress = CheckFunc(password);
                call Adress
                همین روش ساده میتونه خیلی پیچیده تر پیاده شه تا کرکر مجبور باشه برای دور زدنش حتما یک پسورد درست داشته باشه یا مدت زیادی صرف آنالیز کدهای درون تابع کنه تا بفهمه چجوری کار میکنه...

                روشها میتونه از خیلی ساده تا خیلی پیچیده بسته به دانش فرد متغیر باشه...

                Comment


                • #9
                  از همتون ممنونم بابت توصیه های که می کنید نمیدونم با چه زبونی تشکر کنم (البته به غیر از فاسی زبون دیگه رو بلد نیستم) بخاطر تجربه چندساله شما که در اختیار بقیه قرار می دید
                  بنظرم دکمه تشکر براتون کمه و مجبور که اسپم بدم
                  بر خاتم انبیاء محمـــــــــــــــــد صلوات بفرست.
                  (انشالا مشکلت حل شه!)

                  Comment


                  • #10
                    سلام

                    پيرو پست حاج مجيك من قبلا يه كرك مي برا مسابقه كرك آشيانه نوشتم (حاج hepl3r رو ببين برا جوابش ;) ) كه سورسش رو ببيني متوجه ميشي دقيقا همون كاري كه قبلا گفتم رو تو يه سطح ابتدايي اومدم و پياده كردم.
                    سورس به زبان دلفي 7 هست.


                    موفق باشيد.
                    فایل های پیوست شده

                    Comment


                    • #11
                      از اونجای که به زبان دلفی تسلط ندارم نمیتونم کدهای دلفی رو بررسی کنم
                      بخاطر اینکه از اول با ویژال اشنا شدم تصمیم یه درست کردن پروژه اخر ترم با این زبان شدم
                      و نمیتونم ریسورس بانک رو داخل برنامه م پیداه سازی کنم
                      بر خاتم انبیاء محمـــــــــــــــــد صلوات بفرست.
                      (انشالا مشکلت حل شه!)

                      Comment


                      • #12
                        نوشته اصلی توسط Z4R4THUSTR4 نمایش پست ها
                        با دقت نخوندی آرش : گفتم شرط بدون IF .
                        قرار نیست هروقت خواستیم شرطی تعیین کنیم از IF استفاده بشه:
                        مثال زیر رو ببین :
                        کد:
                        Ptr := Pointer(integer(dm1.Q_Anbar.RecordCount < 100) * longint(ptr2)
                                    + (1 - integer(dm1.Q_Anbar.RecordCount < 100)) * longint(ptr1));
                        اینحا IF در کار نیست . اما داریم مقدار RecordCount یک کوئری رو بررسی میکنیم.
                        و پیرو صحبتهای حاج مجیک :
                        کد زیر مقداری رو بررسی میکنه و پوینتر رو تغییر میده ، برای ادامه روند :
                        کد:
                        var
                            ptr1, ptr2, Ptr: Pointer;
                        کد:
                        case input of
                              1:
                                begin
                                  dm1.Connection1.Connected := false;
                                  dm1.Connection1.ConnectionString :=
                                    'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + MyPath +
                                    'db\db.mdb' +
                                    ';Persist Security Info=False;Jet OLEDB:Database Password=1';
                        
                                  Ptr := Pointer(integer(FileExists(MyPath + 'DB\db.mdb')) *
                                    longint(ptr2) + (1 - integer(FileExists(MyPath + 'DB\db.mdb'))) *
                                    longint(ptr1));
                                  TProcedureType(Ptr)(input + 1);
                                end;
                              2:
                                begin
                                  dm1.Connection1.Connected := True;
                        
                                  Ptr := Pointer(integer(dm1.Connection1.Connected) * longint(ptr2) +
                                    (1 - integer(dm1.Connection1.Connected)) * longint(ptr1));
                                  TProcedureType(Ptr)(input + 1);
                                end;
                              3:
                                begin
                        Last edited by Delphi_7; 10-08-2013, 02:27 AM.
                        صد سال ره مسجد و ميخانه بگيري
                        عمرت به هدر رفته اگر دست نگيري

                        بشنو از پير خرابات تو اين پند
                        هر دست که دادي به همان دست بگيري...

                        Comment

                        Working...
                        X