Eorton 发表于 2019-3-23 17:15

腾讯游戏安全竞赛比赛试题

好了,比赛已经过了提交时间了,来放出题目让大神们看看思路,反正我解了第一题就死了{:1_911:}
欢迎各路大神提交各种思路让大家和我参考参考
链接:https://pan.baidu.com/s/1Br3vHQ92QjNkKycvTC8AZQ 密码:jdkl

梦游枪手 发表于 2019-3-27 12:23

再贴一个第三题的吧
if __name__=='__main__':
    print "first step key:"
    step1=2019002
    while step1<2019999:
      tmp=step1-2019000
      truenum=0
      while tmp!=0:
            tmp2=tmp%10
            tmp/=10
            truenum+=pow(tmp2,3)
      if truenum==step1-2019000:
            print step1
      step1+=1
   
    print "second step key:"
    for step2 in range(20191,20200):
      ifstep2&1==0:
            print step2
    string2="T\P^IcTZ"
    xorkey="2019"
    s=""
    print "1.txt"
    for i in range(0,8):
      s+=chr(ord(string2)^ord(xorkey))
    print s+"-"+xorkey
   
    print "third step key:"
    step3=100000
    num=
    result=
    while step3<=999999:
      calc1=step3+10*(step3/10%10-step3/10)
      calc2=step3/100%10+10*(step3/1000%10)
      calc3=step3/10000%10+10*(step3/100000%10)
      cur=0
      for i in range(1,9,3):
            tmp=calc1*num+calc2*num+calc3*num
            if tmp==result:
                cur+=1
            else:
                break
      if cur==3:
            print step3
      step3+=1


校验流程有三步,第一步检测输入的整数后三位是不是水仙花数,第二步检测输入的数是否是之间的偶数,再对1.txt的内容做异或并base64,比较是否等于VFxQXkljVFo=,第三步看python代码吧。
有个很奇怪的的地方就是,第一步检测完以后会修改main.dll,而且后续没有修改回去,也可能是我没发现。请其他大佬指点一下吧

把main.dll还原以后输出如下

我也不知道flag是不是正确的。

梦游枪手 发表于 2019-3-29 23:01

今天抽空把第二题也做出来了,不过python有精度的问题,生成的注册码我也不保证一定正确,随机测试了几组没啥问题,不想用C重写一次了。。。
使用前python要安装opencv库,并将py文件放在第二题的目录执行
import re
import cv2
import numpy as np
import hashlib
import hmac

def hmacsha256(key,message):
    return hmac.new(key, message, digestmod=hashlib.sha256).hexdigest()
def codeappend(code):
    s="".join(code)
    fxorl1=(ord(code)^ord(code[-1]))<<8
    fmull2=(ord(code)*ord(code[-1]))+fxorl1
    fdivl3=(ord(code)/ord(code[-1]))+fmull2
    fmodl3=(ord(code)%ord(code[-1]))+fdivl3
    smuls1=(ord(code)*ord(code[-2]))<<8
    sxors2=(ord(code)^ord(code[-2]))+smuls1
    smods3=(ord(code)%ord(code[-2]))+sxors2+32
    sdivs3=(ord(code)/ord(code[-2]))+smods3
    fmod2=(ord(code)%ord(code[-1]))<<8
    sdiv2=(ord(code)/ord(code[-1]))+fmod2
    tmul2=(ord(code)*ord(code[-1]))+sdiv2+8
    foxor2=(ord(code)^ord(code[-1]))+tmul2
    fxorl14=(ord(code)^ord(code[-1][-1]))<<8
    sdivt23=(ord(code)/ord(code))+fxorl14
    smult23=(ord(code)*ord(code))+sdivt23
    fmodl14=(ord(code[-1][-1])%ord(code))+smult23
    ret1=str(sdivs3*30+(foxor2*2+fmodl3)*20+fmodl14*72)
    ret2=str(23*fmodl3+ 32*sdivs3+42*foxor2+54*fmodl14)
    ret3=(25*sdivs3 + 38*foxor2 + 67*fmodl14+fmodl3*18)%20
    ret4=(45*sdivs3 + 33*fmodl14 + foxor2*64+fmodl3*12)%20
    if ret3>ret4:
      ret3,ret4=ret4,ret3
    ret5=0
    for i in s:
      ret5+=int(i)
    s+=ret1+ret2+str(ret3)+str(ret4)+str(ret5)
##    print s
    return s
def genbin(codesum):
    img = cv2.imread('./flag.jpg')
    rows,cols = img.shape[:2]
    M = cv2.getRotationMatrix2D((float(cols)/2,float(rows)/2),codesum,1)
    dst = cv2.warpAffine(img,M,(cols,rows))
    gray = cv2.cvtColor(dst,cv2.COLOR_BGR2GRAY)
    gray = np.float64(gray)
    res = cv2.resize(gray,(8, 8),fx=0, fy=0, interpolation = cv2.INTER_LINEAR)
    r=cv2.dct(res)
    result=0.0
    s=""
    for i in r:
      for k in i:
         result+=k*0.015625
##    print result
    for i in r:
      for k in i:
            if k<result:
                s+="0"
            else:
                s+="1"
##    print s
    return s
def fullmatch(regex, string, flags=0):
    """Emulate python-3.4 re.fullmatch()."""
    return re.match("(?:" + regex + r")\Z", string, flags=flags)
if __name__=='__main__':
    name=raw_input()
    if fullmatch("(\d{4})-(\d{4})-(\d{4})-(\d{4})",name)!=None and re.search("0000",name)==None:
      code=name.split('-')
      truename=codeappend(code)
      bins=genbin(int(truename[-2:]))
      truename+=bins
      print hmacsha256(bins, truename)
    else:
      print "invaild name"
      


相比第一题,第二题只是在用户名末尾再增加了一串字符串,还有hmac的key变为增加的字符串,其他地方基本一样,具体算法看python代码吧

Eorton 发表于 2019-3-23 20:59

LjeA 发表于 2019-3-23 19:59
先看看了,题目都看不懂,这是逆向吗?

对啊,这就是逆向

Eorton 发表于 2019-3-23 23:29

zhongjiezhe 发表于 2019-3-23 23:09
我想报个名都报不了,别说做题啦啊

哈哈那您现在做题试试

Eorton 发表于 2019-3-24 14:06

米米来这里 发表于 2019-3-24 13:47
这个题很简单啊

大神!大神,麻烦您分享一下思路让我们学习学习:lol

byxiaoxie 发表于 2019-3-24 20:59

第一题就让写注册机了,菜鸟的我表示劝退成功{:301_1007:}

whyida 发表于 2019-3-24 22:07

本帖最后由 whyida 于 2019-3-24 22:10 编辑

第一题 AES ,RSA ,SHA256,SHA1,MD5,MD4 .考加密算法。不会编程,只能被劝退。

Eorton 发表于 2019-3-25 13:00

whyida 发表于 2019-3-24 22:07
第一题 AES ,RSA ,SHA256,SHA1,MD5,MD4 .考加密算法。不会编程,只能被劝退。

Python有这么难吗{:1_926:}

口恩彳亍 发表于 2019-3-25 13:07

过路小白围观一下

whyida 发表于 2019-3-25 14:19

Eorton 发表于 2019-3-25 13:00
Python有这么难吗

python2.7 可以。

whyida 发表于 2019-3-25 14:22

大概格式是这样。
页: [1] 2 3
查看完整版本: 腾讯游戏安全竞赛比赛试题