שאלות על הזומבי של תחרות 9.5

עמוד

ברוכים הבאים לאתר תחרויות קודגורו! פורומים אקסטרים שאלות על הזומבי של תחרות 9.5

מוצגות 14 תגובות – 1 עד 14 (מתוך 14 סה״כ)
  • מאת
    תגובות
  • #80346
    ddt
    משתתף

    ) הפקודה הראשונה של גוף הזומבי היא mov si,0x95a0 – למה הוא שומר ב SI את הערך 0x95a0?
    2) לאיפה קופצת הפקודה jnc 0x1c?
    1C זה 28 – לפי מה שרואים אז JNC קופץ לשורה 00000028 FD std שהיא נמצאת באמצע עותק אחר של הזומבי (השלישי)?
    3) מה עושה הפקודה or al,0x90?
    4) למה משתמשים ב STD?
    5) למה משתמשים ב LODSW השני?

    #80830
    cgx
    מנחה

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

    #81129
    ddt
    משתתף

    יש לי עוד שאלה ממש חשובה
    הבנתי מהקריאה בפורום שלא הייתה הגנה מספיק טובה על הזומבים מפני הגנה חכמה.
    לא הצלחתי למצוא ב 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 של השורד.

     

     

    #81168
    Idan 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>

    #81428
    ddt
    משתתף

    תודה על ההסברים המפורטים שלך בכל השרשורים וגם תודה באותה הזדמנות ל CGX.

    רק כדי לוודא – ההתקפה החכמה תעבוד גם אם נתקיף מלמטה נכון? מה האותיות המדויקות שאיתן נצליח להתקיף את הזומבי מהכיוון השני?

    ואיך היינו מתקנים את הזומבי הזה כדי שלא תהיה אפשרות להתקין משני הכיוונים?

    #81447
    ddt
    משתתף

    ואיפה אתה בכלל רואה שיש ב DISASSEMBLY את הפקודה של sub si, 2?

    • התגובה הזו עודכנה לפני לפני 9 שנים, 9 חודשים ע"י ddt.
    #81472
    Idan 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>

    #81496
    ddt
    משתתף

    אז רק כדי לוודא – יש רק מקום אחד שבו הזומבים פגיעים להתקפה חכמה?

    מה זאת אומרת שהקוד לא רץ שוב?
    אולי זה יסביר לי משהו כי נראה שהקוד של הזומבי (האמצעי) נמצא בלולאה  כי יש שם loop 0x16 אבל כשאני מריץ אותו בלי שורדים אחרים (רק עם שורד שלא עושה כלום ולא מנסה לפגוע בו) הוא מת מהר מאוד (תמיד בסיבוב 17) ואני עדיין מנסה לראות עם דיבאגר למה הוא מת ככה אחרי כל כך קצת סיבובים.

    עוד שאלה – אבל אם אין לולאה אז דווקא הכי מסתדר היה לנסות להתקיף אותו כמה שיותר מהר מלמעלה לפני שהוא יספיק למות?
    אם אתה מתקיף אותו מלמטה כמה סיבובים זה לוקח לך? האם אתה מספיק להשתלט עליו לפני שהוא מת בסיבוב ה 17?

    #81498
    Idan Dor
    משתתף

    <p style="text-align: right;">אני לא יודע באיזה זומבים אתה משתמש אבל הם לא מתים באופקוד ה 17 כשאין שום שורדים שיהרגו אותם, תבדוק את הגרסא שאתה משתמש בה לזומבים.</p>
    <p style="text-align: right;">כשאני אומר שהקוד לא רץ שוב אני מתכוון שהוא מריץ כמה דברים להיתחול ואז נכנס ללולאה, מה שאומר שהוא לא מריץ את חלקי האיתחול שוב והוא מריץ את החלק הזה יותר מהר ממהשאתה יכול לעשות 87 אז אי אפשר להשתלט עליהם דרך החיבור של של השכפולים הראשון והשני, לעומת זאת מכיוון שהזומבי נכנס ללולאה אז אפשר לפגוע בסוף הלולאה בעזרת ה 87 ובכך להשתלט עליו.</p>
    <p style="text-align: right;">וכפי שאמרתי יש לולאה והוא לא מת באופקוד ה 17.</p>

    #81500
    ddt
    משתתף

    ואוו אתה צודק… מרוב ששיחקתי עם כל מיני שורדים וזומבים משנים קודמות לא שמתי לב שאני רץ עם זומבים לא של תחרות 9.5…. איזה בושות…

    אתה מתכוון בלפגוע בסוף הלולאה שהוא יעשה את האתחול, יריץ פעם אחת ללולאה ואז יגיע לחלק של הפקודות שהחלפתי בהפצצה החכמה שזה היה החיבור בין העותק הראשון לשני – נכון?

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

     

     

    #81501
    ddt
    משתתף

    בכל מקרה אני מנסה סתם לגרום לזומבים האלו למות ולא מצליח.
    הבסיס של ההתקפה החכמה שלי הוא:
    mov ax, 0E2F4h
    mov dx, 0BEA0h
    mov cx, 0cccch
    mov bx,cx
    STD
    Int 87h
    ניסיתי לשחק עם הכיוון כדי להבין את מה שהסתברת ועם שני הכיוונים זה לא מתקיף את החיבור בין העותקים של הזומבים

    #81503
    Idan 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>

    #81530
    ddt
    משתתף

    זה באמת עבד לי!!!!

    #81531
    ddt
    משתתף

    תודה!!!!

מוצגות 14 תגובות – 1 עד 14 (מתוך 14 סה״כ)
  • יש להתחבר למערכת על מנת להגיב.