히공

SSTF2020 - CRACKME101 본문

write up

SSTF2020 - CRACKME101

heegong 2020. 9. 16. 12:12
728x90

SSTF의 CRACKME101 문제를 풀어보겠습니다.

 

 

 

 

 

 

ida로 본 메인함수

 

 

 

 

 

 

 

 

 

 

 

 

 

rbp-78Dtd>=mhpNCqz?N!j(Z?B644[.$~96b6zjS*2t&

 

rbp-70scanf페스워드를 입력받는것

 

 

 

 

 

 

 

 

 

 

 

 

rbp-70(입력한 페스워드값)을 인자로 넣는것을 볼 수 있다.

 

똑같은 인자를 두번 전달함

(인자의 주소를 전달함)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

rbp-18이 받아온 인자값이다.

rbp-20도 받아온 인자이다.

 

rbp-8부분에 u7fl(3JC=UkJGEhPk{q`/X5UzTI.t&A]2[rPM9 이거를 넣는거를 볼 수 있다.

 

페스워드값으로 strlen쓰는것을 볼 수 있다. (call sub_10b0  strlen이다.)

 

strlen리턴값만큼 for문을 돌리는 것을 볼 수 있다.

 

그리고  rbp-20[i] = rbp-8[i] ^(xor연산) rbp-18[i]  라고 볼 수 있다.

인자의  주소를 넘겨주었던 거기 때문에

입력한 페스워드의  값 자체가 바뀐다고 알 수 있다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1
for(int i=0; i<strlen(입력페스워드)&& “Dtd>=mhpNCqz?N!j(Z?B644[.$~96b6zjS*2t&”[i] == 함수로인해바뀐페스워드[strlen(입력페스워드)-i-1;i++)
cs

 

이라고 볼 수 있다. 그리고 for문을 다 끝내서 strlen(입력페스워드) 값이 i값이라 같아야 성공이 출력이 되니깐

 

Dtd>=mhpNCqz?N!j(Z?B644[.$~96b6zjS*2t&”[i] == 함수로인해바뀐페스워드[strlen(입력페스워드)-i-1]  

 

여기를 맞춰야 한다고 볼 수 있다.

 

 

 

 

 

 

 

그러면 생각해볼것은 저값들을 가지고 역연산을 해서 페스워드를 구하는 것이다.

xor의 역연산을 이용해보면 된다.

 

 

 

 

 

 

 

 

간단한 파이썬 코드로 구할 수 있다.

 

 

 

 

 

 

 

flag : SCTF{Y0u_cR4ck3d_M3_up_t4k3_7h15_fL49}

 

 

 

 

 

'write up' 카테고리의 다른 글

제 24회 POC 해킹캠프 CTF Write up  (0) 2022.02.21
Comments