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
原文地址:https://www.cnblogs.com/lxy8584099/p/13682236.html