13 Security Lab

[스크랩] Themida Anti VM Bypass 본문

Computer Security/Analysis

[스크랩] Themida Anti VM Bypass

Maj0r Tom 2016. 1. 22. 15:06

1. Themida Anti-VM (VMware) 우회 - VM 설정 및 레지스트리


동작 환경

 Host OS

 Windows 8.1 K x64

 VMware Workstation Version 

 11.0.0 build-2305329

 Guest OS

 Windows XP Professional K SP3 x86

 

2015년 6월 25일 최신 데모인 ThemidaDemo32_64의 2.3.4.14 버전에서 적용 가능하다.

아래 두 방법을 동시 적용해야 한다.

 

 

1) 레지스트리 키 값 변경

시작 - 실행 - regedit 등으로 레지스트리 편집기를 열어 다음의 키 값을 수정한다.

 

키 경로

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4D36E968-E325-11CE-BFC1-08002BE10318}\0000

 

값(환경에 따라 다를 수 있음)

VMware SVGA xx

 

키 값을 삭제하면 안 된다. VM관련 키워드만 제거한다.

 

 

2) .vxm 파일 수정

.vmx는 가상머신의 설정정보 파일이다. 메모장 등으로 열어서 수정하며, 항상 VMware가 완전 종료된 상태에서 수정하도록 한다.

다음 여섯 줄을 복사하여 맨 마지막에 추가한다.

 

monitor_control.restrict_backdoor = "TRUE"

isolation.tools.getPtrLocation.disable = "TRUE"

isolation.tools.setPtrLocation.disable = "TRUE"

isolation.tools.getVersion.disable = "TRUE"

isolation.tools.setVersion.disable = "TRUE"

monitor_control.disable_directexec = "TRUE"

 

 

monitor_control.restrict_backdoor = "TRUE" 는

VMware Tools가 ring 3에서 백도어 포트에 접근하는 것을 비활성화한다. 이것을 적용하면 VMware Tools를 사용할 수 없을 것이다.

 

 

이제 더미다 패킹 파일이 가상 환경에서도 동작하는 것을 볼 수 있다.

 

 

.vmx 파일에 대해서는 문서화가 잘 되어있는것 같지 않다. 파라미터 리스트는 다음 사이트에서 볼 수 있다.

Undocumented VMware .VMX parameters http://www.basvanbeek.nl/undocumented-vmware-vmx-parameters/

 


2. Themida Anti-VM Vmware (VMware) 우회 (Python 스크립트)


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
32
33
34
35
36
import os
import sys
#VMware Disk name = SCSI\Disk&Ven_VMware_&Prod_VMware_Virtual_S&Rev_1.0\4&5fcaafc&0&000
VirtualDisks = ['VMware''VBox''Virtual']
if sys.platform == 'win32':
    import _winreg
    key = _winreg.HKEY_LOCAL_MACHINE
    subkey = 'SYSTEM\\ControlSet001\\Services\\Disk\\Enum'
    registry = _winreg.CreateKey(key, subkey)
 
    t = _winreg.OpenKey(key, subkey, _winreg.KEY_ALL_ACCESS)
    print '[+] Connecting registry key : "HKLM\\' + subkey + '\\"'
    
    count = 0
    findValue = 0
    try:
        while 1:
            name, value, type = _winreg.EnumValue(t, count)
            for i in range(0len(VirtualDisks)):
                if str(value).find(VirtualDisks[i]) != -1:
                    findValue = 1
                    print '[+] Founded Virtual Disk strings. [' + VirtualDisks[i] + ']'
                    answer = raw_input('>> Do you want bypass Anti-VM? (y or n) ')
                    if answer.lower() == 'y' or answer.lower() == 'yes':
                        _winreg.SetValueEx( registry, name, 0, _winreg.REG_SZ, value.replace('V''@'))
                        print '[+] Successfully Modified.'
                        print '    replaced name : ' + value.replace('V''@')
                    else:
                        print '[-] registry not modified.'
                        print '    Disk name : ' + value
                    break
            count+=1
    except:pass
    if findValue is 0:
        print '[-] 404 Not Found about virtual disk strings.'
cs





Ref.1 : Themida Anti VM Bypass 

http://hacklab.tistory.com/19

Ref.2 : Anti-VM 기법이 적용된 악성코드 분석 및 우회 방법 연구 

http://moaimoai.tistory.com/127


Ref.3 : Anti-VM bypass | Anti-VM 우회 

http://nopsled.tistory.com/74

 



Comments