还是逆向比较有趣(●’◡’●)
-
一个知识遗漏点(写给自己看的)
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()