首先发现 有两输入点。
对于第一个输入的操作
通过循环 将输入分为 [0:6] [7:16] 分别保存到对应的内存中
然后第二次输入
首先,将我们的输入 计算出两个值
第一个用 / 12379
第二个用 % 12379
计算出的值 利用 if 比较
其中利用 function 函数计算。
这里计算不可逆 可以通过 爆破得到
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double function(double a, double b)
{
double v2 = pow(a, b - 1.0);
double v3 = v2 / exp(a);
return v3;
}
int main()
{
int input = 0;
while (1)
{
double v15 = 0;
double v16 = 0;
double v17 = 0;
double v18 = (double)(input / 12379) + 1.0;
do
{
v16 = v16 + function(v17, v18) * 0.001;
v17 = v17 + 0.001;
} while (v17 <= 100.0);
int v19 = (int)(v16 + v16 + 3.0);
if (v19 != 0x13B03)
{
printf("input = %d\\n", input);
input = input + 1;
continue;
}
double v20 = 0;
double v21 = (double)(input % 12379) + 1.0;
do
{
v15 = v15 + function(v20, v21) * 0.001;
v20 = v20 + 0.001;
} while (v20 <= 100.0);
if ((int)(v15 + v15 + 3.0) == 0x5A2)
{
printf("the input is :%d \\n", input);
break;
}
printf("input = %d\\n", input);
input = input + 1;
}
return 1;
}
99038
后面的 一段逻辑是 自己生成的 不会受我们的输入影响,可以动态调试 dump
然后我们要做的 是找到哪儿对我们的输入进行了操作
可以发现后面有两次 循环的加密 RC4 + 抑或