안드로이드 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 |