重操旧业
刮开有奖
关键有两个函数
第一个函数读起来很吃力
但是有技巧,我们关注的是函数的结果,不是过程。
将代码在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被分解,就有了一切