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