還是逆向比較有趣(●’◡’●)
-
一個知識遺漏點(寫給自己看的)
sprintf() sprintf(buffer,format,argument)是指向緩衝區寫入字符,format是格式,arg是要輸入的東西,buffer是緩衝區。 題目中的一段: sprintf(&s1[2*i],"%02x",(unsigned __int8)v11[i]) 一開始疑惑了一會,後面才意識到,s1是char數組,一個佔4位, 後面的將其換成8位,八位要放4位,要空兩位,oooo,原來如此。
這是一道挺有意思的題,又掌握了一些新的姿勢。
簡單,第一步輸入個1就行。
下面是關鍵一步:
再分析一波後面,
發現是用隨機數,然後,生成密匙,進行md5操作,
然後與一段給出的字符串進行比較,目測是md5加密。
emmmm,不管這麼多了,一個一個函數分析也不那麼現實。
這個寫腳本有點麻煩,
但可以直接用工具爆破出來,
沒想到pwn的工具會用到逆向上,也是有點醉了,
- 思路:
先輸入個1
再弄出所有滿足條件的,放到一個數組去中,逐個進行,
網上有一個還幫忙算上了時間,順帶學了一波py的時間計算。
from pwn import*
import time
time1=time.time()
a=[]
for i in range(16,0xffff):
v9=0
i=i^0
j=i
while(i):
v9+=1
i&=i-1
if v9 ==10:
a.append(j)
//數組已經弄好了
for i in a:
p=process("./zorropub")
p.recv()
p.sendline('1')
p.sendline(str(i))//emmm,覺得int的也ok
result=p.recv()
if "null" in text:
print text
time2=time.time()
print "time %fs"%(time2-time1)
break
p.close()