zoukankan      html  css  js  c++  java
  • 护网杯一道crypto

     1 import os
     2 def xor(a,b):
     3     assert len(a)==len(b)
     4     c=""
     5     for i in range(len(a)):
     6         c+=chr(ord(a[i])^ord(b[i]))
     7     return c
     8 def f(x,k):
     9     return xor(xor(x,k),7)
    10 def round(M,K):
    11     L=M[0:27]
    12     R=M[27:54]
    13     new_l=R
    14     new_r=xor(xor(R,L),K)#先将前27和后的27异或 然后将得到的27 位再跟k异或
    15     return new_l+new_r#将new_r和new_l拼接起来
    16 def fez(m,K):
    17     for i in K:
    18         m=round(m,i) #一轮轮下去
    19     return m
    20 
    21 K=[]
    22 for i in range(7):
    23     K.append(os.urandom(27))
    24 m=open("flag","rb").read()
    25 assert len(m)<54
    26 m+=os.urandom(54-len(m)) #不够还得补
    27 
    28 test=os.urandom(54)
    29 print test.encode("hex")
    30 print fez(test,K).encode("hex")
    31 print fez(m,K).encode("hex")

    刚刚开始想了好久都没想出k是怎么求出来的,最后看了大佬的wp,豁然大悟,原来是消去k。

    不过。。。就算这样也搞不出来,看了好久wp才弄明白。

    首先,我把一个的过程给写了下来,进行猜想:

     1 fR7=xor(xor(fL6,fR6),k)
     2 fL7=fR6
     3 fR7=xor(xor(fL5,fR5),k)
     4 fL6=fR5
     5 fR5=xor(xor(fL4,fR4),k)
     6 fL5=fR4
     7 fR4=xor(xor(fL3,fR3),k)
     8 fL4=fR3
     9 fR3=xor(xor(fL2,fR2),k)
    10 fL3=fR2
    11 fR2=xor(xor(fL1,fR1),k)
    12 fL2=fR1
    13 fR1=xor(xor(fL0,fR0),k)
    14 fL1=fR0

    另一边也一样的,当到最后的时候tL0和tR0是已知,但要记住,从下往下回归的时候,左右会交换了。

    最后发现:

    tL7^fL7=tL0^fL0

    所以可以将

    fL0=tL7^fL7^test[27:54]

    这样就能求出另一边了。另一边,也差不多,想方法求得带有fR0^tR0的项,再异或

    test[0:27]

    就出来了。

    下面还有一种大佬的方法:

    (tR7^R7)^(tL7^L7)=fL6^tL6
    (tR6^R6)^(tL6^L6)=fL5^tL5
    (tR5^R5)^(tL5^L5)=fL4^tL4
    (tR4^R4)^(tL4^L4)=fL3^tL3
    (tR3^R3)^(tL3^L3)=fL2^tL2
    (tR2^R2)^(tL2^L2)=fL1^tL1
    (tR1^R1)^(tL1^L1)=fL0^tL0

    再有:

    fR7=fR6
    tR7=tR6

    就能凑出

    (tR6^R6)^(tL6^L6)

    之后就能一步一步往下走:就能求出 tL0^fL0 和fL0^tL0

    最后给出大佬的博客,大佬真的是厉害。

    https://qingchenldl.github.io/2018/10/13/%E6%8A%A4%E7%BD%91%E6%9D%AFWP-BitPwn/

    这次比赛真的让我自闭了。

  • 相关阅读:
    SQL Server 作业的备份
    SQL Server 非sysadmin调用扩展函数
    SQL Server 性能调优(io)
    What is allocation bottleneck?
    SQL Server 2008 性能调优 optimize for ad hoc workloads
    执行计划的缓存
    sql server 2000 sp3 数据库复制 修改sp_MSget_repl_commands
    Xcode4.5出现时的OC新语法
    NSZombieEnabled ,解决EXC_BAD_ACCESS错误的一种方法
    有关View的几个基础知识点IOS开发
  • 原文地址:https://www.cnblogs.com/liyuechan/p/9785695.html
Copyright © 2011-2022 走看看