반응형

10.exe
0.13MB
10_dump.exe
0.30MB
10_dump_SCY.exe
0.31MB

 

 


 

 

Basic RCE 10번 문제는 Aspack으로 패킹이 되어 있다.

 

Aspack도 UPX와 같이 PUSHAD - 암호화 해제 코드 - POPAD - RETN 이다.

 

 

456001 주소에 pushad가 있다.

 

UPX와 비슷하게 pushad와 popad로 둘러싸여 있는데, pushad와 popad를 이용한 언패킹 방법을 ESP Trick이라고 한다.

 

pushad는 8개의 범용 레지스터 eax, ebx, ecx, edx, esi, edi, esp, ebp의 값들을 스택에 저장한다.

 

popad는 스택에 저장해뒀던 값들을 8개의 범용 레지스터 eax, ebx, ecx, edx, esi, edi, esp, ebp에 저장한다.

 

 

ESP Trick 기법은 프로그램 실행 시 모든 레지스터들을 스택에 저장한 후 언패킹 루틴이 끝난 뒤 OEP로 가기 전에 POPAD를 이용하여 스택에 저장해뒀던 값들을 복원하고, OEP로 점프하는 것을 이용한 언패킹 기법이다.

 

PUSHAD 명령이 실행되고 나서 ESP에 하드웨어 BP를 걸고 실행하면 POPAD가 실행되고 BP가 걸린 곳에 접근하게 되면서 프로그램이 멈춘다.

 

이 상태에서 F8을 이용해 한 줄씩 따라가다보면 OEP로 갈 수 있다.

 

 

456001 주소의 PUSHAD 명령어가 실행된 후 스택을 보면 레지스터들의 값들이 저장되어 있다.

 

 

위의 사진처럼 덤프 창에서 19FF58 주소로 이동 후 하드웨어 BP를 건 뒤 F9 키를 눌러 실행한다.

 

 

그러면 위의 사진과 같이 popad 명령어 바로 다음 주소에서 멈추게 된다.

 

 

그리고 F8 키를 몇 번 누르면 456501 주소의 ret 명령에 의해 OEP로 이동된다.

 

 

위의 사진이 OEP 부분이다.

 

OEP의 값은 445834이다.

 

 

문자열 찾기 기능을 이용하면 위와 같이 문자열들이 뜨는데, 이 중 "Registered ... well done!" 이라는 문자열이 있다.

 

이 문자열을 더블 클릭해 이동한다.

 

 

위의 사진 부분이 등록 성공 했을 때 메세지를 출력시키는 부분이다.

 

 

"Name must be at least 5 characters long!"이라는 문자열이 있다.

 

Name의 값은 5글자 이상이여야 한다.

 


풀이

 

 

OPCODE는 00445834이다.

 

 

"등록 성공"으로 가는 분기점은 4454D4 주소의 jne 명령어이다.

 

403C70 주소의 함수를 호출 후 반환값이 0이 아니면 44552B 주소로 점프하고, 함수 호출 후 반환값이 0이면 "등록 성공" 메세지를 띄운다.

 

4454D4 주소의 JNE 명령어의 OPCODE는 7555이다.

 

그러므로 문제의 답은 아래와 같다.

 

004458347555

 


OEP로 이동 후 덤프 뜨기

 

1. IAT Autosearch 

2. Get Imports

3. Dump를 눌러 새로운 파일로 저장

4. Fix Dump를 눌러 저장한 새 파일을 Fix

5. 새로 생성된 SCY 파일로 분석

 

 

위의 사진에서 보면 x32dbg에서 위 메뉴들 중 빨간색으로 'S'가 아이콘인 Scylla를 누른다.

 

 

IAT Autosearch를 누른다.

 

 

그 다음 GetImports를 누르면 Import 정보들을 얻어온다.

 

 

Dump를 눌러 다른 파일로 저장한다.

 

 

Fix Dump를 누른 후 10_Dump.exe를 선택해 Fix 한다.

 

 

그러면 위와 같이 SCY 파일이 생성되는데, 이 파일을 디버깅 하면 된다.

 

 

그럼 위와 같이 바로 OEP를 확인할 수 있다.


https://blog.naver.com/PostView.nhn?blogId=interr0bang&logNo=220964702302&parentCategoryNo=&categoryNo=31&viewDate=&isShowPopularPosts=true&from=search

 

 

 

반응형

'전쟁 > codeengn' 카테고리의 다른 글

[codeengn] Basic RCE 12  (0) 2022.07.29
[codeengn] Basic RCE 11  (0) 2022.07.28
[codeengn] Basic RCE 09  (0) 2022.07.28
[codeengn] Basic RCE 08  (0) 2022.07.28
[codeengn] Basic RCE 07  (0) 2022.07.28

+ Recent posts