Reversing/CodeEngn

[CodeEngn] RCE basic L05 풀이

chan2s 2025. 8. 31. 22:50

Q5. 이 프로그램의 등록키는 무엇인가

[그림 1] 05.exe 최초 실행
[그림 2] 05.exe

이번 프로그램은 올바른 등록키와 serial값을 입력해야 하는 것 같다.

[그림 3] OllyDbg 05.exe 로드

분석하기 앞서서 처음보는 명령어들이 꽤 있었다. 
우선 처음보는 명령어에 대해서 검색을 진행하였고, 그래도 찾아볼 수 없는 내용에 대해서는 gpt의 도움을 받아 정리를 해보았다.

XCHG 첫번째 오퍼랜드와 두번째 오버랜드 교환
FISTP Floating point를 integer로 변환하는 방식 (x86 instruction)
PREFIX CPU 명령어라기보다는 디스어셈블러에서 보여주는 토큰
SALC CF(Carry Flag)의 값에 따라 AL 레지스터에 0x00 또는 0xFF를 넣는 명령어
LOOPD LOOP with DWORD counter로, ECX 레지스터를 1 줄이고(ECX ← ECX - 1),
→ ECX ≠ 0이면 지정된 레이블로 점프.
→ ECX = 0이면 점프하지 않고 다음 명령어 실행.
REPNE repeat not equal, 같지 않으면 반복 [ZF=1이거나 ECX=0이면 멈춤]
ADC 캐리를 포함한 덧셈
SHR 오른쪽으로 오퍼랜드만큼 자리 이동 (최상위 비트 0)
SBB 캐리를 포함한 뺄셈
JNZ 결과가 0이 아니면 분기
AAD 나눗셈 결과 AX값을 UNPACK 10진수로 보정
AAM 곱셈 결과 AX값을 UNPACK 10진수로 보정
NOP 메모리의 오프셋값을 레지스터로 로드
JNB 결과가 크거나 같으면 분기 (부호화 안 된 수)
db name DB 초기값 

| 출처 1 : [Assembly] 어셈블리어 명령어 총정리
| 출처 2 : ★어셈블리어, 문자열 비교 명령어(cmpsb, cmpsw, cmpsd, repe, repne) : 네이버 블로그

여기서 캐리는 (Carry Flag, CF)로 CPU의 플래그 레지스터 안에 있는 비트 하나이며
덧셈/뺄셈 연산에서 자리올림(overflow)이 발생했는지를 기록하는 역할을 한다.
더 자세한건 플래그를 정리해둔 글을 검색해서 찾아보는 편이 좋을 것 같다.
ollydbg로 분석을 해보다가 처음보는 구조에 당황했어서 IDA로도 05.exe를 로드했다.

[그림 4] IDA 05.exe 로드

05.exe를 로드하자마자 UPX1 이라는 문구를 확인해 볼 수 있었다.

[그림 5] UPX 검색 결과

UPX는 오픈소스 기반 실행 파일 압축 프로그램으로, UPX라는 압축형식으로 인해 처음보는 구조를 ollydbg로 확인해 볼 수 있었다.
추가적으로 더 검색해본 결과 UPX 언패킹 툴이 있다는 것을 알아내었고, 이를 활용해보기로 했다.

UPX 언패킹 툴 사용법 : [Window] UPX 언패킹 툴 다운로드 및 사용법
UPX 언패커 windows 버전 다운로드 : UPX: the Ultimate Packer for eXecutables - Homepage 

 

UPX: the Ultimate Packer for eXecutables - Homepage

Welcome UPX is a free, secure, portable, extendable, high-performance executable packer for several executable formats. Introduction UPX is an advanced executable file compressor. UPX will typically reduce the file size of programs and DLLs by around 50%-7

upx.github.io

[그림 6] UPX 언패킹 툴 다운로드 버전

Github에 UPX 언패커 다운로드 목록 중 upx-4.2.4win64.zip을 다운로드 받아서 실행했다.

[그림 7] UPX 언패커와 05.exe

UPX 언패커가 들어있는 폴더 안에 05.exe도 같이 있어야 사용가능하므로 upx언패커 폴더안에 05.exe를 넣어 주고 실행했다.
이때 기존의 05.exe를 변화시키기 때문에 05.exe를 복사해서 넣어주었다.  

[그림 8] 05.exe upx 언패킹

cmd창에서 upx 언패커 파일 경로로 접속한 뒤 upx 언패킹 툴에서 사용할 명령어는 다음과 같다

upx -d 언패킹할 파일

따라서 05.exe를 upx 언패킹 할 것이므로, upx -d 05.exe 를 입력하면 된다.

[그림 9] ollydbg 언패킹한 05.exe 로드

upx 언패킹한 05.exe는 upx 언패킹 툴 폴더안에 있는 05.exe 파일을 그대로 로드하면 된다.
이후 Ollydbg로 열어보면 ASCII로 시리얼과 등록키를 확인해 볼 수 있었다.

[그림 10] 입력 값 검증

'Registered User', 'GFX-754-IER-954'로 성공적으로 Serial키 등록에 성공했다.

'Reversing > CodeEngn' 카테고리의 다른 글

[CodeEngn] RCE basic L07 풀이  (2) 2025.09.01
[CodeEngn] RCE basic L06 풀이  (3) 2025.09.01
[CodeEngn] RCE basic L04 풀이  (0) 2025.08.31
[CodeEngn] RCE basic L03 풀이  (1) 2025.08.29
[CodeEngn] RCE basic L02 풀이  (1) 2025.08.29