디버거 : CheatEngine
분석환경 : Window 10


해당 프로그램을 확인해본 결과 UPX(1.01)로 패킹이 되어 있고 Delphi로 개발된걸 확인.
어차피 실행된 프로그램을 치트엔진으로 분석할거기 때문에 따로 언패킹 할 필요가 없어서
upx 언패킹하는 과정은 생략..
x64dbg로 붙이고 트레이스하며 분석하려면 언패킹 과정이 필요하다.
이유는 실행압축 이기 때문에 프로그램을 실행하기 전엔 압축되어 코드 섹션의 압축과 암호화 많은 양의 데이터가
끼워 들어가기 떄문에 EP를 정상적으로 확인 할수없고
코드가 뒤죽박죽으로 보인다.
하지만 후에 프로그램이 실행되는 마지막 과정에 압축이 풀리면서 코드를 정상적으로
확인 할수있다.
이런 특징 떄문에 자신의 프로그램을 보호 하기 위한 용도로 사용되었지만..
실행압축 특성상 프로그램이 실행되고 압축이 풀리면서 원본 코드가 그대로 다시 노출된다는 점이
내 프로그램을
안전하게 보호하기엔 역 부족이다.
그래서 프로텍터 라는 패킹 툴이 나왔지만 프로텍터는 각종 안티디버깅 ,난독화 , 암호화 등등 여러 기술이
적용되어 분석을 힘들게 한다. 대표적으로 더미다(Themida), VMProtect, Winlicense 등이 있다.

해당 프로그램을 실행해봤더니 계정ID와 시리얼 키를 입력하여 성공 메세지를 받도록 하는게 이번 문제 해답인듯 하다.

메세지박스로 뜨는 문자열을 추적하여 우선 메세지박스를 띄우는 주소를 찾아준다.
우선 제일 첫번쨰로 보이는 문자열 Registered User 부분을 확인해보면
mov eax,[ebp-04] //[ebp-04]에 내가 입력한 계정ID 문자열이 담긴 주소가 들어감
mov edx,05.exe+41014 //Registered User 문자열이 담긴 주소가 들어감
내가 입력한 계정 ID 문자열과 Registered User라는 문자열이 담긴 주소를 해당 레지스터에 넣고
뒤에 어떤 함수를 호출 하는 것을 볼 수 있다.

역시 문자열을 받은 eax와 edx를 서로 비교하는 명령어가 보인다.
이것으로 계정 ID는 Registered User 인 것을 확인 할수 있다.

언뜻 봐도 시리얼로 추정되는 문자열과 함께
앞에 계정 ID와 똑같은 방법으로 문자열을 비교하는 코드가 보인다.
이제 획득한 계정 ID와 시리얼을 입력해보면..

'Reversing > CTF' 카테고리의 다른 글
| CodeEngn Basic RCE 07 문제 풀이 (0) | 2022.05.08 |
|---|---|
| CodeEngn Basic RCE 06 문제 풀이 (0) | 2022.05.07 |
| CodeEngn Basic RCE 04 문제 풀이 (0) | 2022.05.07 |
| CodeEngn Basic RCE 03 문제 풀이 (0) | 2022.05.07 |
| CodeEngn Basic RCE 02 문제 풀이 (0) | 2022.05.07 |