CGctf re方向的俩道题
1.simple machine
有俩个主要函数,第一个是加密
c=“feeddeadbeefcafe”
for i in range(54):
flag[i]=flag[i]^ord(c[i%16])
第二个函数是换位。。。这个没看懂一开始
嵌套循环,外层令他为i,内层为j,
简述一下就是把原flag中i+3j给了新flag的18i+j
下面附上py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
b=[0, 3, 9, 58, 5, 14, 2, 22, 15, 31,
18, 86, 59, 11, 81, 80, 57, 0, 9, 31,
80, 4, 20, 87, 59, 18, 7, 60, 28, 58,
21, 5, 11, 8, 6, 1, 4, 18, 22, 57,
5, 11, 80, 87, 9, 18, 10, 39, 19, 23,
14, 2, 85, 24]
a=[0]*54
c="feeddeadbeefcafe"
for i in range(3):
for j in range(18):
a[i+3*j]=b[18*i+j]
for i in range(54):
a[i]=a[i]^ord(c[i%16])
flag=''
for i in a:
flag+=chr(i)
print(flag)
得flag{wh4t_a_fuck1ng_4ss3mbly_styl3_C_progr4mm1ng_c0de}
2.homuraVM
这个题目。。。硬肛还是能搞下来的。。。
C n2 -= 2*(n1&flag1)
G --n2
M n2=n1+flag1
T ++n2
a --n1
h next flag1
m flag1++
o last flag
r n1++
u --flag1
v n2=n1
[] loop for flag1
{} loop for n2
h[ur]ov
flag[i]=0
n1=n2=flag[i]
hv{aG}[ur]ov
flag[i]=0
n1=n2=flag[i]
c1=count'a' --
c2=count'r' ++
c=c2-c1
MCh{mG}
n2=flag[i]+c+flag[i-1]
flag[i]=flag[i]+c+flag[i-1]-2*((flag[i]+c)&flag[i-1])
上面吧ida反编译出的都简要写了下,所有的字符串有固定格式除了第一句话其他都是hv{aG}[ur]ov+一堆a和r+MCh{mG}
a和r的作用也在上面写了,下面附上c代码
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[34]={27,
114,
17,
118,
8,
74,
126,
5,
55,
124,
31,
88,
104,
7,
112,
7,
49,
108,
4,
47,
4,
105,
54,
77,
127,
8,
80,
12,
109,
28,
127,
80,
29,
96};
int c[34]={0,
-3,
2,
0,
3,
-2,
1,
5,
1,
-1,
4,
-1,
0,
2,
2,
5,
2,
-2,
2,
1,
1,
2,
0,
2,
2,
2,
6,
-3,
-1,
-1,
2,
-2,
-1,
0
};
//flag[i]=flag[i]+c+flag[i-1]-2*((flag[i]+c)&flag[i-1])
int i,j;
for(j=32;j>=0;j--)
{
for(i=1;i<128;i++)
{
if(a[j+1]==i+c[j+1]+a[j]-2*((i+c[j+1])&a[j]))
{
a[j+1]=i;
break;
}
}
}
for(i=1;i<128;i++)
{
if(a[0]==i+c[0]+a[33]-2*((i+c[0])&a[33]))
a[0]=i;
}
for(i=0;i<34;i++)
{
printf("%c",a[i]);
}
return 0;
}
flag{D3v1L_H0mur4_f**k_y0uR_bra1N}
咕咕咕的博客都附上了
就这样草草了事了
太菜了我还要刷题