BUUCTF findit

BUUCTF findit

apk放入jadx反编译,直接进入源代码中MainActivity主函数

x是用来判断用户输入是否正确,输入正确后才能进行后后面的y即flag计算,x和y两个加密无关

#include <stdio.h> #include <string.h> int main() { char a[] = {'T', 'h', 'i', 's', 'I', 's', 'T', 'h', 'e', 'F', 'l', 'a', 'g', 'H', 'o', 'm', 'e'}; char b[] = {'p', 'v', 'k', 'q', '{', 'm', '1', '6', '4', '6', '7', '5', '2', '6', '2', '0', '3', '3', 'l', '4', 'm', '4', '9', 'l', 'n', 'p', '7', 'p', '9', 'm', 'n', 'k', '2', '8', 'k', '7', '5', '}'}; char x[18], y[39]; for (int i = 0; i < 17; i++) { if ((a[i] < 'I' && a[i] >= 'A') || (a[i] < 'i' && a[i] >= 'a')) { x[i] = a[i] + 18; } else if ((a[i] >= 'A' && a[i] <= 'Z') || (a[i] >= 'a' && a[i] <= 'z')) { x[i] = a[i] - 8; } else { x[i] = a[i]; } } x[17] = '\0'; for (int i2 = 0; i2 < 38; i2++) { if ((b[i2] >= 'A' && b[i2] <= 'Z') || (b[i2] >= 'a' && b[i2] <= 'z')) { y[i2] = b[i2] + 16; if ((y[i2] > 'Z' && y[i2] < 'a') || y[i2] > 'z') { y[i2] = y[i2] - 26; } } else { y[i2] = b[i2]; } } y[38] = '\0'; printf("%s\n%s", x, y); return 0; }

第一行输出为x

第二行输出为y,正确输出应该是flag{c164675262033b4c49bdf7f9cda28a75}