본문 바로가기
STUDY/Dreamhack

[rev] Summer Fan (level2)

by CH@3M 2024. 6. 15.

안드로이드 apk 리버싱문제이다.

JADX로 디컴파일 해본다. MainActivityKt 클래스의 generateFlag() 함수를 이용해서 플래그가 생성되는 것을 확인할 수 있다.

변수는 다음과 같이 받아온다.

위 두가지 내용을 기반으로 연산하는 것을 python 코드로 작성하면 다음과 같다. ChatGPT를 잘 이용하면 더 빠르게 코드를 작성해준다 ㅎㅎ

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"]

def generate_flag():
    array_list = []
    size = len(FLAG)
    for i in range(size):
        flag_value = FLAG[i]
        key_char = KEY[i % len(KEY)][0]
        xor_result = flag_value ^ ord(key_char)
        gen_result = gen(i)
        calculated_char = chr(xor_result - gen_result)
        array_list.append(calculated_char)
    
    return ''.join(array_list)

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

def main():
    generated_flag = generate_flag()
    print(f"Generated Flag: {generated_flag}")

if __name__ == "__main__":
    import math
    main()

해당 연산을 실행시키면 다음과 같이 플래그가 생성되어 나온다.

 

반응형

'STUDY > Dreamhack' 카테고리의 다른 글

[WEB] DOM XSS  (0) 2024.07.09
[WEB] Switching Command  (0) 2024.06.23
[web] Dream Gallery (level2)  (1) 2024.06.14
[rev] ez_rev  (0) 2024.04.22
[pwn] mmapped  (0) 2024.04.22