본문 바로가기
CTF/Dreamhack

[Dreamhack] rev-basic-6

by 8희 2024. 4. 28.

https://dreamhack.io/wargame/challenges/20

 

rev-basic-6

Reversing Basic Challenge #6 이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너리를 분석하여 correct를 출

dreamhack.io

 


 

cmd 창에서 파일을 실행해보면 input 값을 입력하라고 하고,

잘못된 값을 입력하면 Wrong이라는 메시지가 출력된다.

 

 

Input 문자열이 있는 곳으로 이동한 후에 

사용자의 입력 값을 비교하는 chall6.7FF7543F1210으로 이동했다.

 

 

movsxd rax, dword ptr ss:[rsp]

cmp rax, 12

rax에 인덱스 길이가 18이 될 때까지 복사한다. 

 

mov eax, byte ptr ds:[rcx+rax]

eax에 사용자 입력 문자열 주소의 인덱스를 저장한다.

 

lea rcx,qword ptr ds:[7FF763CE3020]

테이블 주소를 rcx에 저장한다.

 

movzx eax,byte ptr ds:[rcx+rax]

eax에 rcx에서 rax만큼 떨어진 곳의 값을 복사한다.

 

movzx ecx, byte ptr ds:[rdx+rcx]

ecx에 암호 문자열의 인덱스에 해당하는 값을 복사한다.

 

cmp eax, ecx

eax와 ecx를 비교한다.

 

따라서 이 함 수는

[7FF763CE3020] 주소에 저장된 18개의 값과

[7FF763CE3020] 주소 + 사용자가 입력한 문자 값을 더한 주소에 존재하는 값을

비교하는 함수이다. 

 

[7FF763CE3020] 주소 - (사용자가 입력한 문자 값을 더한 주소에 위치한 값을 출력하기 위한 base 주소)

연산을 하면 플래그를 얻을 수 있다.

 

v1=[
'63','7C','77','7B','F2','6B','6F','C5','30','1','67','2B','FE','D7','AB','76',
'CA','82','C9','7D','FA','59','47','F0','AD','D4','A2','AF','9C','A4','72','C0',
'B7','FD','93','26','36','3F','F7','CC','34','A5','E5','F1','71','D8','31','15',
'4','C7','23','C3','18','96','5','9A','7','12','80','E2','EB','27','B2','75',
'9','83','2C','1A','1B','6E','5A','A0','52','3B','D6','B3','29','E3','2F','84',
'53','D1','0','ED','20','FC','B1','5B','6A','CB','BE','39','4A','4C','58','CF',
'D0','EF','AA','FB','43','4D','33','85','45','F9','2','7F','50','3C','9F','A8',
'51','A3','40','8F','92','9D','38','F5','BC','B6','DA','21','10','FF','F3','D2',
'CD','0C','13','EC','5F','97','44','17','C4','A7','7E','3D','64','5D','19','73',
'60','81','4F','DC','22','2A','90','88','46','EE','B8','14','DE','5E','0B','DB',
'E0','32','3A','0A','49','6','24','5C','C2','D3','AC','62','91','95','E4','79',
'E7','C8','37','6D','8D','D5','4E','A9','6C','56','F4','EA','65','7A','AE','8',
'BA','78','25','2E','1C','A6','B4','C6','E8','DD','74','1F','4B','BD','8B','8A'
]

v2=[
'0','4D','51','50','EF','FB','C3','CF','92','45','4D','CF','F5','4','40','50',
'43','63'
]

result=''

for i in range(len(v2)):
    for j in range(len(v1)):
        if v2[i] == v1[j]:
            result+=chr(j)
            break

print(result)​

 

해당 코드를 실행하면 Replac3_the_w0rld가 출력된다.

 

 

플래그가 맞다는 걸 확인했다!

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

[Dreamhack] rev-basic-8  (0) 2024.05.11
[Dreamhack] rev-basic-7  (0) 2024.05.05
[Dreamhack] rev-basic-5  (0) 2024.04.28
[Dreamhack] Reversing Basic Challenge #4  (0) 2024.04.10
[Dreamhack] Reversing Basic Challenge #3  (0) 2024.04.06