שְׁאֵלָה:
כיצד אוכל למנוע ניתוק ניפוי חסינות / OllyDbg מפני שבירה?
Polynomial
2013-04-12 14:40:40 UTC
view on stackexchange narkive permalink

כשאני מצרף את OllyDbg או ImmunityDebugger לתהליך, זה מפסיק את הביצוע באופן אוטומטי. אני מתחבר לשירות במצב משתמש הפועל כ- SYSTEM וצריך רק לתפוס חריגים, כך שזה לא אידיאלי. האם יש דרך להשבית את התנהגות break-on-attach?

אתה רוצה לצרף את הבאגים לתוכנית ומיד לבצע 'המשך', האם זה נכון?
די הרבה. אני מעדיף להימנע לחלוטין מנקודת השבר. אני רק רוצה שניתוק הבאגים יישבר אם מתרחש חריג.
@Polynomial האם גם טכניקות נגד ניפוי באגים יהיו אופציה?
@DenisLaskov אפשרות? אני לא בטוח שאני עוקב.
@Polynomial ובכן, האנגלית שלי רחוקה מלהיות אידיאלית :) תן לי לבטא מחדש: אתה מחפש דרך להגן על בינארי מפני יירוט, או דרך להסתכל לבינארי בזמן שהוא מבוצע, ללא טכניקה של פריצה על הצמד?
@0xC0000022L אני ניפוי באגים בשירות מצב משתמש הפועל כ- 'SYSTEM' ב- Windows. כמו כן, מתן הצבעה למטה לאי-בהירות כזו נראה מעט קשה.
@Polynomial: אהה, למה זה קשה? א.) יכולתי פשוט להצביע למטה ולא להגיד לך מדוע, כך שלעולם לא היית יודע ב.) הצבעות מטה על שאלות משפיעות על נציגך (נכון) אך לא על שלי (כך שגם אם בדקת כל נציג כולם לא יכולת תגיד מי הצביע למטה) ג.) אתה יכול פשוט לערוך את השאלה שלך כדי להיות פחות דו-משמעית ואני אחזור בשמחה מההצבעה שלי - זה עשוי אפילו להסתיים כהצבעה. אחרון חביב, אני עומד לצד ההצבעה למטה והסיבה לכך. הצבעות מטה על תשובות משפיעות על שתיהן (-1 למצביע, -2 למענה על אנשים), btw. אבל בדוק את הפרופיל שלי שאני מצביע עליו גם עונה;)
@0xC0000022L בסדר. תוקן.
@Polynomial: ditto;)
שְׁלוֹשָׁה תשובות:
waliedassar
2013-04-12 22:28:30 UTC
view on stackexchange narkive permalink

הסבר

ההפסקה בנספח נובעת מהפונקציות ntdll DbgUiRemoteBreakin ו- DbgBreakPoint . אם תבדוק את הפונקציה kernel32 DebugActiveProcess שנקראה על ידי הבאגים, OllyDbg או ImmunityDebugger, תראה שיחה לפונקציה CreateRemoteThread , CreateRemoteThreadEx פונקציה , או ZwCreateThreadEx תלוי במערכת ההפעלה שלך.

אז אני מניח שדרך אחת לעקוף שבירה היא:

  1. ניפוי באגים ניפוי באגים עצמו
  2. עבור לפונקציה DbgUiIssueRemoteBreakin ואתר את השיחה לפונקציה היוצרת את השרשור המרוחק.
  3. שנה את lpStartAddress פרמטר במקרה של CreateRemoteThread / CreateRemoteThreadEx to DbgBreakPoint +1 RETN 0xC3

תוסף

יצרתי OllyDbg v1.10 תוסף אשר NOP הוא ה- INT3 ב- DbgBreakPoint בתהליך עם ה- PID שתבחר. זה נבדק רק ב- Windows 7.

שימוש

הצב את SilentAttach.dll בספריה OllyDbg, פטר את OllyDbg, לחץ על Alt + F12 , ואז הזן את מזהה התהליך של התהליך שאליו אתה רוצה לצרף בשקט.

NBS מכיוון שלא מתרחשת הפסקה, OllyDbg לא מוציאה מידע רב. לְמָשָׁל רשימת המודולים הטעונים. אז אתה צריך להפעיל את ההקשר על ידי משהו כמו Alt + E ואז Alt+C

זה כנראה הפיתרון הטוב ביותר מכיוון שהוא לא מתעסק עם DbgBreakPoint. פשוט NOP את השיחה ל- DbgBreakPoint ב- DbgUiRemoteBreakin בתהליך שאליו אתה רוצה לצרף.
הקישור לתוסף מת, יש סיכוי להשיג אותו?
peter ferrie
2013-04-12 20:08:18 UTC
view on stackexchange narkive permalink

אחת הדרכים לעשות זאת היא לקבל תוסף OllyDbg המבצע

WriteProcessMemory (hDebuggee, GetProcAddress (GetModuleHandle ("ntdll"), "DbgBreakPoint"), &mynop, 1 , NULL)

כאשר hDebuggee הוא הידית לתהליך ניפוי באגים (אני מאמין של- OllyDbg יש ממשק API לאחזור ערך זה), ו- mynop הוא משתנה המחזיק בתים 0x90 (nop ההוראה).

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

אני לוקח את זה בחזרה. זה היה החיידק המקפיא של OllyDbg. זה עובד כמתוכנן. כנראה הקלה ביותר ליישום!
Peter Andersson
2013-04-12 18:18:32 UTC
view on stackexchange narkive permalink

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

לא אימתתי, אבל אני מניח שאולדיבג קוראת ל DebugActiveProcess על מנת להיצמד אליו. בתיעוד עבורו נאמר:

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

ובהמשך

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

באגר. אני מניח שניקוי באגים מקומיים בגרעינים ב- Windows לא עובד באותה צורה?


שאלה ותשובה זו תורגמה אוטומטית מהשפה האנגלית.התוכן המקורי זמין ב- stackexchange, ואנו מודים לו על רישיון cc by-sa 3.0 עליו הוא מופץ.
Loading...