티스토리 뷰

바쁜 현대인을 위한 3줄 요약
  1. DeviceIoControl을 통해 PhysicalDrive0~2까지의 크기를 가져옴
  2. 8바이트 중 상위 4 바이트가 0x19인지 확인 ()
  3. 0x19미만이면 100GB 보다 작으므로 악성동작 하지 않음


매우간단한 안티디버깅 방법이다.
PhysicalDrive0~ PhysicalDrive2(CreateFileA)까지의 특정 데이터를 가져와(DeviceIoControl) 모두 곱해 더해준 다음 특정값 이상인지 확인하고 리턴한다.
좀 더 보기쉽게 코드를 정리해보자


깔끔하다. 

분석을 위해 DeviceIoControl API부터 알아보자.


DeviceIoControl은 I/O 장치에 직접 명령을 전달하는 API이다.

준비가 끝났으니 분석을 시작해보자.
반복문을통해 PhysicalDrive0 ~ 2 까지 CreateFileW를 통해 핸들을 가져온뒤 DeviceIoControl 함수를 통해 I/O 장치에 명령을 전달한다.
PhysicalDrive에 전달하는 명령은 dwIoControlCode를 통해 확인할 수 있는데 0x70000은 IOCTL_DISK_GET_DRIVE_GEOMETRY로 디스크의 타입, 실린더 갯수, 실린더당 트랙, 트랙당 섹터, 섹터당 바이트 등을 반환해 준다.



DeviceIoContrl 이후 나온 값들은 아래와 같다. 


Cylinders(HI)     = 0x00000000
Cylinders(LOW)    = 0x000016F2
MediaType         = 0x0000000C
TrackPerCylinder  = 0x000000FF
SectorPerTrack    = 0x00000038
BytesPerSector    = 0x00000200

다음코드를 보면 모든값을 곱해주는데 이를 통해 하나의 PhysicalDrive의 실제 용량을 구할 수 있게 되며 이 과정을 PhysicalDrive2까지 진행해 현재 PC에 존재하는 물리드라이브의 크기를 알 수 있다.

다음 라인을 보면 마지막 라인을 보면 8바이트중 상위 4바이트를 0x19와 비교하고 있다. 
     상위          하위
0x00000019 0x00000000

0x1900000000을 1024로 3번 나누어보면 100이 나온다. (1024 로 3번 나누어주면 GB 단위의 값을 얻을 수 있다.) 
악성코드는 이 값을 비교해  PhysicalDrive가 100GB 이하인 경우에는 동작하지 않도록 설정되어 있다.

이젠 악성코드 때문에 VM용량도 신경써야 하는 세상이 와버린거 같다.

분석중에 잠깐 찾아봤더니 forensic-proof에 깔끔하게 정리되어 있었다.


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
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
글 보관함