crackme4
사실 엄청나게 쉽게 푸는 방법이 있다.
"0040112A" 의 값인 "JE SHORT test.0040113B" 의 값중 "JE"를 "JMP" 바꿔주면 된다.
하지만 이렇게 풀면 실력이 안오를것 같다.
먼저 코드분석을 위해 serial 값이 딱 들어가기 직전에 Break Point를 걸었다.
첫번째로 중요한 부분은 여기 부분이다.
"ESI"의 값과 "EAX"값을 비교하면 참, 거짓 결과에 따라 JE 함수가 실행된다.
현재 "EAX" 의값은 "7", "ESI"의 값 또한 "7"이다.
여기서 "ESI" 의 값은 "hACKErS" 의 문자길이 이고, "EAX"의 값은 내가 입력한 값의 문자열 길이이다.
즉, 내가 입력해야 할 문자열의 길이는 7글자이다.
두번 째로 중요한 부분이다.
바로 이분이다.
이 두캐의 코드를 실행하면 결국 "ECX"에 "EBP+8"의 값을 넣는다.
현재 "EBP"의 값이 19FEFC 이므로 8 더해주면 19FF04가 나온다.
19FF04의 값은 "hACKErS" 이므로 즉, "ECX"에는 "hACKErS" 값이 들어가게 된다.
다음으로 위 두 코드를 실행하면 결국 "EAX"에 EBP+C"를 집어넣는다.
"EBP"의 값은 위와 같이 19FEFC 이므로 C를 더해주면 19FF08이 나온다.
19FF08은 "asdasd"이다. 즉, "EAX"에는 내가 입력한 값이 나온다.
다음은 아래 함수이다.
SUB 는 ADD 에서 +기호를 -기호로 바꿨다고 생각하면 편하다.
"EAX" 값에서 1을 뺀주값을 다시 :"EAX"에 저장하고 해당 값과 "ECX" 값을 CMP 어셈블리어로 비교하여
값이 참이면 JE 어셈블리어를 점프시킨다.
즉, "EAX" 값은 "ECX" + 1 이 된다.
"ECX" 값이 현재 "hACKErS" 이므로 알파벳을 하나씩 올려 "iBDLFsT" 가 "EAX" 의 값이 된다.
"EAX" 는 내가 넣은 값이라고 했으니 serial 에 "iBDLFsT" 값을 넣어주면?
성공이다.
내부에 대문자와 소문자를 서로 바꿔주는 코드도 있는데, 음...... 그 부분은 솔직히 왜 있는지 모르겠다.
'시스템 보안 > 실습' 카테고리의 다른 글
[System] crackme3번 풀이 (0) | 2023.04.01 |
---|---|
[System] crackme2번 풀이 (0) | 2023.03.20 |
[System] crackme1번 풀이 (0) | 2023.03.18 |