[RoarCTF2019]polyre
ida64位
ollvm 混淆控制流,完全平坦化了
D-810反混淆
分析程序
单纯的在尾部加\0
CRC校验后比较
要注意的有两个地方
一个是如何判断正负
首先左移的末尾是0
又因为负数异或上的是0xB0004B7679FA26B3,也就是说,如果被操作数是负数,那么它的末尾一定为1,如果是偶数,则为零。
另一个方面,逆向的时候要右移,那么开头一定为0。所以当被操作数是负数的时候,
异或加右移后要补上缺失的负号,所以要|0x8000000000000000
脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| flag = [ 0xBC8FF26D43536296, 0x520100780530EE16, 0x4DC0B5EA935F08EC, 0x342B90AFD853F450, 0x8B250EBCAA2C3681, 0x55759F81A2C68AE4 ]
for i in range(6): enc = "" x = flag[i] for k in range(64): if x & 1: x = (x ^ 0xB0004B7679FA26B3) >> 1 x = x | 0x8000000000000000 else: x = x >> 1
flag[i] = x for i in range(8): enc += chr(x & 0xff) x = x >> 8 print(enc, end="")
|
1
| flag{6ff29390-6c20-4c56-ba70-a95758e3d1f8}
|