zoukankan      html  css  js  c++  java
  • BUU-[MRCTF2020]Shit

    给了源文件 不知道出于什么原因 总之能偷懒就偷懒吧

    首先存在一个反调试

     之后是Getkey函数 这个函数里面没有涉及到input对内容 所以可以动态调试吧key弄出来

    注意该函数里面使用了时间差,其结果影响key对值 所以断点断在该函数对后面

    还存在花指令,学习一下

    _asm
    {
        call sub10
        _emit 0xE8
        jmp label10
    sub10:
        add dword ptr[esp],1
        retn
    label10:
    }

    效果是这样的

    然后执行加密函数  我这里直接对源代码分析了 IDA逆出来也差不多应该

     key已经动态出来 运算都是可逆的 直接写脚本一把梭

    a = [0x8c2c133a,0xf74cb3f6,0xfedfa6f2,0xab293e3b,0x26cf8a2a,0x88a1f279]
    k = [0x03,0x10,0x0d,0x04,0x13,0x0b]
    for i in range(5,-1,-1):
        if i > 0:
            a[i] ^= a[i-1]
        a[i] ^= (1<<k[i])
        a[i] = ((a[i]>>16) | (~(a[i]<<16) & 0xffff0000) )
        a[i] = ((a[i] << k[i]) | (a[i] >> (32 - k[i])) )& 0xffffffff
    flag = ''
    print a
    for i in range(len(a)):
        flag += hex(a[i])[2:].decode('hex')
    print flag
    View Code
  • 相关阅读:
    转载 :sql server 2005 无法删除数据库 "#Test",因为该数据库当前正在使用
    leetcode 1
    leetcode 2
    leetcode 242
    leetcode171
    leetcode 122
    leetcode 100
    算法:号码转换问题
    2014年10月29日 00:23 长沙
    算法:poj1066 宝藏猎人问题。
  • 原文地址:https://www.cnblogs.com/lxy8584099/p/13682236.html
Copyright © 2011-2022 走看看