攻防世界--->xxxorrr。

做题笔记。

下载  查壳。

64ida打开。

找到main:(该改名字的改名。)

那么大概就是s1和input进行 XOR 然后得到s2。就完了?这么简单?

额,跟踪s1 你还会发现一样东西:

最开始,额,我写完运行就感觉不对劲。

(怀疑自己错了。。 - -)

那就动调呗:

但是又会发现根本走不到断点这里。

不能动调?

可以动调的。

此时,可以大胆猜测,其实main函数并不是一开始就载入执行的函数。

我们对main进行跟踪。

F9就好,(或者你想看程序逻辑就F7、F8)

因为我们主要是想得到s1变化的值。

shift+e提出来就好。

那此时程序逻辑很清晰了。

先将s1的值进行^2 + 65的操作。在和input进行xor。之后的值与s2进行比对。

脚本:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
	char s3[50] = " ";
	unsigned char s1[50] =
	{
		48,  34,  54,  63,  42,  50,  57,  40,  34,  50,
		38,  47,  58,  45,  47,  58,   7,   4,  13,   9,
		27,  13,  10,   7,  31,  25,  16,  19,  31,  28,
		31,  23, 239, 131,0
	};

	unsigned char s2[50] =
	{
		86,  78,  87,  88,  81,  81,   9,  70,  23,  70,
		84,  90,  89,  89,  31,  72,  50,  91, 107, 124,
		117, 110, 126, 110,  47, 119,  79, 122, 113,  67,
		43,  38, 137, 254,0
	};
	
	for (int i = 0; i < strlen(s1); i++)
	{
		s3[i] = s1[i] ^ s2[i];
		printf("%c", s3[i]);
	}

	printf("\n");
	system("pause");
	return 0;
}

flag{c0n5truct0r5_functi0n_in_41f}

总结:思维逻辑很重要。也要相信自己,不要怀疑自己的能力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值