<aside>

사용도구 : IDA Free 9.0

</aside>

1. Admin mode 진입하기

main 함수

image.png

image.png

Strings를 살펴보면 Hello, admin이라는 평문이 보이고 play_admin_mode() 함수에서 실행되는 것을 알 수 있다.

image.png

main 함수를 살펴보면 play_admin_modes()is_admin_trigger(Str)이 True를 반환해야 실행된다.


is_admin_trigger() 함수

image.png

True를 반환하려면 strcmp(v31, Str2)이 0이어야 하므로 v31, Str2 값이 같아야한다.

image.png

image.png

Str2은 is_admin_trigger 배열을 난독화 한 값이다. 바이너리에서 해당 배열의 바이트 값을 살펴 보면 2667riit 임을 확인할 수 있다.

is_admin_trigger_enc = '2667riit'
enc = [ord(c) for c in is_admin_trigger_enc]
dec = []

def decode(enc):
    return ((~enc & 0xEB) | (enc & 0x14)) ^ 0xED

for i, byte in enumerate(enc):
    decoded = decode(byte)
    dec.append(chr(decoded))
    
print(dec) # ['4', '0', '0', '1', 't', 'o', 'o', 'r']

v31 은 사용자가 입력을 저장하는 버퍼이므로 root1004를 입력하면 admin_mode로 진입할 수 있다.

image.png

2. 정답 순열 찾기

image.png