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
'dreamhack > Reverse Engineering' 카테고리의 다른 글
rev-basic-2 (0) | 2023.02.13 |
---|---|
rev-basic-1 (0) | 2023.02.12 |
rev-basic-0 (0) | 2023.02.12 |