0%

国赛pwn修复1

修复部分

题目出现的麻烦就是出现了gets危险函数,所以把gets危险函数去除,换成fgets或换成c++的cin即可,甚至可以加个cannary保护,因为题目本身没泄露,所以没法泄露cannary,所以溢出都不行了,cannary保护我也不记得命令,玩蛇皮,不给百度

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <stdio.h>
#include <string.h>
#include <iostream>

using namespace std;
int x = 0;
void begin()
{
puts("====================================================================");
puts("1.Encrypt");
puts("2.Decrypt");
puts("3.Exit");
puts("Input your choice!");
}

void encrypt()
{
char s[48];
memset(s, 0, sizeof(s));
puts("Input your Plaintext to be encrypted");
cin >> s;
while( strlen(s) > (unsigned int)x )
{
if( s[x] <= 96 || s[x] > 122 )
{
if( s[x] <= 64 || s[x] > 90 )
{
if(s[x] > 47 && s[x] <= 57)
s[x] ^= 0xf;
}
else
{
s[x] ^= 14;
}
}
else
{
s[x] ^= 13;
}
++x;
}
s[47] = '\0';
puts("Ciphertext");
}
int main()
{
int input;
puts("EEEEEEE hh iii ");
puts("EE mm mm mmmm aa aa cccc hh nn nnn eee ");
puts("EEEEE mmm mm mm aa aaa cc hhhhhh iii nnn nn ee e ");
puts("EE mmm mm mm aa aaa cc hh hh iii nn nn eeeee ");
puts("EEEEEEE mmm mm mm aaa aa ccccc hh hh iii nn nn eeeee ");
puts("====================================================================");
puts("Welcome to this Encryption machine\n");
begin();
while(1)
{
while(1)
{
fflush(0);
scanf("%d", &input);
getchar();
if(input != 2)
break;
puts("I think you can do it by yourself");
begin();
}
if(input == 3)
{
puts("Bye!");
return 0;
}
if( input != 1 )
break;
encrypt();
begin();
}
puts("Something Wrong!");
return 0;
}

手写了一遍代码,将gets危险函数替换掉了,其余没什么问题,这个比赛真心好,不让百度。。。。我很多函数都不会,没法查。。后面只能放弃。。

本文作者:NoOne
本文地址https://noonegroup.xyz/posts/ce5ca923/
版权声明:转载请注明出处!