点击此处获得更好的阅读体验
WriteUp来源
来自MO1N
战队
题目描述
某工控设备突然运行变慢,似乎是在计算着什么东西,请您帮助他进行分析。Flag格式为:flag{}。
题目考点
解题思路
mipsel的程序,使用ghidra进行分析
提示说在很长时间以后会输出flag,猜测要进行算法的优化
观察solve函数与dfs函数
发现实质是一个最长上升子序列,自己进行优化算法即可
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| #include <stdio.h> #include <string.h> int dp[10050]; int arr[10050], ans[15]; int n;
int max(int a, int b) { if (a >= b) { return a; } else { return b; } }
int solve() { for (int i = 1; i <= n; i++) { arr[i] = rand() % 11; dp[i] = 1; } int maxx = 0; for (int i = 1; i <= n; i++) { for (int j = 1; j < i; j++) { if (arr[j] <= arr[i]) { dp[i] = max(dp[i], dp[j] + 1); } } maxx = max(maxx, dp[i]); } return maxx % 256 + 34; }
int main() { srand(0x666c6167); n = 10000; for (int i = 1; i <= 10; i++) { ans[i] = solve(); printf("%d ", ans[i]); } printf("\n"); char output[18]; output[0] = 'f'; output[1] = 'l'; output[2] = 'a'; output[3] = 'g'; output[4] = '{'; for (int i = 5; i < 5 + 10; i++) { output[i] = ans[i - 4]; } output[15] = '}'; output[16] = '\x00'; printf("%s", output); return 0; }
|
Flag