코드엔진 Basic RCE L05를 IDA로 분석하여 풀어보려고 한다.
문제는 다음과 같다.
프로그램을 실행해보면, 이렇게 name과 serial을 입력하라고 하고 틀린 값을 입력하면 "Wrong Serial, try again!"이라는 창이 뜬다.
프로그램을 Detect It Easy에 올려보았다. UPX로 압축되어있다고 뜬다.
그리고 upx.exe와 실행 프로그램을 같은 폴더 내에 두고, upx -d -o 05_unpacked.exe 05.exe
라는 명령어를 입력해준다.
압축을 푼 파일을 IDA에 올려서 열어준다. 이런 복잡한 코드가 나오는데, 해석이 어려워 일단 처음에 나왔던 "Wrong Serial, try again!" 문자열을 찾기로 했다.
그래서 [shift + f12]를 눌러 문자열을 찾았고, 위로 올려가며 그 문자열이 사용된 어셈블리 코드도 찾았다. 그 코드 주변에서 "Congrats! You cracked this CrackMe!”문자열도 찾을 수 있었다.
"Congrats! You cracked this CrackMe!”가 있는 줄에서 스페이스를 눌러 어셈블리 그래프가 나오게 했다.
"Congrats! You cracked this CrackMe!”와 "Wrong Serial, try again!"을 가르는 부분에 call @System@@LStrCmp$qqrv
가 있었고, 이게 문자열을 비교하는 함수라는 생각이 들었다. 그래서 call @System@@LStrCmp$qqrv
윗부분을 주의깊게 봤는데, 어떤 변수를 확인할 수 있었다.
그 변수를 더블클릭해서 들어가보니, GFX-754-IER-954
라는 문자열이 저장되어있었다.
결론적으로 이 문자열을 cmp함수로 비교하여 GFX-754-IER-954
이면 "Congrats! You cracked this CrackMe!”를, 틀리면 "Congrats! You cracked this CrackMe!”를 출력하는 것을 알 수 있다.
사실 IDA에서
GFX-754-IER-954
이 문자열을 바로 찾지 못해서 x64dbg에서 확인해봤었다. x64dbg에서는 비교적 쉽게 시리얼값을 확인할 수 있다.(문자열이 눈에 잘 띈다)