נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
מדעי המחשב
RSS UnderWarrior Forums : RSS מדעי המחשב
נושא

נושא: BruteOfForce ברקורסיה

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
אוריה
משתמש חבר
משתמש חבר
סמל אישי

הצטרף / הצטרפה: 29 January 2010
מדינה: Israel
משתמש: מנותק/ת
הודעות: 230
נשלח בתאריך: 02 September 2010 בשעה 20:57 | IP רשוּם
ציטוט אוריה

קוד:

using System;

namespace BF
{
    class MainClass
    {
        public static char[] ch;
        public static void Main(string[] args)
        {
            //ch = GetChars();
            char[] s = new char[] { '0', '0', '0', '0' };
            Hack(0, 4, s);
            Console.ReadLine();
        }
        static char[] GetChars()
        {
            char[] res = new char[89];
            int i = 0;
            for (char n = '0'; n <= '9'; n++)
            {
                 res[i] = n;
                 i++;
            }
            for (char n = 'a'; n <= 'z'; n++)
            {
                 res[i] = n;
                 i++;
            }
            for (char n = 'A'; n <= 'Z'; n++)
            {
                 res[i] = n;
                 i++;
            }
            for (char n = 'א'; n <= 'ת'; n++)
            {
                 res[i] = n;
                 i++;
            }
            return res;
        }
        static bool check(char[] s)
        {
            char[] p = new char[] { '1', '2', '3', '4' };            
            if (s == p)
                 return true;
            return false;
        }
        static char[] Hack(int i, int len, char[] s)
        {
            for(char d = '0'; d <= '9';d++)
            {
                 s = d;
                 Console.WriteLine(ConvertToString(s));
                 if (check(s))
                 {
                     Console.WriteLine("Success!!");
                     return new char[]{};
                 }
                 else if(i < len - 1)
                 {
                     s = Hack(i + 1, len, s);
                     if(s.Length == 0)
                          return new char[]{};
                 }
            }
            return new char[] { };
        }
        static string ConvertToString(char[] c)
        {
            string res = "";
            for (int i = 0; i < c.Length; i++)
                 res += c;
            return res;
        }
    }
}

אני מקבל רק
0000
0000
0000
0000
0001
0002
0003
0004
0005
.
.
0009
:(

__________________
SmartProgramming
נא לא להגיב בשבת על מה שאני כותב

עדיף להשקיע עוד שעה בתיעוד, מלאבד עוד 100 שעות ויותר על שיחזר של כל הפרוייקט מההתחלה..
חזרה לתחילת העמוד הצג את כרטיס החבר של אוריה חפש הודעות אחרות של אוריה בקר בדף הבית של אוריה
 
shoshan
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 02 September 2010 בשעה 22:45 | IP רשוּם
ציטוט shoshan

היי, השיטה הכי פשוטה היא רקורסיה.

אפשר גם לממש משהו לינארי פשוט שממיר מספר למחרוזת בהתבסס על אורך ומספר תוים
כמו בתרגיל הידוע שלוקח מספר ומחזיר את הספרות שלו - רק שבמקום ספרות ובסיס ספירה
של 10, בסיס בספירה הוא מספר התוים במערך והערך שחוזר הוא במקום המספר האות
במקום של המספר במערך.

בהצלחה


__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 
אוריה
משתמש חבר
משתמש חבר
סמל אישי

הצטרף / הצטרפה: 29 January 2010
מדינה: Israel
משתמש: מנותק/ת
הודעות: 230
נשלח בתאריך: 03 September 2010 בשעה 12:36 | IP רשוּם
ציטוט אוריה

לא הבנתי את מה שכתבת עם המספרים.
בכל מקרה אני צריך גם תווים.
הנה הקוד שעובד:
קוד:


using System;

namespace BF
{
    class MainClass
    {
        public static char[] ch;
        public static void Main(string[] args)
        {
            ch = GetChars();
            Hack(0, 4);
            Console.ReadLine();
        }
        static char[] GetChars()
        {
            char[] res = new char[89];
            int i = 0;
            for (char n = 'a'; n <= 'z'; n++)
            {
                 res = n;
                 i++;
            }
            for (char n = 'A'; n <= 'Z'; n++)
            {
                 res = n;
                 i++;
            }
            for (char n = 'א'; n <= 'ת'; n++)
            {
                 res = n;
                 i++;
            }
            for (char n = '0'; n <= '9'; n++)
            {
                 res = n;
                 i++;
            }
            return res;
        }
        static bool check(char[] s)
        {
            char[] p = new char[] { 'a', 'b', 'c', 'd' };
            bool eq = true;
            for (int i = 0; i < s.Length; i++)
            {
                 if (s != p)
                         eq = false;
            }
            return eq;
        }
        public static char[] s = new char[] { '0', '0',
'0', '0' };
        public static bool succeed;
        static void Hack(int i, int len)
        {
            for (int j = 0; j < 89;j++)
            {
                 if (succeed)
                         return;
                 s = ch[j];
                 Console.WriteLine(s);
                 if (check(s))
                 {
                         Console.WriteLine("Success!!");
                         succeed = true;
                         return;
                 }
                 else if (i < len - 1)
                 {
                         Hack(i + 1, len);
                         if (s.Length == 0)
                             return;
                 }
            }
            return;
        }
    }
}


אופן השימוש:
1) אם הסיסמא מורכבת ממספרים בלבד, ב-GetChar לשים את
הלולאה של המספרים לפני כל השאר, אם זה רק עברית - אז לשים
את העברית לפני וכו'.
2) בפונקציה הראשית לשים את מספר התווים של הסיסמא:
קוד:

Hack(0, password_length);

3) לבנות פוקנציית אימות.
כדי להמשיך הלאה:
תוכנה במחשב: SendMessage, ע"י PInvoke
אינטרנט: המחלקה TcpClient, המסמך של Hyp3rInj3cT10n
"משחקים ב-HTTP" או מסמכים אחרים לפרטוקולים אחרים.
----------
בכל אופן, תהיתי אם אפשר לבנות רקרוסיה בפונקציה אחת, אפילו
עם הוראות goto או משהו בסגנון. כמו זה:
קוד:

static void Main(string[] args)
        {
            Reverse(5678);
            Console.WriteLine("^^ Reqursia");
            int n = 5678;
            while (n > 10)
            {
                 Console.WriteLine(n % 10);
                 n /= 10;
            }
            Console.WriteLine(n);
            Console.ReadLine();
        }
        static void Reverse(int n)
        {
            if (n < 10)
                 Console.WriteLine(n);
            else
            {
                 Console.WriteLine(n % 10);
                 Reverse(n / 10);
            }
        }

האם יש מצבים שבהם אי אפשר בכלל לבנות פונקציה רקרוסיבית
ככה?
פשוט רקורסיה חונקת את המחסנית..

__________________
SmartProgramming
נא לא להגיב בשבת על מה שאני כותב

עדיף להשקיע עוד שעה בתיעוד, מלאבד עוד 100 שעות ויותר על שיחזר של כל הפרוייקט מההתחלה..
חזרה לתחילת העמוד הצג את כרטיס החבר של אוריה חפש הודעות אחרות של אוריה בקר בדף הבית של אוריה
 

אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

קפיצה לפורום
אינך יכול/ה לשלוח נושאים חדשים בפורום זה
אינך יכול/ה להגיב לנושאים בפורום זה
אינך יכול/ה למחוק את הודעותיך ותגוביך בפורום זה
אינך יכול/ה לערוך את הודעותיך ותגובותיך בפורום זה
אינך יכול/ה לצור סקרים בפורום זה
אינך יכול/ה להצביע בסקרים בפורום זה