본문 바로가기
Rev/Write-up

HTB - exalton_v1

by zooonique 2021. 1. 20.
반응형

하.. 기본에 충실하지 못했던 문제다.

 

ELF파일을 보면, 패킹이 되어있는지 확인하는게 중요한데....

 

사실 PEID로 검사를 해보긴했는데,

 

PEID는 PE파일만 검사가 가능한가보다... (몰랐다. 나는..)

 

나는 gdb-peda로 디버깅을 시도해보다가 UPX라는 문자열을 발견하고, UPX로 패킹되어있는 것을 알아차렸다.

 

 

 

리눅스 바이너리 언패킹은 어떻게 하지? 했는데, 그냥 윈도우 PE파일 언패킹하듯이 똑같이 하면된다.

 

언패킹을 하고, 해당 바이너리를 다시 IDA에 올리니까...

 

아 이렇게 함수가 많은 파일이었구나 새삼 느낀다....

 

늘 그렇듯이 main을 찾고,

 

main에서 문제이름과 같은 exalton함수를 찾을 수 있었다.

 

 

26째 라인에서 입력을 받고, exatlon함수로 진입한다.

 

C++은 진짜 익숙하지 않다...

 

여기에서도 이상하게 삽질했다.

 

결과를 먼저 말하자면, 내가 입력한 문자열의 어떠한 연산을 한 결과가 저 "1152~"와 같으면 풀린다.

 

디버깅을 해보면, v8이 내가 입력한 문자이고 거기에 16을 곱하는 것을 확인할 수 있다.

 

솔직히 그 외에는 디버깅을 진행하다보면,

 

'아 저기에 내가 입력한 문자가 들어가는구나'를 반복하다가 뭐지...? 하게 됐다.

 

다시 정리해보면,

 

처음에 main함수에서 v9=='q'이면 실행파일이 종료된다.

 

즉 v9에 내가 입력한 문자열이 들어간다.

 

exatlon(v10,v9)를 통해서 v9(내가 입력한 문자열)을 연산하여 v10에 저장하고,  

 

v4 = std::operator==<char> (v10, "1142 ~ ", "784 ~"); 의 비교과정으로 플래그를 띄워준다.

 

반응형

'Rev > Write-up' 카테고리의 다른 글

RaziCTF2020 - Easy Conditions  (0) 2021.01.25
HTB - Nostalgia  (0) 2021.01.22
HTB - Hackybird  (0) 2021.01.18
HTB - Bypass  (0) 2021.01.15
HTB - debugme.exe  (0) 2021.01.13