assembly-2 - Points: 250 - (Solves: 2806)
->我們看裡面是組碼又要開始頭痛拉,但沒關係我們慢慢來看
->我們把它拆成3個部分main part_a part_b 區我們先從最上面的main區開始看
->我們從main這邊開始看 並且題目說asm2(0x8,0x21) return?
mov eax,DWORD PTR [ebp+0xc] 他把暫存器的值指向給ebp+0xc所以ebp+0xc=0x21
mov DWORD PTR [ebp-0x4],eax 再把ebp-0x4的值指向給eax
mov eax,DWORD PTR [ebp+0x8] 他把暫存器的值指向給ebp+0xc所以ebp+0x8=0x8
mov DWORD PTR [ebp-0x8],eax 再把ebp-0x8的值指向給eax
jmp part_b
->目前可以知道得資訊長這樣
->然後跳到part_b區
cmp DWORD PTR [ebp+0x8],0x3923 ebp+0x8位置的值有沒有大於等於0x3923
jle part_a 沒有的話就跳到part_a
mov eax,DWORD PTR [ebp-0x4]
mov esp,ebp
pop ebp
ret
->然後跳到part_a區
add DWORD PTR [ebp-0x4],0x1 對ebp-0x4得值+上0x1
add DWORD PTR [ebp+0x8],0xa9 對ebp+0x8得值+上0xa9
->聰明的小夥伴是不是想到這很像啥了,沒有錯就是我們的加到比一定的數值大的迴圈
->我們統整一下並且把它想成程式碼化
local1=0x21 local2=0x8 while local2 <= 0x3923: local1 +=1 local2 += 0xa9 print(hex(local1))
|
->就變成這樣輸出的話會是0x78就是我們的flag
看到這題啊因為太久沒做到assembly的題目我就回頭去讀了大3的課本嗯嗯.....上課都沒認真聽呢最近想研究一下 burpsuite 跟 Wireshark 的操作如果有大大有推薦的資料或是CTF的題目的話歡迎留言下面給我知道一下
參考資料:
assembly