黄金6年
解压出一个mp4,然后用ffmpeg获取每一帧图片,找到三个二维码,分别为i、want、play。
mkdir imps && ffmpeg -i ./xx.mp4 -q:v 2 -f image2 ./imps/%07d.jpeg
strings可以看到mp4文件最后有3个base64字符串,拼接在一起解码后得到一个rar文件,解压密码为iwantplayctf
flag:roarctf{CTF-from-RuMen-to-RuYuan}
Polere
使用工具去除扁平化控制流混淆
- 使用异或的操作就是为了区分是否进位(因为每次都是乘以2,但是异或后会改变最后一位是奇数),可以简单测试下
#include <stdlib.h>
#include <stdio.h>
int main(int argc , char* argv[])
{
long long test= 0x6161616161616161;
int i;
for(i=0;i<64;i++){
if(test >=0){
printf(">0 0x%lx\n", test);
test=test<<1;
} else{
printf("<0 0x%lx\n", test);
test=test<<1;
printf("<0_1 0x%lx\n", test);
test=test^0xb0004b7679fa26b3;
printf("<0_2 0x%lx\n", test);
}
printf("0x%lx\n", test);
}
printf("%p 0x%lx\n", &test, test);
}
// 0xa0caec43d66f53ef
- 简单使用 "aaaaaaaa" 逆出来的结果实验下:
test = 0xbc8ff26d43536296
for i in range(64):
# if (test >> 63) == 0: # zhengshu
if test % 2 == 0:
print "dayu0 " + hex(test)
test /= 2;
else:
print "xiaoyu0 " + hex(test)
test = (1 << 64) + test
test ^= 0xB0004B7679FA26B3
test /= 2;
print struct.pack("q",test)
网友评论