이번 문제 역시 문자열 찾기로 main함수가 있는 부분을 찾았다.

0,1번과 비슷하게 입력을 받고 맞으면 correct 틀리면 wrong을 출력하는 문제이다.

이 부분에서 뭔가를 비교하는 것 같다.

뭔가 비교하는것 같은 부분을 더블 클릭으로 자세히 들어왔다.

cmp부분을보면 [rcx+rax*4]와 edx를 비교하는 것을 볼 수 있다.

lea rcx,qword ptr ds : [7FF641CC3000]부분을 통해 7FF641CC3000에 비교할 값이 저장되있는 것을 알 수 있다.

 

덤프를 따라가보면 flag로 보이는 것을 찾을 수 있었다.

Comp4re_the_arr4y

Data Transfer
MOV

데이터 이동,전송

PUSH

오퍼랜드의 내용을 스택에 쌓는다

POP

스택으로부터 값을 뽑아내는

XCHG

첫번째 오퍼랜드와 두번째 오퍼랜드 교환



Arithmetic

ADD

캐리를 포함하지 않은 덧셈

SBB

캐리를 포함한 뺄셈

DEC

오퍼랜드 내용을 감소

NEG

오퍼랜드의 2의 보수, 부호 반전

CMP

두개의 오퍼랜드를 비교한다

ADC

캐리어를 포함한 덧셈

INC

오퍼랜드 내용을 1증가

SUB

캐리를 포함하지 않은 뺄셈



Logic

NOT

오퍼랜드의 1의 보수, 비트반전

SHL/SAL

왼쪽으로 오퍼랜드만큼 자리 이동

SHR

오른쪽으로 오퍼랜드만큼 자리 이동

SAR

오른쪽으로 자리이동, 최상위 비트는 유지

AND

논리 AND

TEST

첫번째 오퍼랜드와 두번째 오퍼랜드를 AND해 그 결과로 플래그 세트

OR

논리 OR

XOR

배타 논리 합


Control Transfer

CALL

프로시저 호출

JMP

무조건 분기

RET

CALL로 스택에 PUSH된 주소로 복귀

JE/JZ

결과가 0이면 분기

JP/JPE

패리티  플래그가 1이면 분기

 

 

참고

https://hongci.tistory.com/25

문제를 실행해보니 이러한 메세지가 나왔다.

 

 

문자열찾기로 main찾기

je 부분을 jmp로 바꾸는 방법

je를 jmp로 바꾸어 EAX값과 ESI값 상관없이 점프하도록 수정해 해결하는 방법이다.

이방법외에 eax와 esi값을 갖게 만들어서 해결하는 방법도 있다.

 

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

0번문제처럼 input을 통해 뭔가를 입력받으려하고있다.

main을 찾기 위해 문자열 찾기에 들어왔다.

또 test eax, eax가 있다 무언가를 비교해서 -0번 문제와 같이 correct, wrong을 출력해주는 것 같다.

test위에 함수호출하는 call에 들어갔다.

오른쪽에 알파벳을 이어보면 Compar3_the_ch4ract3r이 나오는 것을 알 수있다.

+ Recent posts