Programming Security March Homework

紀錄課程作業

Thu Mar 28 2024
536 words · 3 minutes

image

作業1- C 語言開發

  • printf("%d\\n", a & b); 這一行執行了AND運算。a和b的二進位表示分別是1001和1101,進行位元AND運算後,得到結果1001,對應的十進位數字為9。
  • printf("%d\\n", a || b); 這一行執行了OR運算。a和b都是非零值,因此表達式a || b的結果為真(1)。所以輸出將是1。
  • printf("%d\\n", a ^ b); 這一行執行了位元XOR運算。a和b的二進位表示分別是1001和1101,進行位元XOR運算後,得到結果0100,對應的十進位數字為4。
  • printf("%d\\n", !a); 這一行執行了邏輯NOT運算。a的值是非零,所以邏輯NOT運算後為0。所以輸出將是0。 image image

作業2- Linux執行檔分析

C原程式 猜題目作者的生日 image 執行過程: image 總不可能剛好通靈到別人的生日 到main function中尋找: image 比較過程(1):

image 比較過程(2): image image 其實好像進到VV後就看到flag了

作業3- 組合語言

這題要找到能跳paradise的值 image

  • 過程:
    1. 初始的賦值: eax=0x03, ebx=???(不知道是多少), ecx=0x3eb3ac03, edx=0x3eb3ac03。
  1. 進入loop,瘋狂執行下去。
  2. 在循環中,首先檢查eax是否=0,如果則跳轉到check。
  3. 如果eax不為零,則將ecx+edx,然後將eax-1。
  4. 循環重複執行,直到eax變為零。
  5. 當eax為零時,跳到check,比較ebx和ecx的值。
  6. 如果ebx等於ecx,則跳轉到paradise,將eax設置為1。否則,將eax設置為0。
  • 要跳轉到paradise,需要滿足ebx等於ecx的條件。由於ecx的初始值為0x3eb3ac03,我們可以追蹤循環的執行過程來計算出最終ecx的值。 在循環中,ecx的值會被不斷加上edx的值(0x3eb3ac03)。 由於eax的初始值為3,因此循環會執行3次。每次循環,ecx的值會增加0x3eb3ac03。

結果: 要計算出以下: ecx = 0x3eb3ac03 + 3 * 0x3eb3ac03 image

作業4- pwntools解題

C原程式 猜題目作者的生日 image pwn解題程式 image 結果: Flag就噴出來了 image

  • 加分題 main 2 image image
  • 加分題 main 3 image 進入到visual模式後 也可看到 0x4012f6 是main的地址 image
  • 加分題 main 6 image 進入到visual模式後還是 可以看到main的地址是0x40121c image

Thanks for reading!

Programming Security March Homework

Thu Mar 28 2024
536 words · 3 minutes