Wargame/ctf

bitsctf writeup

EYEN 2025. 2. 9. 09:55

baby rev
 
문제 코드이다. 

# Python obfuscation by freecodingtools.org
                    
_ = lambda __ : __import__('zlib').decompress(__import__('base64').b64decode(__[::-1]));exec((_)(b'==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'))

 
freecodingtools.org 에 들어가면 obfuscation을 할 수 있는 섹션이 있다.
https://freecodingtools.org/tools/obfuscator/python

Python Obfuscator - Free Coding Tools

# Online Python Compiler print("Hello, World!")

freecodingtools.org

 
근데 이건 상관 없고 중요한 것 여기서 난독화한 순서가
1. zlib으로 압축
2. base64로 인코딩
3. 역순으로 바꾸기
이다. 이걸 거꾸로 해주면 된다.
이렇게 

reversed_code = code[::-1]

# Base64 디코딩
decoded_data = base64.b64decode(reversed_code)

# zlib 압축 해제
decompressed_data = zlib.decompress(decoded_data)

print(decompressed_data.decode())

근데 한 번 거꾸로 하면 

 
 
exec((_) (b'= 로 시작하는 요상한 값이 나온다.
 
처음엔 뭔가 잘못된 줄 알았는데 코드 다르게 짜서 여러번 해봐도 같게 나와서 여기서 뭔가 더 해야한다는 걸 알았다.
 
같은 방식으로 계속해서 디코딩을 했는데도 계속 저렇게 알 수 없는 값들이 나왔다. 근데 시작부에는 =가 계속 붙었어서 이 방식이 맞다고 생각했다. 그래서 반복문으로 100번 돌려봤다. 
 

import base64
import zlib

code = "=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"

code = code + '=' * (4 - len(code) % 4)

for _ in range(10):
    reversed_code = code[::-1]

    # Base64 디코딩
    decoded_data = base64.b64decode(reversed_code)

    # zlib 압축 해제
    decompressed_data = zlib.decompress(decoded_data)

    decompressed_str = decompressed_data.decode()
    
    # 'exec((_)(b' 뒤의 부분과 '))' 앞의 부분을 추출
    import re
    match = re.search(r"exec\(\(_\)\(b'([^']+)'\)\)", decompressed_str)
    
    if match:
        # 추출된 값만 code로 설정
        code = match.group(1)
    else:
        print("Pattern not found")
        break

    print(code)

여기서 code만 바꿔서 100번을 했고 플래그가 나오면 "Pattern not found"가 나오도록했다.
마지막 코드는 처음 코드로 한 번 더 디코딩했고 플래그를 얻을 수 있었다.