Exemple #1
0
    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
Exemple #2
0
    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
Exemple #3
0
    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
Exemple #4
0
    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
Exemple #6
0
    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
Exemple #7
0
# -*- 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()
Exemple #8
0
    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
Exemple #9
0
# -*- 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()  # 플러그인 엔진 종료