BUU_re_[V&N2020 公开赛]strangeCpp

64位,进入ida,查看字符串,

在这里插入图片描述

我是从这里跟进来的,进入主函数,有一堆putchar,一般来说,这就是输出的是flag,猜的,纯属猜测

进入字符看一看,注意后面的DATA XREF 就会发现.这些字符都用了同一个函数,但是有一个用的是另外一个,这个就很奇怪了对吧,就顺理成章的进去看一看发生了什么

在这里插入图片描述

sub_140013580

在这里插入图片描述

这里从下往上看 result == 607052314
然后 result = sub_140011384((unsigned int)dword_140021190)
猜测这个可能是一个加密的函数,----把dword_140021190 加密后成为result

就看一看 dword_140021190 是什么,结果这是个空的,啥也没有

那就看加密函数
在这里插入图片描述
很简单的一个加密,位运算,又知道了result的结果.就用爆破把他算出来

dword_140021190 输出结果位123456

后面跟着个for循环 ,byte_140021008 也是有的,就写个脚本看看输出了什么

结果是: flag{MD5(theNum)}

还是猜,数字,MD5加密,那数字可能就是刚刚算出来的123456

最后出啦,flag{e10adc3949ba59abbe56e057f20f883e}

脚本

#include <iostream>

using namespace std;

int main(){
	int index = 0;
	int a1=0,v5;
	char flag[44];
	char m[]={0x26, 0x2C, 0x21, 0x27, 0x3B, 0x0D, 0x4, 
		0x75, 0x68, 0x34, 0x28,0x25, 0x0E, 0x35, 0x2D, 0x69, 0x3D};
	int result;

	for(a1=0;a1<14549743;a1++){
		v5=(a1 << 8) ^ (a1 >> 12);
		v5*=291;
		if ( v5 )
			result = v5;
		else
			result = 987i64;

		if(result == 607052314){
			cout<<a1<<endl;
			break;
		}
	}


	for(int i=0;i<17;++i){
		flag[i]=(char)a1 ^ (char)m[i];
		index++;
	}
	flag[index] = '\0';
	cout<<"结果是: "<<flag<<endl;

	system("pause");
	return 0;

	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值