def scan(self, filehandle, filename, fileformat, filename_ex): # 악성코드 검사 pmd5 = kavutil.PatternMD5('.') try: mm = filehandle # 미리 분석된 파일 포맷 중에 Macro 포맷이 있는가? if 'ff_macro' in fileformat: buf = mm[:] buf = self.p_vba_cmt.sub('', buf) # 주석문 제거 buf = self.p_vba.sub('', buf) # 불필요한 정보 제거 buf = self.p_space.sub('', buf) # 공백 제거 buf = buf.lower() # 영어 소문자로 통일 # fmd5 = crytolib.md5(buf) fsize = len(buf) if pmd5.match_size('macro', fsize): fmd5 = hashlib.md5(buf).hexdigest() # MD5 해시 구하기 vname = pmd5.scan('macro', fsize, fmd5) if vname: return True, vname, 0, kernel.INFECTED else: vstring = [] ret = self.aho_laroux.search(buf) for n in ret: vstring.append(n[1]) if len(set(vstring)) == 5: return True, 'Virus.MSExcel.Laroux.Gen', 0, kernel.SUSPECT except IOError: pass # 악성코드 발견하지 못했음 return False, '', -1, kernel.NOT_FOUND
def scan(self, filehandle, filename, fileformat, filename_ex): # 악성코드 검사 from InfonetVaccine import kernel, kavutil, crytolib pmd5 = kavutil.PatternMD5('.') try: mm = filehandle # 미리 분석된 파일 포맷 중에 PE 포맷이 있는가? if 'ff_pe' in fileformat: ff = fileformat['ff_pe'] # 섹션을 조사한다. for section in ff['pe']['Sections']: # 실행 속성을 가졌는가? if (section['Characteristics'] & 0x20000000) == 0x20000000: # 해당 섹션이 파일에서 차지하는 크기 fsize = section['SizeRawData'] # 섹션 크기가 emalware 악성코드 패턴에 존재하는가? if pmd5.match_size('emalware', fsize): # 섹션의 MD5 해시 계산 foff = section['PointerRawData'] fmd5 = crytolib.md5(mm[foff:foff + fsize]) # emalware 악성코드 패턴에서 MD5 검사 vname = pmd5.scan('emalware', fsize, fmd5) if vname: # 악성코드가 발견되었는가? return True, vname, 0, kernel.INFECTED except IOError: pass # 악성코드를 발견하지 못했음을 리턴한다. return False, '', -1, kernel.NOT_FOUND
def getinfo(self): # 플러그인 엔진의 주요 정보 pmd5 = kavutil.PatternMD5('.') info = dict() # 사전형 변수 선언 info['author'] = 'Hyeon Jun' # 제작자 info['version'] = '1.0' # 버전 info['title'] = 'Macro Engine' # 엔진 설명 info['kmd_name'] = 'macro' # 엔진 파일 이름 info['sig_num'] = pmd5.get_sig_num('macro') + 1 # 진단/치료 가능한 악성코드 수 return info
def getinfo(self): # 플러그인 엔진의 주요 정보 from InfonetVaccine import kavutil pmd5 = kavutil.PatternMD5('.') info = dict() # 사전형 변수 선언 info['author'] = 'Hyeon Jun' # 제작자 info['version'] = '1.0' # 버전 info['title'] = 'eMalware Engine' # 엔진 설명 info['kmd_name'] = 'emalware' # 엔진 파일 이름 info['sig_num'] = len(self.listvirus()) return info
def listvirus(self): # 진단 가능한 악성코드 리스트 from InfonetVaccine import kavutil pmd5 = kavutil.PatternMD5('.') vlist = pmd5.get_sig_vlist('emalware') vlist.append('Backdoor.Linux.Mirai.a.gen') vlist = list(set(vlist)) vlist.sort() vlists = [] for vname in vlist: vlists.append(kavutil.normal_vname(vname)) vlists.append(kavutil.normal_vname('<n>AdWare.Win32.Sokuxuan.gen')) return vlists
def listvirus(self): # 진단 가능한 악성코드 리스트 pmd5 = kavutil.PatternMD5('.') vlist = pmd5.get_sig_vlist('macro') vlist.append('Virus.MSExcel.Laroux.Gen') vlist.sort() return vlist