ברוכים הבאים לאתר תחרויות קודגורו! › פורומים › אקסטרים › שאלות על הזומבי של תחרות 9.5
- This topic has 13 תגובות, 3 משתתפים, and was last updated לפני 10 שנים, 5 חודשים by ddt.
-
מאתתגובות
-
1 ביוני 2014 בשעה 10:48 #80346ddtמשתתף
) הפקודה הראשונה של גוף הזומבי היא mov si,0x95a0 – למה הוא שומר ב SI את הערך 0x95a0?
2) לאיפה קופצת הפקודה jnc 0x1c?
1C זה 28 – לפי מה שרואים אז JNC קופץ לשורה 00000028 FD std שהיא נמצאת באמצע עותק אחר של הזומבי (השלישי)?
3) מה עושה הפקודה or al,0x90?
4) למה משתמשים ב STD?
5) למה משתמשים ב LODSW השני?4 ביוני 2014 בשעה 03:08 #80830cgxמנחהשאלות טובות. אתן רק רמז אחד ואשאיר לאחרים לנסות. הזומבי קופץ לאמצע פקודה (למה?) של עצמו
5 ביוני 2014 בשעה 11:33 #81129ddtמשתתףיש לי עוד שאלה ממש חשובה
הבנתי מהקריאה בפורום שלא הייתה הגנה מספיק טובה על הזומבים מפני הגנה חכמה.
לא הצלחתי למצוא ב DIS ASSEMBLY את הערך המדויק שאותו לקחו כדי להפציץ חכם את הזומבי.הנה ה DIS:
00000000 EB10 jmp short 0x12
00000002 BEA095 mov si,0x95a0
00000005 93 xchg ax,bx
00000006 FC cld
00000007 AD lodsw
00000008 FD std
00000009 39D8 cmp ax,bx
0000000B 73FF jnc 0xc
0000000D 0C90 or al,0x90
0000000F AD lodsw
00000010 E2F4 loop 0x6
00000012 BEA095 mov si,0x95a0
00000015 93 xchg ax,bx
00000016 FC cld
00000017 AD lodsw
00000018 FD std
00000019 39D8 cmp ax,bx
0000001B 73FF jnc 0x1c
0000001D 0C90 or al,0x90
0000001F AD lodsw
00000020 E2F4 loop 0x16
00000022 BEA095 mov si,0x95a0
00000025 93 xchg ax,bx
00000026 FC cld
00000027 AD lodsw
00000028 FD std
00000029 39D8 cmp ax,bx
0000002B 73FF jnc 0x2c
0000002D 0C90 or al,0x90
0000002F AD lodsw
00000030 E2F4 loop 0x26
איזה רצף הוא ייחודי בחיבור בין שלושת העותקים שלו כדי שאפשר היה להפציץ את החלק האמצעי האמיתי של הזומבי?
אני מחפש ממש את הערך ב HEX כדי לראות למה זה לא פגיע.גם במקום אחר בפורום שהיתה קבוצה שהראית איך הם משתלטים על הזומבי מהתחרות הזאת אין בכלל ערכים של HEX שמופיעים ב DIS של השורד.
6 ביוני 2014 בשעה 14:16 #81168Idan Dorמשתתף<p style="text-align: right;">אני יענה על השאלות באנגלית לשם נוחות:</p>
<p style="text-align: left;">The reason that the zombie loads the address 0x95a0 into si, is that the command "lodsw" loads from location [si] into ax, the location si is pointing to is the "talking location" that the survivors and the zombie talk in.</p>
The answer to the next two questions is connected. The opcode "jnc 0x1c" jumps into itself, the location 0x1c in the zombie isnt 00028 like you said but its in 000001c which is in the middle of the jnc command, after the jumping the game engine see's the hex values of "0xff0c90" which he translates into "dec word [si]" and "nop". the reason for the "or al,0x90" command existence is for the zombie to hide the fact that it's running the command dec word [si], the reason that the 0x90 is there is to make sure it doesnt look suspicious that because 0x90 = nop, a commmand that does nothing.The command lodsw also after loading the information into ax does "add si, 2", so to change si back to the original location the zombie must do "sub si, 2", instead of doing that the zombie can also do the commands "std" and "lodsw", the command std (Set Direction Flag) makes commands like lodsw "mov backwards" instead of adding 2 to si everytime, lodsw will do sub si, 2 after running, of course afterwards a cld (Clear Direction Flag) is needed to make sure lodsw will move in the right direction again. Basically the by doing the commands "lodsw …. std lodsw cld" is loading information into ax, then changing the si back to what it was. (Of course its not efficient because a simple "sub si, 0x2" could have been used but never mind)
The zombie code is copied 3 times in so that every part is written 3 times and therefore cant be smart bombed, BUT oded didn't do it correctly, here is an example:
Lets say the code of the program is 1234567890. Now if we copy the code 3 times it will look like this: 1234567890 1234567890 1234567890
it might look like its protected but if we use std (Set Direction Flag) the int 0x87 will run backwards on the end of the code and the beginning of the next copy (for example 9012) we will see that its not protected. As I already published in the forum, in the zombie the unprotected bytes are: 0xE2F4BEA0
Which is the end of the second copy and the beginning of the third one. (Important to remember to use std before the int 0x87 to make sure to hit the part between the second and third copies and not the first and the second)
<p style="text-align: right;">הסברתי את זה באנגלית כי זה יותר נוח מאשר לעבור שפה כל פעם אז אם משהו לא היה ברור תשאל ואני ישמח לענות.</p>8 ביוני 2014 בשעה 12:56 #81428ddtמשתתףתודה על ההסברים המפורטים שלך בכל השרשורים וגם תודה באותה הזדמנות ל CGX.
רק כדי לוודא – ההתקפה החכמה תעבוד גם אם נתקיף מלמטה נכון? מה האותיות המדויקות שאיתן נצליח להתקיף את הזומבי מהכיוון השני?
ואיך היינו מתקנים את הזומבי הזה כדי שלא תהיה אפשרות להתקין משני הכיוונים?
8 ביוני 2014 בשעה 13:21 #81447ddtמשתתףואיפה אתה בכלל רואה שיש ב DISASSEMBLY את הפקודה של sub si, 2?
- התגובה הזו עודכנה לפני לפני 10 שנים, 5 חודשים ע"י ddt.
8 ביוני 2014 בשעה 16:21 #81472Idan Dorמשתתף<p style="text-align: right;"> אוקיי לגבי השאלה הראשונה שלך עניתי למעלה על זה חלק של הקוד צריך להתקיף (צריך לשים לב שזה נמצא בחלק המשתוף לשני עותקים כדי שהטריק יעבוד) בכל מקרה בזומבים האלו חייבים להתקיף מלמטה אחרת פוגעים בקוד שרץ מהר מידי לפני שאפשר להכין את התקיפה והקוד הזה לא רץ שוב אז אין דרך לפגוע בו.</p>
<p style="text-align: right;">לגבי השאלה איך לתקן את הבעיה – בתור אחד שקרא את כמעט כל מנצחי העבר מכל התחרויות אני יכול לחשוב רק על שורד בודד שהיה מוגן לחלוטין מהפצצה חכמה וגם אותו אפשר להרוג עם עושים את זה נכון, אני ישאיר לך את זה בתור חידה למצוא את מה שהכי יגן עליך (אי אפשר גם להכין שורד טוב וגם שהוא יהיה מוגן בצורה מושלמת מהפצצה חכמה, אפשר לעומת זאת לעשות שינויים מסוימים בין השלבים כדי להגן עליו מהפצצה חכמה מהמשתתפים באותו יום), בהצלחה עם להבין איך להתגונן הכי טוב.</p>
<p style="text-align: right;">בכל מקרה לגבי איפה רשום- sub si, 2</p>
<p style="text-align: right;">התשובה היא לא רשום, או יותר יכול לא באמת רשום. ההגדרה של פקודת lodsw היא:</p>
<p style="text-align: left;">mov ax, [word si]</p>
<p style="text-align: left;">if (Direction Flag)</p>
<p style="text-align: left;"> sub si, 2</p>
<p style="text-align: left;">else</p>
<p style="text-align: left;"> add si, 2</p>
<p style="text-align: right;">זה לא רשום איפהשהו זה פשוט מה שהפקודה עושה.</p>9 ביוני 2014 בשעה 09:46 #81496ddtמשתתףאז רק כדי לוודא – יש רק מקום אחד שבו הזומבים פגיעים להתקפה חכמה?
מה זאת אומרת שהקוד לא רץ שוב?
אולי זה יסביר לי משהו כי נראה שהקוד של הזומבי (האמצעי) נמצא בלולאה כי יש שם loop 0x16 אבל כשאני מריץ אותו בלי שורדים אחרים (רק עם שורד שלא עושה כלום ולא מנסה לפגוע בו) הוא מת מהר מאוד (תמיד בסיבוב 17) ואני עדיין מנסה לראות עם דיבאגר למה הוא מת ככה אחרי כל כך קצת סיבובים.עוד שאלה – אבל אם אין לולאה אז דווקא הכי מסתדר היה לנסות להתקיף אותו כמה שיותר מהר מלמעלה לפני שהוא יספיק למות?
אם אתה מתקיף אותו מלמטה כמה סיבובים זה לוקח לך? האם אתה מספיק להשתלט עליו לפני שהוא מת בסיבוב ה 17?9 ביוני 2014 בשעה 10:27 #81498Idan Dorמשתתף<p style="text-align: right;">אני לא יודע באיזה זומבים אתה משתמש אבל הם לא מתים באופקוד ה 17 כשאין שום שורדים שיהרגו אותם, תבדוק את הגרסא שאתה משתמש בה לזומבים.</p>
<p style="text-align: right;">כשאני אומר שהקוד לא רץ שוב אני מתכוון שהוא מריץ כמה דברים להיתחול ואז נכנס ללולאה, מה שאומר שהוא לא מריץ את חלקי האיתחול שוב והוא מריץ את החלק הזה יותר מהר ממהשאתה יכול לעשות 87 אז אי אפשר להשתלט עליהם דרך החיבור של של השכפולים הראשון והשני, לעומת זאת מכיוון שהזומבי נכנס ללולאה אז אפשר לפגוע בסוף הלולאה בעזרת ה 87 ובכך להשתלט עליו.</p>
<p style="text-align: right;">וכפי שאמרתי יש לולאה והוא לא מת באופקוד ה 17.</p>9 ביוני 2014 בשעה 11:48 #81500ddtמשתתףואוו אתה צודק… מרוב ששיחקתי עם כל מיני שורדים וזומבים משנים קודמות לא שמתי לב שאני רץ עם זומבים לא של תחרות 9.5…. איזה בושות…
אתה מתכוון בלפגוע בסוף הלולאה שהוא יעשה את האתחול, יריץ פעם אחת ללולאה ואז יגיע לחלק של הפקודות שהחלפתי בהפצצה החכמה שזה היה החיבור בין העותק הראשון לשני – נכון?
אתה ממש עוזר לי להבין את כל מה שלא ברור ויכול להיות שעוד יומיים לא הייתי שם לב שהזומבים הם של תחרות אחרת – זה באמת לא הסתדר לי כי אני רואה לולאה
9 ביוני 2014 בשעה 12:13 #81501ddtמשתתףבכל מקרה אני מנסה סתם לגרום לזומבים האלו למות ולא מצליח.
הבסיס של ההתקפה החכמה שלי הוא:
mov ax, 0E2F4h
mov dx, 0BEA0h
mov cx, 0cccch
mov bx,cx
STD
Int 87h
ניסיתי לשחק עם הכיוון כדי להבין את מה שהסתברת ועם שני הכיוונים זה לא מתקיף את החיבור בין העותקים של הזומבים9 ביוני 2014 בשעה 13:34 #81503Idan Dorמשתתף<p style="text-align: right;">לגבי איפה ההפצצה, תסתכל על הקוד שלו ככה:</p>
<p style="text-align: right;">קפיצה</p>
<p style="text-align: right;">קוד שלא רץ אף פעם</p>
<p style="text-align: right;">קוד איתחול</p>
<p style="text-align: right;">לולאה</p>
<p style="text-align: right;">קוד שלא רץ אף פעם</p>
<p style="text-align: right;"></p>
<p style="text-align: right;">אתה רוצה לפגוע בהפצצה החכמה בקוד שהלולאה והקוד שלא רץ אף פעם חולקים, זה שישה בתים שמתוכם אתה בוחר ארבע לפגוע בהם.</p>
<p style="text-align: right;"></p>
<p style="text-align: right;">לגבי למה אתה לא מצליח להרוג את הזומבים- אתנ צריך לזכור שהמנוע רושם את</p>
<p style="text-align: right;">0x1234</p>
<p style="text-align: right;">בתור</p>
<p style="text-align: right;">0x3412</p>
<p style="text-align: right;">כאשר כותבים על הזירה ולכן במקום:</p>
<p style="text-align: right;"><span style="color: #656565; font-family: Montserrat, sans-serif; font-size: 12px; line-height: 18px; background-color: #fbfbfb;">mov ax, 0E2F4h</span><br style="color: #656565; font-family: Montserrat, sans-serif; font-size: 12px; line-height: 18px; background-color: #fbfbfb;" /><span style="color: #656565; font-family: Montserrat, sans-serif; font-size: 12px; line-height: 18px; background-color: #fbfbfb;">mov dx, 0BEA0h</span></p>
<p style="text-align: right;">צריך להיות לך:</p>
<p style="text-align: right;"><span style="color: #656565; font-family: Montserrat, sans-serif; font-size: 12px; line-height: 18px; background-color: #fbfbfb;">mov ax, 0F4E2h</span><br style="color: #656565; font-family: Montserrat, sans-serif; font-size: 12px; line-height: 18px; background-color: #fbfbfb;" /><span style="color: #656565; font-family: Montserrat, sans-serif; font-size: 12px; line-height: 18px; background-color: #fbfbfb;">mov dx, 0A0BEh</span></p>
<p style="text-align: right;">ואז זה יעבוד לך.</p>
<p style="text-align: right;"></p>9 ביוני 2014 בשעה 18:24 #81530ddtמשתתףזה באמת עבד לי!!!!
9 ביוני 2014 בשעה 18:24 #81531ddtמשתתףתודה!!!!
-
מאתתגובות
- יש להתחבר למערכת על מנת להגיב.