Latest Entries »

את הבלוג אני כבר הרבה זמן לא מעדכן, אבל מדי פעם אני מפרסם פרוייקטים כאן:

http://sourceofalcatraz.wordpress.com/

כפי שבטח כבר הבנתם אני עובד על פרוייקט חדש לקריאת CAPTCHAs.
הפעם, הפרוייקט בסדר גודל הרבה יותר גדול, דינאמי יותר, חכם יותר, מהיר יותר, נוח יותר למשתמש – הכל יותר!
כרגע הפרוייקט לא מוכן לשחרור ראשוני, אך הנה כמה תמונות להצגת היכולות של התוכנה.

אז מתי התוכנה מסוגלת לפענח טקסט שעל קאפצ'ה?

הזיהוי מתבצע רק כאשר התווים מופרדים מהרקע לגמרי. אל תדאגו, אין צורך להכין Photoshop זמין בלחיצת כפתור – התוכנה מקבלת סט כללים לסינון רעשים (רעש הוא הפרעות בתמונה כגון נקודות, קווים לא קשורים, צבעים מתחלפים, צורות ברקע וכו') ומשתמשת בסט כללים הזה בכל פעם, כך שהתוכנה לא צריכה לחכות למישהו אנושי שיסנן התווים מהרקע ברגע שיש לה סט כללים טוב.

נקח מספר קאפצ'ות (אקראיות – נמצא בגוגל תמונות)

https://i0.wp.com/up350.siz.co.il/up1/3otzm2jqltmr.gif

ונראה כמה מהן נצליח לסנן. 😉

בכל תמונה, מסומנות באדום הקאפצ'ות שמתאימות לקריאה.

https://i0.wp.com/up350.siz.co.il/up3/eygzmzymyxz1.pnghttps://i0.wp.com/up350.siz.co.il/up1/lnm0ngzn2fim.png

https://i0.wp.com/up350.siz.co.il/up1/nttmy0jovqwj.png

https://i0.wp.com/up350.siz.co.il/up3/iim1n0igmym3.png

כפי שאתם יכולים לראות, כל הקאפצ'ות ברורים וקריאים, לרוב על ידי פילטר פשוט מאד, פעמים אחרות בעזרת פילטר סינון רעשים או פילטר דומה של סינון צבעים בהירים.

 

 

 

עריכה: הצלחתי (בטעות D:) לסנן את כל ה-12 בעזרת פילטר אחד. 9 מהם קריאים כבר עכשיו, 3 דרוש סינון נוסף.

זה לא באמת משנה, הרי כל קאפצ'ה יסונן בנפרד בזמן אמת – התמונה עם 12 הקאפצ'ות רק נועדה להמחשה במהירות ובעצלנות, אך רואים בבירור כמה קל זה לסנן את הקאפצ'ות שנתמכות.

https://i0.wp.com/up350.siz.co.il/up3/qdowmxdkewtz.png

אז מה אתם אומרים, כדאי למלא לוטו או לא? D:

בנוסף, הצצה קטנה לפרוייקט החדש-ישן והמשופר שלי:

http://up350.siz.co.il/up2/2zzdlyjimzjm.png

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

 

פונקציה שימושית שיכולה לחסוך זמן חיפוש – תרגום קוד שגיאה (מ-GetLastError לדוגמה) למידע טקסטואלי לגביה וכמו-כן ביכולתה למצוא את המידע בשפה המצויינת, במידה והיא מותקנת על המערכת.
את השפה ניתן להעביר כפרמטר אופיונלי, בברירת המחדל השפה היא שפת המערכת.

#define WIN32_LEAN_AND_MEAN
#include <Windows.h>

DWORD ErrorMessage(LPTSTR szDest, DWORD cchSize, DWORD dwError, DWORD Language = LANG_NEUTRAL)
{
    return FormatMessage(
        FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
        NULL,
        dwError,
        MAKELANGID(Language, SUBLANG_DEFAULT),
        szDest,
        cchSize,
        NULL);
}

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
    TCHAR Error[100];
    ErrorMessage(Error, sizeof(Error), 5); //Error 5 - Access Denied
    MessageBox(NULL, Error, NULL, MB_ICONINFORMATION);

    return 0;
}

האם קבצים זמניים יכולים להשאר לצמיתות?
עוד…

חידה: מה יהיה הפלט של התוכנית הבאה:

using System;

class Program
{
    enum ABCDEF
    {
        A = E,
        B,
        C,
        D = 5,
        E,
        F
    }

    static void Main(string[] args)
    {
        Console.WriteLine("int -> ABCDEF:");
        for (int i = 0; i < 10; i++)             Console.WriteLine("{0}: {1}", i, (i.ToString() != ((ABCDEF)i).ToString() ? ((ABCDEF)i).ToString() : "not in ABCDEF"));         Console.WriteLine("ABCDEF -> int:");
        Console.WriteLine((int)ABCDEF.A);
        Console.WriteLine((int)ABCDEF.B);
        Console.WriteLine((int)ABCDEF.C);
        Console.WriteLine((int)ABCDEF.D);
        Console.WriteLine((int)ABCDEF.E);
        Console.WriteLine((int)ABCDEF.F);
    }
}

האם הייתה שגיאת קומפילציה? שגיאת ריצה? מופתעים מהתוצאה? אם כן, המאמר הזה בשבילכם.
עוד…

כידוע, מתכנת שאינו מכיר את סביבת העבודה שלו הוא כמו צייר ללא יכולת ראייה.
בהמשך לרשומות הקודמות, אמשיך להסביר על סביבת העבודה Microsoft Visual Studio, אני עובד על גרסת 2008 אך לא אמורים להיות שינויים גדולים מדי עבור גרסאות 2005 ו-2010 אם בכלל, וייתכן שהמדריך הזה יהיה תקף גם לגרסאות ישנות ועתידיות.
הפעם אסביר על הגדרות לקומפיילר ולסביבת העבודה, אראה דוגמאות קוד לשימוש ב-pragma directives שעוד לא דיברתי עליהם ואדגים כיצד לשלוט על הקובץ הרצה שנוצר ב-100%, עם ובלי שימוש בתוכנות חיצוניות לעריכת הקובץ.
למידע נוסף על pragma directives השונים שקיימים, עיינו בספרייה של MSDN.
לקריאה על פורמט PE, קראו מאמר בן שני חלקים:
Part 1
Part 2

דרישות:
-Microsoft Visual Studio או Microsoft Visual C++ 2008 ומעלה.
-כלים לעריכת קבצי PE לבחירתכם: OllyDBG וגם LorePE / PETools ו-ImpRec לבחירתכם. במאמר זה אני משתמש ב-LordPE בלבד.
-ידע בסיסי ב-C.
-שכל והגיון בריא.
-לא חובה, אך ידע באסמבלי וידע קודם במבנה קבצי PE יעזרו פה.

תוכן העניינים:

  1. הקדמה – סדר בעניינים.
  2. קצת על מבנה הקובץ.
  3. שימוש ביום-יום.
  4. סיכום.

עוד…

מי שלא שמע על המושגים או לא יודע מה הם אומרים, Deep Copy ו-Shallow Copy הם שני סוגים שונים של העתקות אובייקטים.
Deep Copy, העתקה עמוקה, אומרת להעתיק את כל האובייקט כולל הערכים של חברי המחלקה, להבדיל מ-Shallow Copy, העתקה רדודה, שמעתיקה את ההפניה בלבד, כך שגישה אל חברי המחלקה תהיה גישה ישירה אל החברי מחלקה המקוריים ולא אל העתק שלהם.
Deep Copy מתבצע כאשר מציבים לאובייקט ערך שהוא אובייקט של מבנה או בעזרת המתודה Clone של המנשק ICloneable (האקדמיה לעברית קבעה כי התרגום למילה interface הוא מנשק) בעוד ש-Shallow Copy מתבצע כאשר מציבים באובייקט ערך שהוא אובייקט של מחלקה או בעזרת המתודה MemberwiseClone של Object.

לדוגמה:
עוד…

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

השעה 20:30 בדיוק, ה-14 בספטמבר, 2010. אני גולש לתומי באתר האבטחה הישראלי Digital Whisper, שלו קהל וצוות מומחים מהרמות הגבוהות בארץ הייתי אומר. ראיתי כתבה מעניינת והגבתי – אך שמתי לב לדבר האירוני הבא: מנגנון ה-CAPTCHA שנועד למנוע ספאם ולעיתים נזק גדול יותר, בעיקר על מנת להבדיל בין מחשבים ובני-אדם, נראה פשוט למדי.
עוד…

אתגר אלגוריתמיקה:
דרך לייצג מספרים גדולים מאד היא על-ידי רשימת הגורמים (הראשוניים) שלהם. למשל 120=!5 מיוצג על-ידי (משמאל לימין):
1 ,1 ,3
כלומר:
1^5 * 1^3 * 3^2.

עליכם לקלוט מספר n ולמצוא כיצד !n מיוצג בשיטה זו.

דוגמה נוספת:
1 1 1 1 1 1 1 2 2 3 4 4 8 12 23 49 = !53

בהצלחה.

מעניין אותי לדעת לאיזה קהל אני פונה או עלי לפנות ומה עלי להציג בבלוג על מנת למשוך את אותו הקהל?

זהו סקר פתוח, כל האפשרויות פתוחות לבחירתכם.

בתחילת דרכי כמתכנת שפות-עיליות ניגש אלי מישהו שתכנן לכתוב תוכנה דמויית-Cheat-Engine רק ב-C# וביקש שאצטרף, כמובן שידעתי כבר אסמבלי באותו הזמן. אחרי כמה זמן נטשנו את הפרוייקט וסביר להניח שלא נשאר ממנו זכר.

לפני זמן מה מישהו הזכיר לי את הפרוייקט והחלטתי לחזור לעבור עליו, חדש יותר, חכם יותר, מהיר יותר, יעיל יותר ולמעשה – פשוט טוב יותר.

הפרוייקט בעבר נקרא Memory Hack או בקצרה – MemHack. כעת משעברתי מ-C++ ל-C# עבור הפרוייקט הזה (לפחות חלקו) ייתכן ואקרא לו SharpHack. 🙂
עוד…

הבלוג חוזר להתעדכן. 🙂
והפעם, מספר CrackMe's ו-ReverseMe's בקובץ אחד.

אתגר האקינג:
MediaFire

ובנוסף, חידת תכנות:

היישר מהאולימפיאדה לתכנות. (תודה ל-DDgeva שפרסם והזכיר לי אותה)
כתוב תכנית שהקלט שלה הוא סדרה של תווים מן ה-abc, והפלט שלה הוא מספר תת-הסדרות (של תווים רצופים) המתחילות ב-'a', מסתיימות ב- 'b', ולא כוללות אף 'c'.
שים לב שאין הנחה מגבילה על אורך הסדרה. ייתכן ואורכה רב (למשל, 1,000,000,000), ולכן יש לקלוט את התווים אחד-אחד ולא ניתן להניח שאפשר לשמור בו-זמנית את כל הסדרה בזיכרון המחשב. הקלט יסתיים כאשר תקלט נקודה. ('.')
דוגמה: עבור הקלט dsacbsabxbxxa. יהיה הפלט 2 (התת-סדרות הן: ab, abxb).

בהצלחה.

חלק זה הוא המשך לחלק הראשון במדריך-מאמר שלי. החלקים כמעט נפרדים לחלוטין ולקרוא את האחד אינו מחייב לקרוא את האחר.
והפעם… קיים בקוד אך לא בתוכנית? איך זה ייתכן? הרי ידוע כי הקומפיילר מוסיף קוד מאחורי הקלעים, אך האם הוא באמת מוחק קוד? מה באמת קורה שם? כל זאת בטריקים לקומפיילר – חלק ב'.
עוד…