[NPUCTF2020]Baby Obfuscation
无壳,载入 IDA,查看主函数
首先是几个名字随便函数:F0X1 ~ F0X5
F0X1 是求 gcd
F0X2 & F0X3 为一个布尔类型,返回值为 1 需要传入的两个参数均为 true
F0X4 实质上是 a - b
F0X5 求的是 a 的 b 次方
大体分析一下,即为
可以发现主要的运算过程有三个:
-
A0X1[i_0] = user_input[i_0 - 1] - A0X4[(i_0 - 1) % 4]
-
A0X1[i_0] ^= A0X4[(i_0 - 1) % 4]
-
A0X1[i_0] *= 10
然后在比较环节会再乘个 10,A0X6 已知
逆向得:
#include <bits/stdc++.h>
using namespace std;
int A0X6[20] = {0x0, 0x1e79, 0x1e79, 0x2135, 0x170d, 0x1f41, 0x1901, 0x2ced, 0x11f9, 0x2649, 0x2581, 0x2db5, 0x14b5, 0x25e5, 0x2a31, 0x30d5, 0x0};
int A0X4[5] = {2, 3, 4, 5};
char A0X1[20];
int main() {
for (int i = 1; i < 16; i++) {
A0X6[i] /= 100;
A0X6[i] ^= A0X4[(i - 1) % 4];
A0X6[i] += A0X4[(i - 1) % 4];
A0X1[i] = (char)A0X6[i];
}
for (int i = 1; i < 16; i++) cout << A0X1[i];
return 0;
}
//NPUCTF{0bfu5er}
flag: flag{0bfu5er}
本文作者:Moominn
本文链接:https://www.cnblogs.com/Moomin/p/16338157.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步