שיתוף | התוכנה הכי קטנה בעולם עכשיו גם מנגנת
-
אין אפשרות לצפצוף פחות מבהיל?

@מחנה-ידידים אני חשבתי שיהיה הרבה יותר מבהיל, אתה זוכר הצפצופים של המחשבים האנטיקים כשהודלקו?
-
כנראה את רובכם זה לא יעניין אבל היה לי קצת זמן היום אז התקדמתי עם התוכנה ששיתפתי כאן ולאלו שלא ראו אותה בזמנו - מדובר בשיטה שנקראת PE golfing ובה כותבים תוכנות קטנות ומתומצתות באסמבלי או לפעמים ממש בבינארי (יותר נכון הקסה - דצימלי)
גיליתי את זה לפני כמה ימים ומאז שיחקתי עם זה קצת ולמדתי את מגבלות הפורמט
השיטה היא כתיבת קוד מזערי ביחד עם דחיסה של הפורמט עצמו - ה PE header ממש יושב בתוך ה MZ header (בהיסט של 4 בתים בגלל ה section alignment שיוצא בדיוק ב e_lfanew) וכמובן שאין DOS stub ואז הקוד יושב על ה data directories וחלקים ממנו בשדות לא קריטיים ב PE header או ב optional header
התוכנה שפירסמתי שם הקפיצה הודעת hello world ועכשיו שידרגתי את זה שגם ינגן את התווים של mitm.top כשהם כתובים ב ASCII ומפורשים כתדר שמוכפל ב 32 (shift left של 5 ביטים)
זה מנוגן באמצעות הפונקציה Beep של kernel32 וכיוון שהיא סינכרונית זה קודם מנגן ואז פותח את ההודעה
לדעתי יכול להיות אתגר מעולה למי שמחפש ללמוד על המבנה של קבצי PE או אסמבלי x86 אתגרי
התוכנה שוקלת 268 בתים בלבד שמתוכם על 3 הייתי יכול לוותר אבל לווינדוס 11 יש מגבלה של מינימום בתים לקובץ הרצה (לעומת תוכנה מקבילה שהייתה נכתבת ב C שהייתה שוקלת כנראהכמה עשרות ק"בעריכה: הצלחתי לכתוב תוכנה כזאת ב C שיצאה לי אחרי קמפול ב GCC במשקל של 2560 בתים אם כי נראה לי שהיה אפשר להרזות אותה עוד יותר גם בקמפול תקני (גילוי נאות ג'מיני עזר לי לקמפל את זה כל כך קטן - לא היה לי זמן ללמוד את האופציות ש GCC נותן))
hello_&_beep.exeכמענה למה שכתב @אלדד-הדני-0 אני מצרף פה גרסה שלא ניתנת להנדסה לאחור בצורה רגילה בניתוח סטטי (בדקתי עם ghidra ו IDA במצב זיהוי אוטומטי) - אתגר קל למי מכאן שאוהב אתגרי RE
hello_&_beep_no_RE.exe@מתכנת-חובב מגניב..
-
@מתכנת-חובב יפה. מעניין לבנות Packager ברעיון הזה, שחלקים ממנו נמצאים בPE header וoptional header, להקשות על רוורסינג
@אלדד-הדני-0 עיין בעדכון של הפוסט לעיל
בכל אופן שים לב שאין קשר בין packer לתוכנה כזאת - זרימת הקוד בתוכנה הזאת היא רגילה לחלוטין וכל disassembler יצליח לקרוא אותה בצורה תקינה
ב packer בדרך כלל מצפינים את הנתונים של התוכנה והם נפרסים בהרצה
בכל אופן הוספתי גרסה שאי אפשר לפענח אותה סטטית בלי לעשות פעולה מסויימת (אתגר...) -
אין אפשרות לצפצוף פחות מבהיל?

@מחנה-ידידים סליחה לא התכוונתי - תאשים את הדומיין של הפורום שאותו זה מנגן

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

אם התדר היה יותר נמוך זה היה יותר טוב אבל אהבתי את הצליל
זה הזכיר לי משחק כזה שהיה לי בתור ילד - של פסים צבעוניים כאלו שמקישים עליהם עם פטיש (לא זוכר את השם של הכלי)@מתכנת-חובב כתב בשיתוף | התוכנה הכי קטנה בעולם עכשיו גם מנגנת:
זה הזכיר לי משחק כזה שהיה לי בתור ילד - של פסים צבעוניים כאלו שמקישים עליהם עם פטיש (לא זוכר את השם של הכלי)
קסילופון
-
@אלדד-הדני-0 עיין בעדכון של הפוסט לעיל
בכל אופן שים לב שאין קשר בין packer לתוכנה כזאת - זרימת הקוד בתוכנה הזאת היא רגילה לחלוטין וכל disassembler יצליח לקרוא אותה בצורה תקינה
ב packer בדרך כלל מצפינים את הנתונים של התוכנה והם נפרסים בהרצה
בכל אופן הוספתי גרסה שאי אפשר לפענח אותה סטטית בלי לעשות פעולה מסויימת (אתגר...)@מתכנת-חובב כתב בשיתוף | התוכנה הכי קטנה בעולם עכשיו גם מנגנת:
בכל אופן שים לב שאין קשר בין packer לתוכנה כזאת - זרימת הקוד בתוכנה הזאת היא רגילה לחלוטין וכל disassembler יצליח לקרוא אותה בצורה תקינה
ב packer בדרך כלל מצפינים את הנתונים של התוכנה והם נפרסים בהרצהכמובן.
רק שPACKERים מתקדמים מצפינים את שיטות ההצפנה עצמן בהידרים של הקובץ -
@מתכנת-חובב כתב בשיתוף | התוכנה הכי קטנה בעולם עכשיו גם מנגנת:
בכל אופן שים לב שאין קשר בין packer לתוכנה כזאת - זרימת הקוד בתוכנה הזאת היא רגילה לחלוטין וכל disassembler יצליח לקרוא אותה בצורה תקינה
ב packer בדרך כלל מצפינים את הנתונים של התוכנה והם נפרסים בהרצהכמובן.
רק שPACKERים מתקדמים מצפינים את שיטות ההצפנה עצמן בהידרים של הקובץ@אלדד-הדני-0 לא מכיר את השיטה אבל גם אם היא קיימת תיארת אותה בצורה מאוד חלקית - כל עוד הקוד זורם בצורה "חלקה" אין הבדל איפה מפזרים אותו אז הם יכלו להסתיר את מה שהם לא מסתירים בהדר בכל מקום אחר בקובץ
-
@אלדד-הדני-0 לא מכיר את השיטה אבל גם אם היא קיימת תיארת אותה בצורה מאוד חלקית - כל עוד הקוד זורם בצורה "חלקה" אין הבדל איפה מפזרים אותו אז הם יכלו להסתיר את מה שהם לא מסתירים בהדר בכל מקום אחר בקובץ
@מתכנת-חובב צודק, אבל כך למדתי פעם...

-
כנראה את רובכם זה לא יעניין אבל היה לי קצת זמן היום אז התקדמתי עם התוכנה ששיתפתי כאן ולאלו שלא ראו אותה בזמנו - מדובר בשיטה שנקראת PE golfing ובה כותבים תוכנות קטנות ומתומצתות באסמבלי או לפעמים ממש בבינארי (יותר נכון הקסה - דצימלי)
גיליתי את זה לפני כמה ימים ומאז שיחקתי עם זה קצת ולמדתי את מגבלות הפורמט
השיטה היא כתיבת קוד מזערי ביחד עם דחיסה של הפורמט עצמו - ה PE header ממש יושב בתוך ה MZ header (בהיסט של 4 בתים בגלל ה section alignment שיוצא בדיוק ב e_lfanew) וכמובן שאין DOS stub ואז הקוד יושב על ה data directories וחלקים ממנו בשדות לא קריטיים ב PE header או ב optional header
התוכנה שפירסמתי שם הקפיצה הודעת hello world ועכשיו שידרגתי את זה שגם ינגן את התווים של mitm.top כשהם כתובים ב ASCII ומפורשים כתדר שמוכפל ב 32 (shift left של 5 ביטים)
זה מנוגן באמצעות הפונקציה Beep של kernel32 וכיוון שהיא סינכרונית זה קודם מנגן ואז פותח את ההודעה
לדעתי יכול להיות אתגר מעולה למי שמחפש ללמוד על המבנה של קבצי PE או אסמבלי x86 אתגרי
התוכנה שוקלת 268 בתים בלבד שמתוכם על 3 הייתי יכול לוותר אבל לווינדוס 11 יש מגבלה של מינימום בתים לקובץ הרצה (לעומת תוכנה מקבילה שהייתה נכתבת ב C שהייתה שוקלת כנראהכמה עשרות ק"בעריכה: הצלחתי לכתוב תוכנה כזאת ב C שיצאה לי אחרי קמפול ב GCC במשקל של 2560 בתים אם כי נראה לי שהיה אפשר להרזות אותה עוד יותר גם בקמפול תקני (גילוי נאות ג'מיני עזר לי לקמפל את זה כל כך קטן - לא היה לי זמן ללמוד את האופציות ש GCC נותן))
hello_&_beep.exeכמענה למה שכתב @אלדד-הדני-0 אני מצרף פה גרסה שלא ניתנת להנדסה לאחור בצורה רגילה בניתוח סטטי (בדקתי עם ghidra ו IDA במצב זיהוי אוטומטי) - אתגר קל למי מכאן שאוהב אתגרי RE
hello_&_beep_no_RE.exe@מתכנת-חובב נשמח לקבל את הבינארי
מתעניין, אפשר גם לעשות וירוס כזה קטן?
נניח שיפתח חלונות ללא סוף או ירעיש בצורה קיצונית ללא אפשרות סגירה?וגם מאוד מעניין האם אפשר לעשות עם זה משהו יעיל?
תוכנות שעושות דברים מועילים!
אה ועדיין קטנות -
@מתכנת-חובב אתה מקצוען!!
מטורף!!! -
@מתכנת-חובב נשמח לקבל את הבינארי
מתעניין, אפשר גם לעשות וירוס כזה קטן?
נניח שיפתח חלונות ללא סוף או ירעיש בצורה קיצונית ללא אפשרות סגירה?וגם מאוד מעניין האם אפשר לעשות עם זה משהו יעיל?
תוכנות שעושות דברים מועילים!
אה ועדיין קטנות@אביגדור-ברמן כתב בשיתוף | התוכנה הכי קטנה בעולם עכשיו גם מנגנת:
אפשר גם לעשות וירוס כזה קטן?
בגדול כל דבר אפשר לעשות קטן, כיוון שהקומפיילרים המצויים דוחפים כמויות קוד אבטחה וקוד שאינו נצרך לקובץ ההרצה, אבל זה עבודה פי עשר או עשרים מתיכנות LOW LEVEL רגיל, אז השאלה מה שווה את מה
זאת אומרת, אם אתה מתמחה ברוורסינג ויודע אסמבלי תוכל אולי לעשות דברים נחמדים, בעיקר לצורך למידה או לשם השעשוע (כמו הרעיונות שהצעת), אבל וירוסים ותוכנות אמיתיות שצריכות קוד גדול קריא שאפשר לתחזק אותו בקלות - זו לא הדרך...נ.ב. אם אם אתה צריך קוד קטן ממש, תשקול תכנות בRUST, אחד הדברים המיוחדים בקומפיילר שלו שהוא יודע להשמיט את הפונקציות שלא ממומשות בקוד, כך שאם אתה למשל משתמש בספרית VECTOR זה לא יקמפל לך את כל הפונקציות והווריאציות והווריאי-ווריאציות של VECTOR, נניח..., וכשזה מקומפל עם STRIP ועם SIZE-OPTIMIZED זה בכלל מגיע להישגים יפים מאוד
-
@מתכנת-חובב נשמח לקבל את הבינארי
מתעניין, אפשר גם לעשות וירוס כזה קטן?
נניח שיפתח חלונות ללא סוף או ירעיש בצורה קיצונית ללא אפשרות סגירה?וגם מאוד מעניין האם אפשר לעשות עם זה משהו יעיל?
תוכנות שעושות דברים מועילים!
אה ועדיין קטנות@אביגדור-ברמן את הבינארי צירפתי בפוסט הראשי
אפשר לכתוב ככה כל וירוס או תוכנה רק שזה יהיה מאוד מורכב לכתוב ככה תוכנות מורכבות
וירוס מהסוג שתיארת זה אפילו ממש פשוט ולוקח רק כמה עשרות בייטים
עקרונית אין יתרון בשיטה הזאת מעבר להוכחת יכולת ויישום אתגרי
