먼저 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 |