선릉역 1번 출구

clop - shellcode 실행 본문

Hacking & Security/Malicious code and Reversing

clop - shellcode 실행

choideu 2022. 7. 26. 13:05

저번에 마지막 쉘코드가 복호화 되었다.

 

그럼 이제 009F0000에 복호화 된 코드가 어떻게 실행되는지 보자

 

이 부분에서 실행시키는 것 같다. 하나하나 차근차근 분석해보자

 

VirtualFree 함수를 실행시키는 부분에 와보니 위에 차례대로 파라미터 값인 8000, 0, 009D0000를 넣어주고 있었다.

stack을 보면 8000, 0, 009D0000이 들어가있다. -> 그런데 009F0000에다가 마지막 복호화를 해주었는데 왜 009F0000이 아닌 009D0000이 들어가는지는 모르겠다. 일단 패스하고 다음에 알아보자.

이 시점에서 009F0000이 다시 009D0000에 덮어씌워졌나했는데 그것도 아니었다.

 

virturalFree는 무엇을 하는 함수인가 -> 아! 할당한 메모리를 Free해주는 함수구나 

: 호출 프로세스의 가상 주소 공간 내 페이지 영역을 해제, 해제 또는 해제 및 해제합니다.

그럼 이제 이해가 간다. 009D0000부분을 해제하는 것이다.

(https://docs.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-virtualfree)

해당 함수를 실행하니 할당된 009D0000이 사라졌다.

 

그 다음

EBP-30에 있는 값인 009F0000을  EAX과 ECX에 넣어준다. (MOV EAX ~, MOV ECX ~)

ECX(ADD)에 009F01000값인 PE를 넣어준다. 그 다음 이 값을 EBP-98이 가리키는 곳(0012FAF8)에 넣어준다.

즉 009C04D9는 v55 = (v119 + *(v119 + 15)); 부분을 실행한 것으로 v55는 0012FAF8이다.

이 함수는 virtualprotect임

1. 00400000 

접근 보호 속성이 변경될 페이지 영역의 시작 페이지 주소.

2. 00027000

액세스 보호 속성이 변경될 영역의 크기(바이트)입니다.

3. 00000040

PAGE_EXECUTE_READWRITE0x40 커밋된 페이지 영역에 대한 실행, 읽기 전용 또는 읽기/쓰기 액세스를 활성화합니다.
Windows Server 2003 및 Windows XP: 이 특성은 Windows XP SP2 및 Windows Server 2003 SP1까지 CreateFileMapping 기능 에서 지원되지 않습니다 .

즉 400000에 해당, 메모리 권한 변경 함수

 

 

virtualProtect 다음으로 나오는 sub_9C1040의 경우 뭐하는 함수인지 들어가서 보니 00400000부터 내용을 초기화 해주는 함수 같았다. -> 실행하니 내용이 지워짐

파라미터 값이 00400000과 00027000이었어서 427000까지 깨끗하게 지워주는 함수가 아닐까? 생각한다.

-> 정답(해당 함수 실행 후 00427000까지 모든 내용이 지워짐)

009C0514 실행 후 dump를 확인했다.

// 이 함수는

memset(baseAddr, 0, *((_DWORD *)v11 + 0x14));// memset(0x400000,0,27000)

 과 같다.

 

base주소부터 특정 영역 만큼의 쓰레기 값들을 지워주는 역할을 하는 함수라고 한다. (Ida마다 이걸 인식하는 게 있고 없는 게 있는듯...)

 

그 다음 분석할 부분은 sub_9C0FA0이다.

v121: 00400000

v119: 009F0000

*(v55 + 21): 00000400 이다.

실행해보니 이 함수는 아까 새로 비웠던 400000에 새롭게 값을 작성하는 overwrite 함수 같다.

근데 dump부분을 보니 27000만큼 작성되지는 않았다. 400을 찾아보니 .text에 해당하는 부분이라고 한다.

.text 영역 이전의 pe 정보들을 덮는 함수임

 

여기는 for문을 통해 overwrite하는 함수임 그럼 얼마만큼 for문을 도는가?

해당 009C057B에서 EAX 값이 00000007으로 총 0에서부터 7전까지 7번을 도는 for문이다.

처음은 401000을 overwrite하는데 009F0400의 값부터 하나씩 읽어와 401000에 overwrite하고 있음 

끝나면 

이 부분은 건너 뛰고 LOBYTE를 실행한다.(https://yokang90.tistory.com/26) 공부를 하자..

파라미터 값은 00400000, LoadLibraryA, GetProcAddress를 준다.

 

 

LOBYTE -> PASS

 

파라미터

v121: 00400000

v99: 00403DB3

이런 함수다. 이것만 보고 무슨 역할을 하는지 도저히 모르겠어서 일단 실행..한다. -> 별거 없는 함수임

 

그리고 나서 이 함수(00403DB3)로 들어가면 signed.00404149을 호출한다.

'Hacking & Security > Malicious code and Reversing' 카테고리의 다른 글

clop - shellcode 복호화 및 압축 해제  (0) 2022.07.26
clop - shellcode 진입  (0) 2022.07.22
clop - binary analysis(복호화 진행하기)  (0) 2022.07.21
실행 압축  (0) 2022.04.07
Nag Screen(2)  (0) 2022.03.25
Comments