1.elf

runwu2204 Lv6

其加密的过程是

1
2
3
4
5
6
7
8
9
10
11
12
v1 = -85;
v2 = 0;
for ( i = 0; i <= 39; ++i )
{
for ( j = 0; j <= 50; ++j )
{
v1 ^= j ^ v2 ^ 0x5F;
s[i] ^= s[(i + 1) % 40];
s[i] ^= v1;
++v2;
}
}

可以直接找到它加密后的字符串

image-20221228142654979

可以直接根据加密算法逆推答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include<stdio.h>
int main()
{
char s[] = { 161, 186, 110, 70, 128, 244, 217, 170, 180, 54, 90,
204, 140, 30, 149, 33, 143, 67, 225, 19, 138, 168, 106,
66, 174, 251, 247, 165, 157, 11, 75, 222, 186, 0, 135,
35, 144, 70, 211, 223,'\0'};//需补充'\0'作为字符串结尾(后续解密不需修改)
char v1 = -85;
int v2 = 0;
v1 = -85;
v2 = 0;
int i, j;
for (i = 0; i <= 39; ++i)
{
for (j = 0; j <= 50; ++j)
{
v1 ^= j ^ v2 ^ 0x5F;
++v2;
}
}//加密时是从前往后加密,则解密需要从后往前解密,需要求出最后的v1对应的值才能做解密运算
for (i = 39; i >= 0; --i)
{
for (j = 50; j >= 0; --j)
{
--v2;
s[i] ^= v1;
s[i] ^= s[(i + 1) % 40];
v1 ^= j ^ v2 ^ 0x5F;
}
}//将后面的加密顺序调转(包括指令如加密中最后的++v2变为最上方的--v2,异或运算不用变化,只需跟随加密顺序再将顺序逆转就可进行解密运算了
puts((char *)s);//以字符串输出
return 0;
}

解出答案就是SYC{bIIngxvJqVDOUqbuiHDpadwfdRePetteyBP}

1
2
f=Solver()
print(f.model)
  • 标题: 1.elf
  • 作者: runwu2204
  • 创建于 : 2022-12-28 13:27:17
  • 更新于 : 2023-01-04 22:02:46
  • 链接: https://runwu2204.github.io/2022/12/28/CTF WP/Re/pythonz3/1.elf/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论
目录
1.elf