Code Enigne Basic 5
프로그램의 등록키를 찾는것이 이번 목표입니다.
우선 프로그램을 실행시켜보겠습니다.
파일을 실행시키면 이런 창이 뜹니다
Unregistered에 crackme라고 입력 후 Register now!를 눌러 보겠습니다.
잘못된 시리얼이 라고 거절당했다. 이번에는 이것을 올리디버그로 열어봅시다.
처음 PUSHAD로 되어있는 것으로 보아 UPX패킹 되어있을 확률이 높습니다.
UPX는 단순한 압축 기술중 하나입니다.
EXEINFO PE로 확인해 보니 UPX로 패킹되어있습니다. UPX패커로 풀어보겠습니다..
UPX패커로 풀어주면 이렇게 풀었다고 나옵니다.
이제 다시 프로그램을 올리디버그로 실행시켜보겠습니다.
아까보인 Warning창을 찾기 위해
오른쪽 마우스 – Search for – All referenced text strings를 누릅니다.
실패 문구열을 찾았습니다. 들어가 봅시다.
코드를 실행해보니 저기 JNZ가 Wrong문구를 결정하는 코드인 것 같습니다.
보통 JNZ, JE등 점프문들은 바로 위 코드에 CMP코드를 통해 비교 후 점프를 하는데 지금은 비교코드가 없습니다.
대신 함수를 Call하고 있지요. 그렇다면 바로 위 코드에서 호출하는 부분이 있는 것 같습니다.
등록키 값은 원하는 대로 적어서 넣도록 합시다.
F7키를 눌러서 함수 안으로 들어가 봅시다.
들어가서 보게 되면 CMP EAX, EDX를 비교해서 같으면 JE를 통해 점프를 합니다. JE는 두값이 같을 때 점프를 합니다.
현재 EAX와 EDX를 비교해보면 나는 아까 등록키를 입력할 때 1107을 입력했습니다.
제로 플레그가 0이 되려면 EAX가 Registered User가 되어야 합니다.
즉 등록키를 입력할 때 Registered User를 입력해야한다는 것입니다. 한번 입력 후 실행해 보면 JNZ가 실행되지 않습니다.
이렇게 하고 Register now!를 누르면
ZF가 1이 반환되어 JNZ에서 점프를 하지 않는 것을 알 수 있습니다.
계속 밑의 코드를 실행해 봅시다.
보면 그 밑의 코드에도 JNZ가 하나 더 있습니다. 아까처럼 F7을 통해 Call해주는 함수로 들어가 봅시다.
이전처럼 CMP EAX, EDX와 JE가 나왔습니다. 이번에도 EAX와 EDX를 비교합니다. 현재 EAX는
아까 입력했던 두 번째 창의 값입니다.
GFX-754-IER-954로 다시 넣어주고 실행시켜봅시다.
그럼 JNZ는 실행을 하지 않게 되고
이렇게 성공했다는 창이 뜨게 됩니다.
결국 키값은 이렇게 됩니다.