Ejemplo n.º 1
0
    def __get_kmd_list(self, kicom_kmd_file, pu):
        kmdfiles = []  # 우선순위 목록

        k = k2kmdfile.KMD(kicom_kmd_file, pu)  # kicom.kmd 파일을 복호화한다.

        if k.body:  # kicom.kmd 읽혔는가?
            msg = StringIO.StringIO(k.body)

            while True:
                # 버퍼 한 줄을 읽어 엔터키 제거
                line = msg.readline().strip()

                if not line:  # 읽혀진 내용이 없으면 종료
                    break
                elif line.find('.kmd') != -1:  # KMD 확장자가 존재한다면
                    kmdfiles.append(line)  # KMD 우선순위 목록에 추가
                else:  # 확장자가 KMD가 아니면 다음 파일로...
                    continue

        if len(kmdfiles):  # 우선순위 목록에 하나라도 있다면 성공
            self.kmdfiles = kmdfiles
            return True
        else:  # 우선순위 목록에 아무것도 없으면 실패
            return False
Ejemplo n.º 2
0
    def __get_kmd_list(self, kicom_kmd_file, pu):
        kmdfiles = []  # 우선순위 목록

        k = k2kmdfile.KMD(kicom_kmd_file, pu)  # kicom.kmd 파일 복호화

        if k.body:  # kicom.kmd파일이 읽혔는가?
            msg = StringIO.StringIO(k.body)

            while True:
                # 한줄을 읽어 엔터키 제거
                line = msg.readline().strip()

                if not line:
                    break
                elif line.find('.kmd') != -1:  # KMD 확장자가 존재한다면
                    kmdfiles.append(line)  # KMD 우선순위 목록에 추가
                else:
                    continue

        if len(kmdfiles):  # 우선순위 목록의 내용이 1줄이라도 있다면
            self.kmdfiles = kmdfiles
            return True
        else:  # 우선순위 목록의 내용이 없다면
            return False
Ejemplo n.º 3
0
import k2rsa
import k2kmdfile

k2rsa.create_key('key.pkr', 'key.skr')

ret = k2kmdfile.make('kicom.lst')
if ret:
    pu = k2rsa.read_key('key.pkr')
    k = k2kmdfile.KMD('kicom.kmd', pu)
    print k.body
Ejemplo n.º 4
0
import k2rsa
import k2kmdfile

k2rsa.create_key('key.pkr', 'key.skr')

ret = k2kmdfile.make('textfile.txt')

if ret:
    pu = k2rsa.read_key('key.pkr')
    k = k2kmdfile.KMD('textfile.kmd', pu)
    print k.body
Ejemplo n.º 5
0
# -*- coding: utf-8 -*-
"""
Created on Mon May 25 07:48:18 2020

@author: ghdhf
KMD 파일 생성 및 복호화 모듈 테스트
"""

import k2rsa
import k2kmdfile

k2rsa.create_key('key.pkr', 'key.skr', True)

#이부분이 에러..
ret = k2kmdfile.make('readme.txt')
if ret:
    pu = k2rsa.read_key('key.pkr')
    k = k2kmdfile.KMD('readme.kmd', pu)
    print(k.body)
Ejemplo n.º 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:
            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
Ejemplo n.º 7
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
Ejemplo n.º 8
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()