שְׁאֵלָה:
שינוי שם חלונות על ידי תיקון ליצור שיחת פונקציית חלון
notvita
2017-12-15 16:09:57 UTC
view on stackexchange narkive permalink

אני משתמש ב- x64dbg וב- IDA Pro התהליך הוא 32 ביט. אני לא בטוח אם אני עושה את זה נכון או לא בגלל שאני מקבל התרסקות, ואני לא בטוח אם זה נגרם מכך שאני עושה משהו לא בסדר או שתהליך ההפעלה של היישום נכשל משום מה בגלל שהוא יכול ' t למצוא את החלון.

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

כך נראית הביצוע כאשר ה- bp נפגע:

code

איפה אתה רואה את המחרוזת "כותרת אולי" במקור הכיל את מה שהיה כותרת החלונות, אז אני מניח שזה המיקום שאני צריך לשנות. כאשר שינוי בכתובת זו הוא כאשר אני מקבל את השגיאה.

סליחה על כל בורות, אני חדש בזה ומתאמן. תודה.

עריכה: עבדתי על זה קצת יותר והכנתי תוכנית דמה שתעזור לי להבין מה קורה. אז הפונקציה CreateWindowExA ביישום זה השתמשה באותו מצביע עבור ארגומנטים lpClassName ו- lpWindowName . אז תיקון התוכנית כדי לדחוף רק מחרוזת במקום המצביע הזה השיג בהצלחה את מה שכוונתי אליו.

האם אתה משנה את המצביע או את הבתים שהוא מצביע עליהם? מה הגודל בבייטים של כותרת החלון המקורית?
אני משנה את הבייטים אליו הוא מצביע ושומר אותו עם מחרוזת באותו אורך אם זה נחשב למשהו. אני מאמין שהכותרת המקורית היא מחרוזת של 10 תווים, כולל '0 /' (אם אני צריך לכלול אותו?) אלא אם כן אני מניח שזו תו רחב. לא בדיוק בטוח איך הייתי מאשר זאת אם כי מצטער
הסתכל https://msdn.microsoft.com/en-us/library/windows/desktop/ms632680(v=vs.85).aspx כדי לראות אם אתה משנה את הפרמטר הנכון. אין צורך לנחש איזה פרמטר הוא שם החלון כאשר הוא מתועד.
תודה. ניסיתי אבל אני קצת מבולבל לגבי הדברים. איפה הקו הוא נשבר, אבל זה בעיניי לא נראה כמו פונקציה. האם כל ההוראות האלה שמובילות אל `user32.76F8AA9C 'להתקשר למטה הן הפרולוג הפונקציות ואז השיחה בפועל הפונקציה שמכונה? זו סוג של מסקנה אליה הגעתי וכל `dword ptr ss` דוחף מעל` להתקשר למשתמש 32.76F8AA9C` בהיותם פרמטרי הפונקציות?
כן, כמו ב- stdcall יש לנו את הפרמטרים בערימה אתה יכול פשוט לבדוק / ​​לשנות אותם בתצוגת ערימת ניפוי הבאגים. מה שאתה רואה כאן הוא פונקציות אשר איכשהו עובדות כממשק כדי לקרוא לפונקציונליות העיקרית.
שְׁלוֹשָׁה תשובות:
barnaby-b
2017-12-18 23:57:01 UTC
view on stackexchange narkive permalink

טיפ: התקן את xAnalyzer עבור x64dbg, שיעזור לך במאמצי ההיפוך שלך.

כעת אתה נמצא בפונקציה user32.dll CreateWindowExA . לא הייתי משנה שם את הפרמטר הזה, אלא מחוץ בקוד המשתמש (הכירו את המוסכמה stdcall , מה זה WinApi משתמש). הפרמטר שאליו אתה יורה הוא שלוש לחיצות מעל להתקשר CreateWindowExA בקוד המשתמש. או שנה את המצביע או את התוכן שמתחתיו ואל תשכח לסיים את האפס.

פונקציית ליבה? בתור התחלה זו לא פונקציה ב kernel32.dll ויתרה מכך רק בגלל ש- DLL יש "גרעין" בשמו לא הופך את הפונקציה לפונקציית ליבה.
@0xC0000022L אתה צודק לחלוטין. השעה הייתה מאוחרת ופשוט הקלדתי תשובה מהירה. כמובן ש- CreateWindow לא עובר דרך מערכת sysenter, פשוט ראיתי שהוא נמצא בתוך dll וקראתי לזה פונקציית ליבה מכל סיבה שהיא. (ערך את השאלה)
Graham Best
2017-12-15 21:14:16 UTC
view on stackexchange narkive permalink

הוק את זה, ואז הגדר את הפרמטר lpWindowName ל "your name here" (אין הבטחות שזה יעבוד) או נקודת הפסקה ב- mov edx, dword ptr ss : [EBP + C] , ואז תפס את ה- EBP מ- FPU (תיבת הרישומים), היכנס לתוכנית כמו ReClass והגדר את EBP + 0xC (שם החלון) לכל שם שאתה שם רוצה (90% בטוח שזה יעבוד). הפניות: https://stackoverflow.com/questions/873658/how-can-i-hook-windows-functions-in-cc https://www.youtube.com/watch ? v = K_jj6yF5ac0

notvita
2017-12-20 04:20:40 UTC
view on stackexchange narkive permalink

תודה על התגובות חבר'ה. הצלחתי להשיג את המטרה שלי המפורטת בעריכת OP:

הפונקציה CreateWindowExA ביישום זה השתמשה באותו מצביע עבור lpClassName ו- lpWindowName טוען. אז תיקון התוכנית כדי לדחוף רק מחרוזת במקום המצביע עבור lpWindowName השיג בהצלחה את מה שכיוונתי אליו. אני מאמין ששינוי ה- lpClassName גרם לקריסה שתיארתי ב- OP.



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