BUUCTF-两道reverse

重操旧业

刮开有奖

关键有两个函数
在这里插入图片描述
第一个函数读起来很吃力
但是有技巧,我们关注的是函数的结果,不是过程。
将代码在VS复写,观察运行结果

#include<iostream>
using namespace std;
int  f1(int*data, int a2, int len)
{
	int result = len, i,v5,v6;
	for (i = a2; i <= len; a2 = i)
	{
		v5 = i;
		v6 = data[i];
		if (a2 < result && i < result)
		{
			do
			{
				if (v6 > data[result])
				{
					if (i >= result)
						break;
					++i;
					data[v5] = data[result];
					if (i >= result)
						break;
					while (data[i] <= v6)
					{
						if (++i >= result)
							goto LABEL_13;
					}
					if (i >= result)
						break;
					v5 = i;
					data[result] = data[i];
				}
				--result;
			} while (i < result);
		}
	LABEL_13:
		data[result] = v6;
		f1(data, a2, i - 1);
		result = len;
		++i;
	}
	return result;
}
int main()
{
	int a[11] = { 90,74,83,69,67,97,78,72,51,110,103 };
	int b = f1(a, 0, 10);
	for (int i = 0; i < 11; i++)
		cout << a[i]<<',';
	//51, 67, 69, 72, 74, 78, 83, 90, 97, 103, 110,
}

第二个函数,可以靠
在这里插入图片描述
通过table以及函数移位操作和最后结果
猜测是base64
如果没有经验的话就老老实实读代码吧

[SUCTF2019]SignIn

这其实是一个简单RSA逆向
RSA不仅是一个加密算法
实际也是一个数学方法
RSA安全性在于大整数n难以被分解
一旦n被分解,就有了一切

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值