728x90

ida로 chall3 파일을 연다. main 함수에 접근해서 f5 누르면 Pseudocode가 나온다.

입력을 받아 sub_140001000 함수에 전달한다. sub_140001000 함수 결과에 따라 Correct가 출력된다.

sub_140001000 함수의 Pseudocode도 보자.

24 글자를 비교하는데 byte_140003000[i] 과 (i ^ a1[i])+ 2*i 가 한 글자라도 다르면 0 반환한다. 즉, 모두 일치해야한다.

byte_140003000에 가니 24개의 16진수 값들이 보인다.

a1에 입력한 문자열이 들어가기 때문에 a1 문자열을 찾아야한다.

a1[i] =i ^ (byte_140003000[i] - 2*i)

b=[0x49, 0x60, 0x67, 0x74, 0x63, 0x67, 0x42, 0x66, 0x80, 0x78, 0x69, 0X69,
   0x7b, 0x99, 0x6d, 0x88, 0x68, 0x94, 0x9f, 0x8d, 0x4d, 0xa5, 0x9d, 0x45]
a=[]
for i in range(24):
    a.append(i ^ (b[i] - 2 * i))
    print(chr(a[i]),end="")

실행결과

I_am_X0_xo_Xor_eXcit1ng
728x90

'dreamhack > Reverse Engineering' 카테고리의 다른 글

rev-basic-2  (0) 2023.02.13
rev-basic-1  (0) 2023.02.12
rev-basic-0  (0) 2023.02.12

+ Recent posts