ch@e
article thumbnail
Published 2023. 3. 20. 21:50
crackme4 실습 System & Reversing 실습

먼저 crakme4를 실행해보았다.

다음 줄에서 실행이 시작된다.

 

아무 구문을 입력했을 때는 

fail이라는 구문이 뜨게 되고 

 

F8을 통해 실행 창이 뜨는 부분에 들어가보기로 했다.

 

아래 줄(00401481)을 지나가게 될 때 값을 입력해주라고 뜬다.

값을 입력해주고

파란줄 아랫줄인 00401120까지 들어가본다. 

타고 타고 쭉 들어가보면

이 부분에서 글자 길이수를 알 수 있었다. (( esi와 eax를 비교하여 결과에 따라 je 함수가 실행하게 된다고 나와있다.)) 

오른쪽 레지스터 값을 보게되면 아래와 같이 나온다.

 

 

ㄴㄴ

먼저 eax가 내가 입력한 값의 글자수라는 걸 알수 있었다. (계속 풀다보니 입력한 값의 글자수가 eax에 보이는 것을 알 수 있었음)

 

esi의 값은 계속 7이라는 것을 알 수 있었고 eax의 값만 바뀌는 것이니 (cmp esi, eax) esi와 eax의 숫자의 글자수가 같으면 je 함수가 넘어가게 되는 것을 알 수 있었다.

 

먼저 확인해보기 위해  aassdd를 입력해보았다.

 

위와 같이 뜬다.

그래서 다시 7자리 수를 입력해보면

 

je함수에 의해 이곳으로 넘어오게 된다.

 

바로 아래 내려가서 분기문에 오게 되면

 

이 분기문에서 레지스터 값이 바뀐다는 것을 알 수 있었고(대소문자가 계속 바뀜) 이 곳을 중심으로 분석해보았다.

 

 

하나하나 캡쳐하기 어려워서 풀어서 설명해보면 (레지스터 값과 같이 보면서)
arg1 값을 eax로 이동,
eax값을 edx값으로 복사
(movsx: 두번째 내용을 첫번째 내용에 복사하는데 확장되지 않고 나머지 비트 공간을 1로 채움)
그럼 eax = edx
arg2 값을 edx 넣기


이렇게 레지스터값을 확인해보면서 정리하다가 내려가다 보면

결론적으로  eax에서 1을 빼준 값을 eax 저장하고 그 값과 ecx를 비교해 참이면 je를 만나게 된다
그래서 eax 값은 ecx+1이다.


그러므로 hACKErS에 +1 값을 해 아스키 코드를 보고 +1 값을 해주게 되면 iBDLFsT값이 나오게 된다.  (한칸씩 아래로)

 

'System & Reversing 실습' 카테고리의 다른 글

crackme3 실습  (0) 2023.03.20
crackme2 실습  (0) 2023.03.19
crackme1 실습  (0) 2023.03.13
profile

ch@e

@ch@e

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그