爆破爆破基础(一)
一.爆破的概念
什么是爆破?
我的理解就暴力破解,将flag一个一个试出来
二.爆破小例
1.只涉及一位 并且 只涉及数字 的加密
加密算法:
#include <stdio.h>
int main()
{
char str1[] = { 1,2,3,4,5,6,7,8 };
char str2[8] = { 0 };
int i;
for (i = 0; i < 8; i++)
{
str2[i] = str1[i] + 2;
}
for (i = 0; i < 8; i++)
{
printf("%d",str2[i]);
}
return 0;
}
跟狗屎一样的代码...
很简单,都不能算加密,就是把每个数加上2...
爆破:
#include <stdio.h>
int main()
{
int a = 0, b = 0, c = 0, d = 0, e = 0, f = 0, g = 0, h = 0;
char str1[] = { 1,2,3,4,5,6,7,8 };
char str2[8] = { 0 };
char str3[8] = { a,b,c,d,e,f,g,h };
int i, j;
//直接把“加密”的部分复制过来,获得“加密”后的内容
//我都不好意思把这个叫加密...
for (i = 0; i < 8; i++)
{
str2[i] = str1[i] + 2;
}
//直接开始从数组第一位开始穷举,直到这个位置加密后的值和对应位置加密后的值相等,再进入下一位
//直到最后一位
for (i = 0; i < 8; i++)
{
for (j = 0; ; j++) //这里突然脑子短路了一下,设置成到9结束了,调试时才发现,值又不是只有0~9
{
str3[i] = j;
if (str2[i] == str3[i])
{
break;
}
}
}
for (i = 0; i < 8; i++)
{
printf("%d",str3[i]);
}
return 0;
}
2.只涉及一位 并且 涉及数字和字母 的加密
加密算法:
#include <stdio.h>
#include <string.h>
int main()
{
char str1[20] = "0";
char str2[20] = "0";
char str3[20] = "0";
int len, i;
gets(str1);
len = strlen(str1);
for (i = 0; i < len; i++)
{
str2[i] = str1[i] + 2;
}
puts(str2);
//验证一下flag,懒得再新建一个文件了...
printf("请输入flag:");
gets(str3);
if (strcmp(str3, str1))
{
puts("no");
}
else
{
puts("yes");
}
return 0;
}
还是依托答辩一样的代码...
一样的每位加上2
爆破:
#include <stdio.h>
int main()
{
char str1[20] = "0";
char str2[20] = "0";
char str3[20] = "0";
int len, i,j;
//一样的,直接把加密的部分cv下来,作为一个cv程序员这肯定会
gets(str1);
len = strlen(str1);
for (i = 0; i < len; i++)
{
str2[i] = str1[i] + 2;
}
//同样开始一个一个试,和上面一样
for (i = 0; i < len; i++)
{
for (j = 0;; j++)
{
str3[i] = j;
if (str3[i] == str2[i])
{
break;
}
}
}
puts(str3);
return 0;
}
3.涉及两位 并且 只涉及数字 的加密
感觉开始上强度了...
这个加密不对...很有问题...别看了
加密算法:
这个是真狗屎,调了半天...
#include <stdio.h>
#include <string.h>
int main()
{
char flag[20] = "1425";
char datacmp[20] = "eg";
char your_answer[20] = "0";
char encipher_your_answer[20] = "0";
int len, i, j;
printf("flag:%s\n",flag);
printf("加密后的flag(将输入加密后和这个进行比较):%s\n", datacmp);
//将输入进行加密
printf("输入你的答案:");
len = strlen(flag);
gets(your_answer);
for (i = 0, j = 0; i <= len; i += 2, j++)
{
encipher_your_answer[j] = your_answer[i] + your_answer[i + 1];
}
//将输入加密得到的内容后与flag加密后的内容比较
if (strcmp(encipher_your_answer, datacmp))
{
puts("wrong");
}
else
{
puts("right");
}
return 0;
}
爆破:
没写出来...
#include <stdio.h>
int main()
{
char str1[20] = "0";
char str2[20] = "0";
char str3[20] = "0";
char str4[20] = "0";
int len, i, j, k;
//加密
gets(str1);
len = strlen(str1);
for (i = 0, j = 0; i <= len; i++, j++)
{
str2[j] = str1[i] + str1[i + 1];
i += 1;
}
//爆破
for (i = 0; i < len/2; i++)
{
for (j = 0;; j++)
{
for (k = 0;; k++)
{
str4[i] =
}
}
}
puts(str4);
return 0;
}