ringzer0team和wechall部分计算题

1、ringzer0team coding challenge 15:I saw a little elf
题目每次随机生成一段长度不一的代码,经过一系列base64解码后得到ELF文件(长度固定为8192字节),逆向得到字符串的具体位置,2秒内提交即可。代码如下:

import urllib2
import hashlib
import struct
import base64
import time
from bs4 import BeautifulSoup

#d=x[0x5E6:0x5EA]+x[0x5EE:0x5F0]


def OpenUrl_GetCode():

   Request = urllib2.build_opener()
   Request.addheaders.append(('Cookie' , 'cookievalue'))
   RingZero = Request.open('http://ringzer0team.com/challenges/15')
   Binary = BeautifulSoup(str(RingZero.readlines()),'lxml' )#, 'lxml'
   Binary = Binary.find('div' , {'class' :'message'})
   Binary = Binary.get_text()
   Binary = Binary.replace('----- BEGIN Elf Message -----' , '').replace('----- End Elf Message -----' , '')
   Binary = Binary[24:-24]
   print len(Binary)
   return Binary

def Convert_To_Elf_Bytes(Code):
   Code1=Code
   len1=len(Code)
   count=0
   try:
      while True:
         Code1=base64.b64decode(Code1)
         len1=len1*3/4
         if(len1<10000):
            break
         count+=1
   except:
      #print count
      print 'Error'
   print count
   Str=bytearray(Code1[::-1])
   f=open('elf1','wb')
   f.write(Str)
   f.close()
   return Str

def GetCode(bytesdata):
   byteArrayed=bytesdata[0x5E6:0x5EA]+bytesdata[0x5EE:0x5F0]
   str1=[]
   for i in byteArrayed:
      str1.append(chr(i))

   return ''.join(str1)

def Send(Code):
   Request = urllib2.build_opener()
   Request.addheaders.append(('Cookie' , 'cookievalue'))
   RingZero = Request.open('http://ringzer0team.com/challenges/15/%s' % Code)
   Bs = BeautifulSoup(str(RingZero.readlines()) , 'lxml')
   #text=Bs.get_text()
   #print text[:900].encode('utf-8')
   #print Bs.contents[0]
   Flag = Bs.find('div' , {'class' : 'alert alert-info'})
   alert = Bs.find('div' , {'class' : 'alert alert-danger'})

   if Flag!=None:
      print(Flag.get_text())
   #else:
      #print alert.get_text()
   return Flag




if __name__ == "__main__":
   for i in xrange(1):
      Code = OpenUrl_GetCode()

   #print(Code)
      ElfCode = Convert_To_Elf_Bytes(Code)
      #print ElfCode
      Code = GetCode(ElfCode)
      print(Code)
      flag=Send(Code)
      if flag!=None:
         break

2、wechall math challenge :FlowOverAstronomy
题目每次随机生成字串和等式,求解等式并按要求生成结果

Charset: A@sOqpuSW}{[VbfhtP70E_klG4neDg3wvIa5JLZxF6YoM1rKzN8jU#2]TimdyXHQ9BRcC   使用的字符串依次代表0,1,2...
Input Base: 5353进制)
Solution Base: 9 (输出为9进制)
Timelimit: 3.1416 seconds (限定时间)

要计算的等式为:

sAabq * sAeUI * @WW3D * @Z00V * bbEM * sqaSu * @Dx0D * spJEV * rf1a * @8_r * skuV * @FA61 * O[kK * @1Kj * @FUsV * SLxv * @Zs@{ * 14SM * @NJA_ * @w_hw * hDlp * @fUb7 * qJMz+ @fIJg

代码如下:

import urllib2
import hashlib
import struct
import base64
import time
from bs4 import BeautifulSoup

def OpenUrl_GetCode():

   Request = urllib2.build_opener()
   Request.addheaders.append(('Cookie' , 'cookievalue'))
   RingZero = Request.open('http://www.wechall.net/challenge/anto/FlowOverAstronomy/index.php')
   Binary = BeautifulSoup(str(RingZero.readlines()),'lxml' )#, 'lxml'
   Binary1 = Binary.find('div' , {'id' :'page'})
   x=Binary1.get_text()
   print x
   result=[]
   n1=x.find('Charset:')+len('Charset: ')
   n2=x.find('Input Base: ')
   charset=x[n1:n2]
   result.append(charset)
   n3=x.find('Solution Base: ')
   base1=int(x[n2+12:n3])
   result.append(base1)
   n4=x.find('Timelimit: ')
   base2=int(x[n3+15:n4])
   result.append(base2)

   n1=x.find("Equation\\n', '\\")
   n2=x.find("\\n'",n1+20)
   equa=x[n1+len("Equation\\n', '\\"):n2]
   equa=equa[1:]
   result.append(equa)

   return result

def GetCode(a,b,base1,base2):

   c=b.split(' * ')
   bb=c[-1].split(' + ')
   c[-1]=bb[0]
   c.append(bb[1])

   x={}
   for i,ch in enumerate(a):
       x[ch]=i

   y={}
   for i,ch in enumerate(a):
       y[i]=ch

   nums=[]

   for n in c:
           num=0
           for i in n:
                   num=num*base1+x[i]
           nums.append(num)

   result=1
   for i,nu in enumerate(nums):
           if i==len(nums)-1:
                   result+=nu
           else:
                   result*=nu

   temp=[]
   while result!=0:
           temp.append(result%base2)
           result/=base2

   str=''
   for j in temp[::-1]:
           str+=y[j]

   return str

def Send(Code):
   Request = urllib2.build_opener()
   Request.addheaders.append(('Cookie' , 'cookievalue'))
   RingZero = Request.open('http://www.wechall.net/challenge/anto/FlowOverAstronomy/index.php?answer=%s&action=Submit' % Code)
   print 'http://www.wechall.net/challenge/anto/FlowOverAstronomy/index.php?action=Submit&answer=%s' % Code
   Bs = BeautifulSoup(str(RingZero.readlines()) , 'lxml')
   text=Bs.get_text()
   print text[:-1].encode('utf-8')
   #print Bs.contents[0]


if __name__ == "__main__":

   result = OpenUrl_GetCode()

   #print(Code)

      #print ElfCode
   charset=result[0]
   base1=result[1]
   base2=result[2]
   equa=result[3]
   print base1,base2,charset,equa
   Code = GetCode(charset,equa,base1,base2)
   print(Code)
   Send(Code)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值