콘텐츠로 건너뛰기

Summer Fan

문제 파일

SUMMER_FAN.apk

jadx로 apk를 디컴파일하면 답이 나온다.

package com.example.summer;

import java.util.List;
import kotlin.Metadata;
import kotlin.collections.CollectionsKt;

/* compiled from: MainActivity.kt */
/* loaded from: classes.dex */
public final class MainActivityKt {
    private static final List<Integer> FLAG = CollectionsKt.listOf((Object[]) new Integer[]{220, 211, 180, 230, 192, 22, 341, 220, 227, 341, 139, 163, 355, 293, 333, 196, 142, 216, 376, 133, 248, 26, 342, 378, 231, 149, 145, 173, 185, 1, 10, 198});
    private static final List<String> KEY = CollectionsKt.listOf((Object[]) new String[]{"h", "o", "t", "_", "h", "o", "t", "_", "s", "u", "m", "m", "m", "e", "r", "r"});

    public static final List<Integer> getFLAG() {
        return FLAG;
    }

    public static final List<String> getKEY() {
        return KEY;
    }
}
private final String generateFlag() {
        ArrayList arrayList = new ArrayList();
        int size = MainActivityKt.getFLAG().size();
        for (int i = 0; i < size; i++) {
            arrayList.add(Character.valueOf((char) ((MainActivityKt.getFLAG().get(i).intValue() ^ StringsKt.first(MainActivityKt.getKEY().get(i % MainActivityKt.getKEY().size()))) - gen(i))));
        }
        return CollectionsKt.joinToString$default(arrayList, "", null, null, 0, null, null, 62, null);
    }

    private final int gen(int i) {
        int size = MainActivityKt.getKEY().size();
        return (((int) Math.pow(i, 3.0d)) % 256) ^ StringsKt.first(MainActivityKt.getKEY().get(size - ((i % size) + 1)));
    }

위 소스코드를 토대로 복호화시키는 코드를 작성해보았다.

import math;

FLAG = [220, 211, 180, 230, 192, 22, 341, 220, 227, 341, 139, 163, 355, 293, 333, 196, 142, 216, 376, 133, 248, 26, 342, 378, 231, 149, 145, 173, 185, 1, 10, 198]
KEY = ["h", "o", "t", "_", "h", "o", "t", "_", "s", "u", "m", "m", "m", "e", "r", "r"]
REAL_FLAG = []

def gen(i):
    size = len(KEY)
    ret = (int(math.pow(i, 3)) % 256) ^ ord(KEY[size - ((i % size) + 1)])
    return ret 

for i in range(len(FLAG)):
    glyph = (FLAG[i] ^ ord(KEY[i % len(KEY)])) - gen(i)
    REAL_FLAG.append(chr(glyph))

print(''.join(REAL_FLAG))

Flag

BISC{it_1s_so_hott_4c5515c5553a}

답글 남기기