Home [Hackthebox] Exatlon
Post
Cancel

[Hackthebox] Exatlon

키워드: Reversing

describtion

코드 분석


처음에 문제파일을 받으면 실행이되지 않아서 strings 명령어로 확인해보면 UPX라는 단어를 찾을 수 있었고 구글링을 통해서 압축 프로그램이라는 것을 알 수 있었다. 아래의 명령어로 압축을 풀어준다.

1
upx -d <file_name>


그러면 ida로 정상적으로 확인이 가능했다. main 함수를 보면 누가봐도 플레그로 추정되는 정수 값들이 있었다. v4 변수에 의해서 분기가 이루어지고 있고 v10이 사용자 입력 값으로 추측할 수 있다.
presudo


하지만 일반적인 바이트 형태가 아니었기 때문에 어떻게 저런 값들이 나오는지 확인해 볼 필요가 있다. 따라서 gdb를 이용한다. 정수 값들이 rsi 레지스터에 들어가기 전인 0x404D2D를 브레이크 포인트로 잡아주고 HTB{ 를 입력한다.
textview
gdb


그리고 i r 명령어를 통해 레지스터 값들을 확인해본다. ir


사용자의 입력 값은 앞서 rax 레지스터에 있을 것으로 판단되므로 그 부분을 확인해보면 다음과 같이 비교하는 정수 값과 일치한다.
examine


확인을 위해서 ABCDEF를 입력해보면 정확히 16씩 증가하는 것을 알 수 있다. abcdef

Get Flag


1040을 16으로 나누면 65이다. 이는 아스키 65번 즉 A를 나타낸다. 따라서 모든 정수를 16으로 나누어주면 된다.

1
2
3
4
5
6
7
8
9
info = lambda x: print(f'[+] {x}')


key_array =[1152,1344,1056,1968,1728,816,1648,784,1584,816,1728,1520,1840,1664,784,1632,1856,1520,1728,816,1632,1856,1520,784,1760,1840,1824,816,1584,1856,784,1776,1760,528,528,2000]
flag =''

for i in key_array:
    flag += chr((i//16))
info(f'Flag is {flag}')


간만에 gdb 써본다. 처음에는 맥북에서 도커를 통해 gdb 환경을 구성하려고 했지만 어떠한 이유에서인지 계속 아래처럼 뜬다… 그래서 짱나서 걍 윈도우 컴에서 돌렸다.
error

[Journal] 불꽃은 목적이 아니야

[Hackthebox] Toxic

Comments powered by Disqus.