Desktop RE Writeup: PE Extraction & Patching
מאת שי מרדכי | 29 בפברואר 2024
1. חילוץ קובץ ההרצה (PE Carving)
במבט ראשוני על קובץ ה-PDF שסופק באתגר, התגלה תוכן חריג. באמצעות עורך הקסדצימלי (Hex Editor), זיהיתי חתימת התחלה מוכרת של פורמט PE (ערך הקסדצימלי 4D 5A או MZ). מנקודה זו ועד סוף הקובץ, היה מונח קובץ הרצה שהוסתר בתוך ה-PDF. חילצתי את הבלוק כולו ושמרתי אותו כקובץ עצמאי (new-flag.exe).
2. אנליזה סטטית ו-Binary Patching ב-IDA
בטעינת הקובץ ל-IDA Pro, איתרתי את פונקציית הבדיקה המרכזית האחראית על אימות הסיסמה. הלוגיקה דרשה שסכום ערכי ה-ASCII של הסיסמה שהוזנה, לאחר פעולת AND 0xFF, יהיה שווה ל-10 (0Ah).
.text:00291C12 and eax, 0FFh
.text:00291C17 mov [ebp+var_20], eax
.text:00291C1A cmp [ebp+var_20], 0Ah
.text:00291C1E jnz short loc_291C95
במקום לנחש או לכתוב סקריפט ליצירת סיסמה תואמת, בחרתי לעקוף את המנעול לחלוטין (Binary Patching). דרסתי את הפקודה and eax, 0FFh לפקודת mov eax, 0Ah, מה שמבטיח שהבדיקה תעבור בהצלחה עבור כל קלט שיוזן. לאחר מכן השתמשתי ב-Apply patches to input file כדי לייצר את הקובץ הפרוץ.
3. שחזור אלגוריתם ה-XOR (Decompilation)
הקוד כלל גם לולאת הצפנה פנימית שמבוססת על XOR. המערך המוצפן פוענח כך שאלמנטים באינדקסים זוגיים עברו XOR עם 0xA ואלמנטים אי-זוגיים עברו XOR עם 0xB. שחזרתי את האלגוריתם לקוד C++ נקי כדי לאמת את ה-Control Flow הסופי.