来一个简单的CM,欢迎爆破或追码
今天做了一道CTF,把它算法部分抽出来做了一个简单的CM,欢迎大家尝试!VS2015静态编译,32位程序,XP可运行。
爆破,追码,逆算法都可以。
成功:会输出源码压缩包密码,能解压源码压缩包。
PS:爆破真的很简单,别想复杂了,追码不知道,没试。 1.我首先尝试了爆破,然后得到了解压缩包密码
之后进入到源码进行查看,现已把源码进行了修改编译,得到了真正的密码
当然自己对它的源码进行了稍微修改,从而避免了一个打印失败的bug
#include <stdio.h>
#include <string.h>
int main()
{
//密码表
int arr = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xCC, 0x3D, 0xCC, 0x9B, 0x33,
0xC2, 0x33, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0x01, 0x00,
0x00, 0x00, 0x7E, 0x7D, 0x7C, 0x7B, 0x7A, 0x79, 0x78, 0x77, 0x76, 0x75, 0x74, 0x73, 0x72, 0x71,
0x70, 0x6F, 0x6E, 0x6D, 0x6C, 0x6B, 0x6A, 0x69, 0x68, 0x67, 0x66, 0x65, 0x64, 0x63, 0x62, 0x61,
0x60, 0x5F, 0x5E, 0x5D, 0x5C, 0x5B, 0x5A, 0x59, 0x58, 0x57, 0x56, 0x55, 0x54, 0x53, 0x52, 0x51,
0x50, 0x4F, 0x4E, 0x4D, 0x4C, 0x4B, 0x4A, 0x49, 0x48, 0x47, 0x46, 0x45, 0x44, 0x43, 0x42, 0x41,
0x40, 0x3F, 0x3E, 0x3D, 0x3C, 0x3B, 0x3A, 0x39, 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31,
0x30, 0x2F, 0x2E, 0x2D, 0x2C, 0x2B, 0x2A, 0x29, 0x28, 0x27, 0x26, 0x25, 0x24, 0x23, 0x22, 0x21 };
char ch = {0x44,0x44,0x43,0x54,0x46,0x7B,0x72,0x65,0x76,0x65,0x72,0x73,0x65,0x4D,0x45,0x7D};//密码
char input = {90,90,91,74,88,35,44,57,40,57,44,43,57,81,89,33};
for (int i = 0;i<20;i++)//DDCTF{reverseME},逐个比较
{
for (int j = 0; j < 126; j++)//查找下标
{
if (arr == ch)//找到下标,替换成ASCII字符
{
ch = j;
break;//开始下一次循环
}
}
}
for(int i=0;i<20;i++)
{
printf("%d",ch);
}
printf("\n");
if (!strcmp(ch, input))
{
printf("you are successful!");
}
else
{
printf("you have filed!");
}
return 0;
}
细水流长 发表于 2020-5-17 15:24
爆破的确很简单,我想看看源码,密码是什么?
试了试大佬你爆破出来的字符串,成功打开压缩包,密码就是:you are successful!{:301_1008:}
你们好厉害。
#include "main.h"
int main()
{
//密码表
int arr = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xCC, 0x3D, 0xCC, 0x9B, 0x33,
0xC2, 0x33, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0x01, 0x00,
0x00, 0x00, 0x7E, 0x7D, 0x7C, 0x7B, 0x7A, 0x79, 0x78, 0x77, 0x76, 0x75, 0x74, 0x73, 0x72, 0x71,
0x70, 0x6F, 0x6E, 0x6D, 0x6C, 0x6B, 0x6A, 0x69, 0x68, 0x67, 0x66, 0x65, 0x64, 0x63, 0x62, 0x61,
0x60, 0x5F, 0x5E, 0x5D, 0x5C, 0x5B, 0x5A, 0x59, 0x58, 0x57, 0x56, 0x55, 0x54, 0x53, 0x52, 0x51,
0x50, 0x4F, 0x4E, 0x4D, 0x4C, 0x4B, 0x4A, 0x49, 0x48, 0x47, 0x46, 0x45, 0x44, 0x43, 0x42, 0x41,
0x40, 0x3F, 0x3E, 0x3D, 0x3C, 0x3B, 0x3A, 0x39, 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31,
0x30, 0x2F, 0x2E, 0x2D, 0x2C, 0x2B, 0x2A, 0x29, 0x28, 0x27, 0x26, 0x25, 0x24, 0x23, 0x22, 0x21 };
char ch = "DDCTF{reverseME}";//密码
char *input = (char *)malloc(sizeof(char) * 20);
scanf_s("%s", input);
if (!strlen(input))
{
printf("you have filed!");
}
for (int i = 0; input != 0;i++)//DDCTF{reverseME},逐个比较
{
for (int j = 0; j < 126; j++)//查找下标
{
if (arr == ch)//找到下标,替换成ASCII字符
{
ch = j;
break;//开始下一次循环
}
}
}
if (!strcmp(ch, input))
{
printf("you are successful!");
}
printf("you have filed!");
system("pause");
return 0;
} 很激动呀,第一次爆破成功,花了15分钟左右,这个程序不吃断点,0040129D这里跳转未实现改成实现,继续单步到004012FB这里跳转实现改成未实现,即可实现爆破,追码本人不会,我才刚刚学爆破1月左右 这CM的解不唯一啊..
试试看这个: ZZ[JX#,9(9,+9QY! 本帖最后由 htpidk 于 2020-5-17 17:40 编辑
很早就追到这个码了,只不过用这个密码打不开压缩包,所以以为错了,谁知道你说的会输出密码居然是下面的you are successful!,服了,我说用追到的字符串怎么打不开压缩包。
这个是哪里有问题? htpidk 发表于 2020-5-17 17:20
很早就追到这个码了,只不过用这个密码打不开压缩包,所以以为错了,谁知道你说的会输出密码居然是下面的 ...
你怎么追到的,怎么做的 神之名 发表于 2020-5-18 00:44
你怎么追到的,怎么做的
找到接收输入密码的CALL后在下面下个断点,随意输入几个密码,回车后就断下了,下面就是对比输入密码是否正确的代码了,几分钟就可以找到了