티스토리 뷰

[Malware analysis] Malwarebytes CrackMe: a step-by-step tutorial


본 블로그에서는 생략된 부분이 많이 있음


참조

https://blog.malwarebytes.com/malwarebytes-news/2017/11/how-to-solve-the-malwarebytes-crackme-a-step-by-step-tutorial/


- 샘플 파일 다운로드


정적 분석 

파일 

1번 훈련용 샘플.exe 

파일크기 

175.0 KB 

MD5 

473CE8A8B5C6BA36BB796A1673EE8751 

1번 훈련용 샘플.exe 


 BinText

        파일 내부의 문자열들을 확인 시 VBOX라는“HARDWARE\ACPI\DSDT\VBOX__” 가상 머신과 관련된 코드가 있을 것으로 예측할 수 있다. 

BinText


   IDA Pro 

BinText 활용하여 본 문자열을 확인 할 수 있으며, Flag 값 획득이 필요할 것으로 보여진다. 

 

Main(함수 


  1. 동적 분석 

파일을 직접 실행시켜 파일, 레지스트리, 네트워크 등을 동작 행위를 분석한다. 


Malware Defender 

Malware Defender을 이용하여 파일 및 네트워크등의 동작 행위는 없었다. 


실행화면 

실행 시 “I am so sorry, you failed! L:”를 보고 성공한 문자열도 있다는 예측 할 수 있다. 또한,  Flag 값을 구하는 것이 필요할 것으로 보여진다. 

 

실행 화면 


AL 레지스트리 값에 따라 달라지는 것을 확인 할 수 있다. 위의 함수 0x4014F0 자세히 살펴보자

 

조건 분기문 


  1. 상세 분석 

  • 상세 분석한 내용들을 정리한 페이지로 훈련용 샘플에 적용된 안티 디버깅, 안티 VM 기법에 대해 확인 후 데이터 값을 확인한다.


  • IsDebuggerPresent, CheckRemoteDebuggerPresent API 안티 디버깅

    RaiseException API 안티 디버깅

    Hardware BP 기반 안티 디버깅

    PEB 구조체를 통한 안티 디버깅

    QueryDosDevice을 이용한 가상 환경 안티 VM

    레지스트리 키를 이용한 가상 환경(Virtual Box) 안티 VM

    현재 프로세스 모듈의 이름을 확인하는 안티 VM, 안티 디버깅

    현재 프로세스 이름을 확인하는 안티 VM

    Rdtsc(ReaD TimeStamp Counter)을 이용한 안티 디버깅


  • 안티리버싱 참조

  • https://jeongzzang.com/101

FLAG 획득에 필요한 데이터를 모두 얻었다 (생략)

 

FLAG 획득

인코딩된 데이터 디코딩  

0x12F80C 주소에 v1~v32 저장되었다. 이후 0x4031C0을 살펴보자. 

 

인코딩된 데이터 


v1~v32 인코딩된 데이터가 복호화된 것을 확인 할 수 있다. (복화화 URL 그림과 다름, 주소 변경)

 

복호화 URL


중간정리 

  • 현재까지 내용을 정리하면, 0x4014F0 함수 내에서 다양한 안티 디버깅을 통과하여 얻은 데이터와 v1~v32 인코딩된 데이터는 복호화를 통해 URL을 얻었다. 


즉, 0x40197B 주소에서 0x4014F0 함수의 결과 값에 따라 프로그램이 종료되거나 다음 단계의 루틴을 진행하는데, 현재 URL 복호화까지 성공하였고 계속해서 0x4019A5로 분기한다.


  URL 접속 후 인코딩된 데이터 디코딩 하기 
  • InternetOpenUrl(), InternetOpenReadFile()을 이용하여 복호화된 URL에 접속하여 인코딩된 데이터를 버퍼에 저장한다.  

 

0x4033D0 주소

 

 0x406B20 주소는 Clipboard API가 보이며, GetClipBoardData()을 이용하여 현재 시스템의 클립보드 내용 정보를 가져오는 것을 확인 할 수 있다. 해당 클립보드 내용은 “malwarebytes”가 되어야 하며 이유는 이후 0x4011A0 주소에서 XOR malwarebytes를 통해 디코딩하는 과정을 진행하기 떄문이다. 디코딩된 데이터를 확인 시 “MZ” 파일 시그니처를 확인 할 수 있다.  

 

key 생성  xor 복호화 


프로세스를 Suspend 모드로 실행 

생성한 프로세스에 읽기/쓰기/실행 권한을 갖는 새로운 메모리를 할당 

할당된 메모리 주소에 교체할 PE 데이터를 덮어씌움 

할당된 메모리 주소로 이미지 베이스 변경 

생성한 프로세스의 EntryPoint를 새로운 PE 데이터의 EntryPoint로 변경 

ResumeThread API를 이용하여 Suspend 상태였던 프로세스를 실행 

(교체된 PE가 실행됨) 

ProcessHollowing 단계 


  1. Flag값 찾기 

현재까지 다양한 안티VM & 디버깅 기법과 Process Hollowing 기법을 확인했다. 마지막으로 Flag 값을 찾아보자

Flag 값을 얻기 위해서는 rundll32.exe이 system32경로 비교가 필요하며, 디버깅 유무와PROCEXPL(프로세스 익스플로러) 실행인 경우에 최종적으로 아래와 같은 화면을 확인 할 수 있다. 

 

Flag 화면 






댓글
댓글쓰기 폼
공지사항
«   2020/08   »
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          
Total
152,094
Today
6