יום רביעי, 8 בדצמבר 2010

WireTapping Windows

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

כיום למרבית האנשים יש מיקרופון שנמצא במחשב אם במחשב נייד מובנה או במחשב נייח שמבצע שיחות ב Skype או דרך Voip.

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

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

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

Winmm.Dll
זאת המחלקה האחראית על האודיו של מערכת ההפעלה.

דבר ראשון הצהרה על פונקציה חיצונית - External Function

 [DllImport("winmm.dll", EntryPoint = "mciSendStringA", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]


private static extern int mciSendString(string lpstrCommand, string lpstrReturnString, int uReturnLength, int hwndCallback);
 
מחלקה זאת מקבלת פקודות כ String וע"פ מה שנשלח היא עובדת.
 
נבנה לנו 2 פונקציות הראשונה מבצעת את ההקלטה והשנייה עוצרת אותה ויוצרת ממנה קובץ:
 
public void record_voice()
{
mciSendString("open new Type waveaudio Alias recsound", "", 0, 0);
mciSendString("record recsound", "", 0, 0);
}

public void savefile()
{
mciSendString("save recsound c:\\record.wav", "", 0, 0);
mciSendString("close recsound ", "", 0, 0);
}
*הסימון באדום מסמן את הפקודה שנשלחת כ String.

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

ניתן להוריד את הפרויקט לדוגמה:

תגובה 1:

  1. תודה, עזר לי מאוד כדי להקליט משהו דרך המיקרופון.
    חיפשתי המון כדי להבין איך אפשר לגשת למיקרופון ב־C#‎.

    השבמחק