본문 바로가기
Reversing/CTF

[DIMI CTF] gorev

by L3m0n S0ju 2021. 8. 6.


문제에서 주어진 파일을 cmd에서 실행하면 위와 같이 암호화된 문자열이 출력된다.


 

 

IDA에 파일을 로드하고 Funtions window에서 main 함수를 찾으면 아래와 같이 디컴파일된 코드를 볼 수 있습니다.

 


 

저도 go 언어는 처음보지만 함수 형태를 보면 의미를 쉽게 유추할 수 있습니다. 아래 코드를 보면 v4는 플래그 길이를 나타내고 byte_4C5F5에서 데이터를 가져와서 20과 xor을 하면 플래그가 출력되지 않을까 유추할 수 있습니다. 아무래도 처음보는 언어이기 때문에 정확한 분석보다는 감으로 찾아야하는 부분이 있습니다. byte_4C5F5와 20을 xor 하면 cmd 에서 파일을 실행할때 출력되는 P]Y]oS{KS$KS[Ks{Ks$Ks[Kf'bqfg}zs5i가 되지 않을까 생각됩니다. 마침 길이도 34이므로 유력합니다.

 

  while ( v4 < 34 )
  {
    v15 = v4;
    v14 = v5;
    v16 = v6;
    *((_QWORD *)&v10 + 1) = byte_4C50F5[v4] ^ 20LL;
    *(_QWORD *)&v10 = 0LL;
    runtime_intstring(v0, v1, byte_4C50F5[v4] ^ 20, (unsigned int)byte_4C50F5, v2, v3, v10);
    runtime_concatstring2(v0, v1, v7, DWORD2(v11), v8, v9, 0, v16, v14, v11, *((__int64 *)&v11 + 1));
    v4 = v15 + 1;
    v6 = v12;
    v5 = v13;
  }

 


byte_4C5F5 ^ 20 = P]Y]oS{KS$KS[Ks{Ks$Ks[Kf'bqfg}zs5i 에서 양쪽에 xor 20을 한번 더 연산을 해주면 byte_4C5F5 = P]Y]oS{KS$KS[Ks{Ks$Ks[Kf'bqfg}zs5i ^ 20 이 됩니다. byte_4C5F5를 파이썬으로 구현해보면 아래 코드와 같습니다.

 

 

 

buf="P]Y]oS{KS$KS[Ks{Ks$Ks[Kf'bqfg}zs5i"
buf2=[]

for i in range(34):
    buf2.append(ord(buf[i])^20)
    print(chr(buf2[i]),end='')

 


결과는 아래와 같이 플래그가 출력됩니다.


사실 위처럼 연산없이 byte_4C5F5 위치로 가면 플래그가 평문으로 출력됩니다.

 

'Reversing > CTF' 카테고리의 다른 글

[HackCTF] Keygen  (0) 2021.10.09
[HackCTF] Strncmp  (0) 2021.09.12
[HackCTF] Handray  (0) 2021.09.11
[HackCTF] Reversing Me  (0) 2021.09.10
[HackCTF] Welcome_REV  (0) 2021.09.10

댓글