def set_plugins(self, plugins_path): # 플러그인 경로를 저장한다. self.plugins_path = plugins_path # 공개키를 로딩한다. pu = k2rsa.read_key(plugins_path + os.sep + 'key.pkr') if not pu: return False # 우선순위를 알아낸다. ret = self.__get_kmd_list(plugins_path + os.sep + 'kicom.kmd', pu) if not ret: # 로딩할 KMD 파일이 없다. return False if self.debug: print '[*] kicom.kmd :' print ' ', self.kmdfiles # 우선순위대로 KMD 파일을 로딩한다. for kmd_name in self.kmdfiles: kmd_path = plugins_path + os.sep + kmd_name try: k = k2kmdfile.KMD(kmd_path, pu) # 모든 KMD 파일을 복호화한다. module = k2kmdfile.load(kmd_name.split('.')[0], k.body) if module: # 메모리 로딩 성공 self.kmd_modules.append(module) # 메모리 로딩에 성공한 KMD에서 플러그 엔진의 시간 값 읽기 # 최신 업데이트 날짜가 된다. self.__get_last_kmd_build_time(k) except IOError: pass except k2kmdfile.KMDFormatError: # 다른키로 암호호화 한 엔진은 무시 pass # 악성코드 패턴에서 최신 시간 값을 얻는다. fl = glob.glob(plugins_path + os.sep + '*.n??') for fname in fl: try: buf = open(fname, 'rb').read(12) if buf[0:4] == 'KAVS': sdate = k2timelib.convert_date( struct.unpack('<H', buf[8:10])[0]) stime = k2timelib.convert_time( struct.unpack('<H', buf[10:12])[0]) t_datetime = datetime.datetime(sdate[0], sdate[1], sdate[2], stime[0], stime[1], stime[2]) if self.max_datetime < t_datetime: self.max_datetime = t_datetime except IOError: pass if self.debug: print '[*] kmd_modules :' print ' ', self.kmd_modules print '[*] Last updated %s UTC' % self.max_datetime.ctime() return True
def set_plugins(self, plugins_path): self.plugins_path = plugins_path pu = k2rsa.read_key(plugins_path + os.sep + 'key.pkr') if not pu: return False ret = self.__get_kmd_list(plugins_path + os.sep + 'kicom.kmd', pu) if not ret: return False if self.debug: print('[*] kicom.kmd :') print(' ', self.kmdfiles) for kmd_name in self.kmdfiles: kmd_path = plugins_path + os.sep + kmd_name k = k2kmdfile.KMD(kmd_path, pu) module = k2kmdfile.load(kmd_name.split('.')[0], k.body) if module: self.kmd_modules.append(module) self.__get_last_kmd_build_time(k) else: print(kmd_name, "is failed to load on memory") if self.debug: print('[*] kmd_moudles :') print(' ', self.kmd_modules) print('[*] Last updated %s UTC' % (self.max_datetime.ctime())) return True
def set_plugins(self, plugins_path): # 플러그인 경로를 저장한다. self.plugins_path = plugins_path # 공개키를 로딩한다. pu = k2rsa.read_key(plugins_path + os.sep + 'key.pkr') if not pu: return False # 우선순위를 알아낸다. ret = self.__get_kmd_list(plugins_path + os.sep + 'kicom.kmd', pu) if not ret: # 로딩할 KMD 파일이 없다. return False if self.debug: print '[*] kicom.kmd :' print ' ', self.kmdfiles # 우선순위대로 KMD 파일을 로딩한다. for kmd_name in self.kmdfiles: kmd_path = plugins_path + os.sep + kmd_name try: k = k2kmdfile.KMD(kmd_path, pu) # 모든 KMD 파일을 복호화한다. module = k2kmdfile.load(kmd_name.split('.')[0], k.body) if module: # 메모리 로딩 성공 self.kmd_modules.append(module) # 메모리 로딩에 성공한 KMD에서 플러그 엔진의 시간 값 읽기 # 최신 업데이트 날짜가 된다. self.__get_last_kmd_build_time(k) except IOError: pass except k2kmdfile.KMDFormatError: # 다른키로 암호호화 한 엔진은 무시 pass # 악성코드 패턴에서 최신 시간 값을 얻는다. fl = glob.glob(plugins_path + os.sep + '*.n??') for fname in fl: try: buf = open(fname, 'rb').read(12) if buf[0:4] == 'KAVS': sdate = k2timelib.convert_date(struct.unpack('<H', buf[8:10])[0]) stime = k2timelib.convert_time(struct.unpack('<H', buf[10:12])[0]) t_datetime = datetime.datetime(sdate[0], sdate[1], sdate[2], stime[0], stime[1], stime[2]) if self.max_datetime < t_datetime: self.max_datetime = t_datetime except IOError: pass if self.debug: print '[*] kmd_modules :' print ' ', self.kmd_modules print '[*] Last updated %s UTC' % self.max_datetime.ctime() return True
def set_plugins(self, plugins_path): # 플러그인 경로 저장 self.plugins_path = plugins_path #print 'plugins_path: ' + plugins_path # 공개키 로딩 pu = k2rsa.read_key(plugins_path + os.sep + 'key.pkr') #print pu if not pu: return False # 우선순위 체크 ret = self.__get_kmd_list(plugins_path + os.sep + 'kicom.kmd', pu) if not ret: return False if self.debug: print '[*] load kicom.kmd:' print ' ', self.kmdfiles # 우선순위 대로 KMD파일 로딩 for kmd_name in self.kmdfiles: kmd_path = plugins_path + os.sep + kmd_name k = k2kmdfile.KMD(kmd_path, pu) # 모든 KMD 파일 복호화 module = k2kmdfile.load(kmd_name.split('.')[0], k.body) if module: # 메모리 로딩 성공 self.kmd_modules.append(module) # 메모리 로딩에 성공한 KMD에서 플러그인 엔진의 시간 값 읽기 # 최신 업데이트 날짜가 된다 self.__get_last_kmd_build_time(k) if self.debug: print '[*] kmd_modules:' print ' ', self.kmd_modules print '[*] Last updated %s UTC' % self.max_datetime.ctime() return True
def set_plugins(self, plugins_path, callback_fn=None): self.plugins_path = plugins_path if k2const.K2DEBUG: pu = None ret = self.__get_kmd_list(os.path.join(plugins_path, 'kicom.lst'), pu) else: pu = k2rsa.read_key(os.path.join(plugins_path, 'key.pkr')) if not pu: return False ret = self.__get_kmd_list(os.path.join(plugins_path, 'kicom.kmd'), pu) if not ret: return False if self.verbose: print '[*] kicom.%s :' % ('lst' if k2const.K2DEBUG else 'kmd') print ' ', self.kmdfiles for kmd_name in self.kmdfiles: kmd_path = os.path.join(plugins_path, kmd_name) try: name = kmd_name.split('.')[0] if k2const.K2DEBUG: k = None module = imp.load_source( name, os.path.splitext(kmd_path)[0] + '.py') try: os.remove(os.path.splitext(kmd_path)[0] + '.pyc') except OSError: pass else: k = k2kmdfile.KMD(kmd_path, pu) data = k.body module = k2kmdfile.load(name, data) if module: self.kmd_modules.append(module) self.__get_last_kmd_build_time(k) else: if isinstance(callback_fn, types.FunctionType): callback_fn(name) except IOError: pass except k2kmdfile.KMDFormatError: pass fl = glob.glob1(plugins_path, '*.n??') for fname in fl: try: fname = os.path.join(plugins_path, fname) buf = open(fname, 'rb').read(12) if buf[0:4] == 'KAVS': sdate = k2timelib.convert_date( struct.unpack('<H', buf[8:10])[0]) stime = k2timelib.convert_time( struct.unpack('<H', buf[10:12])[0]) t_datetime = datetime.datetime(sdate[0], sdate[1], sdate[2], stime[0], stime[1], stime[2]) if self.max_datetime < t_datetime: self.max_datetime = t_datetime except IOError: pass if self.verbose: print '[*] kmd_modules :' print ' ', self.kmd_modules print '[*] Last updated %s UTC' % self.max_datetime.ctime() return True
def set_plugins(self, plugins_path, callback_fn=None): # 플러그인 경로를 저장한다. self.plugins_path = plugins_path # 우선순위를 알아낸다. if k2const.K2DEBUG: pu = None ret = self.__get_kmd_list(os.path.join(plugins_path, 'kicom.lst'), pu) else: # 공개키를 로딩한다. pu = k2rsa.read_key(os.path.join(plugins_path, 'key.pkr')) if not pu: return False ret = self.__get_kmd_list(os.path.join(plugins_path, 'kicom.kmd'), pu) if not ret: # 로딩할 KMD 파일이 없다. return False if self.verbose: print '[*] kicom.%s :' % ('lst' if k2const.K2DEBUG else 'kmd') print ' ', self.kmdfiles # 우선순위대로 KMD 파일을 로딩한다. for kmd_name in self.kmdfiles: kmd_path = os.path.join(plugins_path, kmd_name) try: name = kmd_name.split('.')[0] if k2const.K2DEBUG: k = None module = imp.load_source(name, os.path.splitext(kmd_path)[0] + '.py') try: os.remove(os.path.splitext(kmd_path)[0] + '.pyc') except OSError: pass else: k = k2kmdfile.KMD(kmd_path, pu) # 모든 KMD 파일을 복호화한다. data = k.body module = k2kmdfile.load(name, data) if module: # 메모리 로딩 성공 self.kmd_modules.append(module) # 메모리 로딩에 성공한 KMD에서 플러그 엔진의 시간 값 읽기 # 최신 업데이트 날짜가 된다. self.__get_last_kmd_build_time(k) else: # 메모리 로딩 실패 if isinstance(callback_fn, types.FunctionType): callback_fn(name) except IOError: pass except k2kmdfile.KMDFormatError: # 다른키로 암호호화 한 엔진은 무시 pass # 악성코드 패턴에서 최신 시간 값을 얻는다. fl = glob.glob(os.path.join(plugins_path, '*.n??')) for fname in fl: try: buf = open(fname, 'rb').read(12) if buf[0:4] == 'KAVS': sdate = k2timelib.convert_date(struct.unpack('<H', buf[8:10])[0]) stime = k2timelib.convert_time(struct.unpack('<H', buf[10:12])[0]) t_datetime = datetime.datetime(sdate[0], sdate[1], sdate[2], stime[0], stime[1], stime[2]) if self.max_datetime < t_datetime: self.max_datetime = t_datetime except IOError: pass if self.verbose: print '[*] kmd_modules :' print ' ', self.kmd_modules print '[*] Last updated %s UTC' % self.max_datetime.ctime() return True
# -*- coding:utf-8 -*- import k2rsa import k2kmdfile pu = k2rsa.read_key('key.pkr') k = k2kmdfile.KMD('dummy.kmd', pu) module = k2kmdfile.load('dummy', k.body) print dir(module) ''' case 1. kmdfile.load의 리턴값을 이용해 모듈 사용. ''' kav = module.KavMain() kav.init('.') print kav.getinfo() kav.uninit() ''' case 2. 모듈 동적로딩을 하면 import를 한 후의 사용도 가능하다. ''' import dummy kav2 = dummy.KavMain() kav2.init('.') print kav2.listvirus() kav2.uninit()
# -*- coding:utf-8 -*- # Author: ColorLion import k2rsa import k2kmdfile pu = k2rsa.read_key('key.pkr') # 복호화 할 공개키를 로딩 k = k2kmdfile.KMD('dummy.kmd', pu) # dummy.kmd 파일 읽기 # k.body에 dummy.kmd 파이썬 코드가 복호화 module = k2kmdfile.load('dummy', k.body) # dummy 플러그인 엔진 모듈을 등록 # -------------------------------------------------------------------------------------- # 사용방법 (1) # kmdfile.load 함수의 리턴값으로 직접 사용 가능 # -------------------------------------------------------------------------------------- kav = module.KavMain() # dummy 플러그인 엔진의 KavMain 인스턴스 생성 kav.init('.') # 플러그인 엔진 초기화 print kav.getinfo() # 플러그인 엔진 정보 확인 kav.uninit() # 플러그인 엔진 종료