# crackme #1
- 어셈블리어로 작성된 코드라 매우 깔끔
- 크랙 연습 공개 프로그램 - Error 메세지 창을 OK창으로

주어진 파일을 Immunity Debugger로 열어서 F8을 계속 누르면서 확인을 해준다.
코드가 진행되면서

이런 첫번째 메세지 박스가 뜨는걸 확인 할 수 있고 여기서 확인을 누르고 계속 F8을 누르면

쭉 진행되어서 00401036부분에서 에러메세지가 끄는걸 확인할 수 있다. 여기서 계속 진행하면 OK창이 뜨는게 아니라 함수 밖으로 빠져나가면서 종료된다. 이걸 OK창이 나오도록 고쳐야 한다.
<1)패치를 통해 코드의 프로그램을 수정하기>

화면에 보이는 00401026에는 JE SHORT 0040103D라는 명령어가 적혀있다.
여기JE는 조건분기로, JUMP if equal 이다. 즉, ZF플래그가 1로 설정되면 0040103D로 점프하라는 뜻이다.
여기서 401018 주소의 call 명령어의 결과로 담긴 eax의 값과 esi의 값은 다르기에 ZF 플래그가 1로 설정되지 않고, 그러므로 401026 주소의 je 명령어가 실행되지 않고 401028 주소로 간다. 즉 OK창이 아니라 에러 창이 뜨게 되는것이다.

그래서 이걸 JMP 0040103D로 바꿔주면
(cf. JMP : 바로 JUMP)

에러창은 건너뛰고 OK창이 바로 뜨는걸 확인할 수 있다!
<2. 코드의 값을 변경시켜서 크랙하는 방법>
CMP : 두개의 값 비교


여기까지 비교했을때 EAX와 ESI의 값이 같으면 00401026의 JE명령어가
00401026에 JE SHORT 0040103D를 보아 위의 EAX와 ESI의 값이 같으면 0040103D로 점프하라는걸 알 수 있다. 하지만 실행하면 해당 위치로 이동하는게 아니라 그냥 밑으로 진행된다. 이는 EAX와 ESI의 값이 다르다는 뜻이다.
처음부터 다시 실행하면서 내려오면, 이 위치까지 총 EAX는 1증가, ESI는 3증가한걸 볼 수 있다.
INC : 값을 1씩 증가
00401018과 0040103B 사이에 INC ESI가 3번, DEC EAX가 두번 있는데 결과값이 EAX는 1, ESI는 00400003이므로 INC ESI 두번을 NOP으로 바꿔주면 결과값이 둘다 1만 증가한것으로 같을것이다.
하지만 00401000만큼의 차이가 현재 존재하기 때문에 이를 맞춰줘야 한다.

레지스터 창에서 더블클릭해서 직접 0으로 세팅해준 후, INC ESI 두번을 NOP으로 바꿔주면 결과적으로 EAX와 ESI의 값이 같아진다.

진행해보면

바로 OK창이 잘 뜨는걸 확인 할 수 있다.
'Security Study > SWUFORCE' 카테고리의 다른 글
[클라우드] AWS 인프런 - 0. 클라우드 서비스 개념과 보안 이해 (0) | 2023.04.27 |
---|---|
[기술보고서] 삼성SDS - 제로 트러스트(Zero Trust), 보안과 신뢰의 고정관념을 깨다 (0) | 2023.04.24 |
[기술보고서] 삼성 SDS - 삼성SDS가 제공하는 기업 맞춤형 클라우드 Samsung Cloud Platform(SCP) (0) | 2023.03.30 |
[기술보고서] 삼성 SDS - CSP·MSP 선택 시 고려사항 (0) | 2023.03.27 |
[기술보고서] 서핏 - 개방형 AI의 성공 : 스테이블 디퓨전과 ChatGPT (0) | 2023.03.21 |