[2019红帽杯]easyRE

64位ida,7.0的,(最近用7.5老抽风,好多数据我都找不到)

查看字符串,发现三个特殊的字符
在这里插入图片描述
其中那个ABCD肯定是base64加密了,跟进去主要看一看这个函数名字,是sub_400E44

其他俩个跟进去就是主函数了.

分析主函数

sub_4406E0 这个代码基本上是看不懂的,但是可以注意到里面有一个sys_read ,可以猜测是读取字符串内容的

sub_424BA0,这个进去看内容其实我也看不懂,但是根据下面的for循环可以判断出,这个是读取字符串长度的,尤其是这一步可以判读这点
在这里插入图片描述

因为这是for循环的结束条件,就猜吧.

然后根据这段for循环写个脚本看看输出了什么,字符串我的ida直接显示了,之前用7.5也找不到,我的问题吧.
在这里插入图片描述

脚本

#include <iostream>

int main(){
char a[]={73,111,100,108,62,81,
110,98,40,111,99,
121,127,121,46,105,127,100,96,51,119,125,119,101,107,57,123,105,121,61,126,121,76,
64,
69,
67
};

char flag[66];
for(int i=0;i<36;i++){
	flag[i] = a[i] ^ i;
	std::cout<<flag[i];
}

system("pause");
return 0;

输出:Info:The first four chars are flag

只能确定前四个字符.

接着是几次base64加密,这边试了下,不仅仅是字符串里看到的那行,后面那一大串都是的,我是笨比,用网站解了好几次,让我看到了那篇帖子.
在这里插入图片描述

在?给个flag

对,这个网址就是要对各位进行现场教学,挺好的,值得一看

看了很多wp后回来继续写

忘了在哪一个wp里看到这个函数实在程序结束后将会执行
在这里插入图片描述
然后看到下面那行
在这里插入图片描述
通过倒着 异或 推出 v3,注意v6是个数组,v3,v6中间其实还有v3,4,5,6
这就是个数组

为什么v3会是一个数组呢,因为HIBYTE()函数的作用是获取高字节也就是数组的最后一位,同时还有BYTE()、BYTE1()、BYTE2()第一个是获取数组的第一位,第二个就是获取第二位,依次类推。

脚本

#include <iostream>

using namespace std;

int main(){
	char a[]={0x40,0x35,0x20,0x56,0x5D,0x18,0x22,0x45,0x17,0x2F,0x24,0x6E,0x62,0x3C,0x27,0x54,0x48,0x6C,0x24,0x6E,0x72,0x3C,0x32,0x45,0x5B};

	char flag[66];
	char b[5]= "flag";
	char c[4];

	for(int i=0;i<4;i++){
	 c[i] = b[i] ^ a[i];
	 cout<<c[i];
	}
	cout<<endl;

	for(int i=0;i<25;i++){
		flag[i] = a[i] ^ (c[i%4] );
		cout<<flag[i];
	}

	system("pause");
	return 0;

	}

flag{Act1ve_Defen5e_Test}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值