# -*- coding: utf-8 -*-
#+---------------------------------------------------------------------------+
#| 01001110 01100101 01110100 01111010 01101111 01100010 |
#| |
#| Netzob : Inferring communication protocols |
#+---------------------------------------------------------------------------+
#| Copyright (C) 2011-2017 Georges Bossert and Frédéric Guihéry |
#| This program is free software: you can redistribute it and/or modify |
#| it under the terms of the GNU General Public License as published by |
#| the Free Software Foundation, either version 3 of the License, or |
#| (at your option) any later version. |
#| |
#| This program is distributed in the hope that it will be useful, |
#| but WITHOUT ANY WARRANTY; without even the implied warranty of |
#| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
#| GNU General Public License for more details. |
#| |
#| You should have received a copy of the GNU General Public License |
#| along with this program. If not, see <http://www.gnu.org/licenses/>. |
#+---------------------------------------------------------------------------+
#| @url : http://www.netzob.org |
#| @contact : contact@netzob.org |
#| @sponsors : Amossys, http://www.amossys.fr |
#| Supélec, http://www.rennes.supelec.fr/ren/rd/cidre/ |
#+---------------------------------------------------------------------------+
#+----------------------------------------------
#| Standard library imports
#+----------------------------------------------
import logging
#+----------------------------------------------
#| Related third party imports
#+----------------------------------------------
#+----------------------------------------------
#| Local application imports
#+----------------------------------------------
from netzob.Inference.Grammar.Queries.MembershipQuery import MembershipQuery
#+----------------------------------------------
#| MQCache:
#| A cache for MQs and their results
#+----------------------------------------------
[docs]class MQCache():
def __init__(self):
# create logger with the given configuration
self.log = logging.getLogger('netzob.Inference.Grammar.MQCache.py')
self.cache = dict()
[docs] def getCachedResult(self, mq):
for cachedMQ in list(self.cache.keys()):
if cachedMQ == mq:
return self.cache.get(cachedMQ)
return None
[docs] def cacheResult(self, mq, result):
self.log.debug("Cache the following : " + str(mq) + " == " + str(
result))
self.cache[mq] = result
[docs] def dumpCache(self):
for mq in list(self.cache.keys()):
result = self.cache[mq]
self.log.debug(str(mq) + ">" + str(result))
[docs] def preloadCache(self, datas, vocabulary):
for data in datas:
self.preloadCacheEntry(data, vocabulary)
[docs] def preloadCacheEntry(self, data, vocabulary):
tab = data.split(" > ")
msgSymbols = tab[0]
mqSymbols = msgSymbols.split(",")
symbols = []
for mqSymbol in mqSymbols:
symbol = vocabulary.getSymbolByName(mqSymbol)
if symbol is not None:
symbols.append(symbol)
mq = MembershipQuery(symbols)
msgResult = tab[1]
tmp = msgResult.split(",")
symbolsResult = []
for t in tmp:
symbol = vocabulary.getSymbolByName(t)
if symbol is not None:
symbolsResult.append(symbol)
self.cacheResult(mq, symbolsResult)
#
# (DOWNLOAD,) > [UnknownSymbol, EmptySymbol, EmptySymbol]
# (EXECUTE,) > [UnknownSymbol, EmptySymbol, EmptySymbol]
# (LOGOUT,) > [UnknownSymbol, EmptySymbol, EmptySymbol]
# (LOGOUT, UnknownSymbol,) > [UnknownSymbol, EmptySymbol, EmptySymbol]
# (LOGOUT, SYSINFO,) > [UnknownSymbol, EmptySymbol, EmptySymbol]
# (DOWNLOAD, SYSINFO,) > [UnknownSymbol, EmptySymbol, EmptySymbol]
# (LOGOUT, LOGOUT,) > [UnknownSymbol, EmptySymbol, EmptySymbol]
# (EXECUTE, UnknownSymbol,) > [UnknownSymbol, EmptySymbol, EmptySymbol]
# (UnknownSymbol, SYSINFO,) > [UnknownSymbol, EmptySymbol, EmptySymbol]
# (EXECUTE, LOGOUT,) > [UnknownSymbol, EmptySymbol, EmptySymbol]
# (SYSINFO, LOGIN,) > [UnknownSymbol, EmptySymbol, PASSWORD_ACCEPTED]
# (STATUS, UnknownSymbol,) > [UnknownSymbol, EmptySymbol, EmptySymbol]
# (STATUS, EXECUTE,) > [UnknownSymbol, EmptySymbol, EmptySymbol]
# (DOWNLOAD, EXECUTE,) > [UnknownSymbol, EmptySymbol, EmptySymbol]
# (SYSINFO, DOWNLOAD,) > [UnknownSymbol, EmptySymbol, EmptySymbol]
# (DOWNLOAD, DOWNLOAD,) > [UnknownSymbol, EmptySymbol, EmptySymbol]
# (EXECUTE, SYSINFO,) > [UnknownSymbol, EmptySymbol, EmptySymbol]
# (STATUS,) > [UnknownSymbol, EmptySymbol, EmptySymbol]
# (LOGIN,) > [UnknownSymbol, EmptySymbol, PASSWORD_ACCEPTED]
# (LOGOUT, EXECUTE,) > [UnknownSymbol, EmptySymbol, EmptySymbol]
# (UnknownSymbol, DOWNLOAD,) > [UnknownSymbol, EmptySymbol, EmptySymbol]
# (LOGOUT, DOWNLOAD,) > [UnknownSymbol, EmptySymbol, EmptySymbol]
# (STATUS, STATUS,) > [UnknownSymbol, EmptySymbol, EmptySymbol]
# (DOWNLOAD, STATUS,) > [UnknownSymbol, EmptySymbol, EmptySymbol]
# (EXECUTE, LOGIN,) > [UnknownSymbol, EmptySymbol, PASSWORD_ACCEPTED]
# (UnknownSymbol, LOGIN,) > [UnknownSymbol, EmptySymbol, PASSWORD_ACCEPTED]
# (LOGOUT, STATUS,) > [UnknownSymbol, EmptySymbol, EmptySymbol]
# (LOGIN, EXECUTE,) > [UnknownSymbol, PASSWORD_ACCEPTED, CANTEXECUTE]
# (EXECUTE, STATUS,) > [UnknownSymbol, EmptySymbol, EmptySymbol]
# (LOGIN, UnknownSymbol,) > [UnknownSymbol, PASSWORD_ACCEPTED, EmptySymbol]
# (SYSINFO, STATUS,) > [UnknownSymbol, EmptySymbol, EmptySymbol]
# (DOWNLOAD, LOGIN,) > [UnknownSymbol, EmptySymbol, PASSWORD_ACCEPTED]
# (LOGOUT,) > [UnknownSymbol, EmptySymbol, EmptySymbol]
# (LOGIN, LOGOUT,) > [UnknownSymbol, PASSWORD_ACCEPTED, EmptySymbol]
# (SYSINFO, LOGOUT,) > [UnknownSymbol, EmptySymbol, EmptySymbol]
# (EXECUTE, DOWNLOAD,) > [UnknownSymbol, EmptySymbol, EmptySymbol]
# (DOWNLOAD, LOGOUT,) > [UnknownSymbol, EmptySymbol, EmptySymbol]
# (UnknownSymbol, LOGOUT,) > [UnknownSymbol, EmptySymbol, EmptySymbol]
# (UnknownSymbol, EXECUTE,) > [UnknownSymbol, EmptySymbol, EmptySymbol]
# (SYSINFO, SYSINFO,) > [UnknownSymbol, EmptySymbol, EmptySymbol]
# (SYSINFO,) > [UnknownSymbol, EmptySymbol, EmptySymbol]
# (LOGIN, DOWNLOAD,) > [UnknownSymbol, PASSWORD_ACCEPTED, DOWNLOADING]
# (DOWNLOAD,) > [UnknownSymbol, EmptySymbol, EmptySymbol]
# (STATUS, SYSINFO,) > [UnknownSymbol, EmptySymbol, EmptySymbol]
# (LOGIN, LOGIN,) > [UnknownSymbol, PASSWORD_ACCEPTED, EmptySymbol]
# (EXECUTE,) > [UnknownSymbol, EmptySymbol, EmptySymbol]
# (UnknownSymbol,) > [UnknownSymbol, EmptySymbol, EmptySymbol]
# (EXECUTE, EXECUTE,) > [UnknownSymbol, EmptySymbol, EmptySymbol]
# (LOGIN, SYSINFO,) > [UnknownSymbol, PASSWORD_ACCEPTED, CPU]
# (STATUS, LOGIN,) > [UnknownSymbol, EmptySymbol, PASSWORD_ACCEPTED]
# (STATUS, LOGOUT,) > [UnknownSymbol, EmptySymbol, EmptySymbol]
# (LOGOUT, LOGIN,) > [UnknownSymbol, EmptySymbol, EmptySymbol]
# (UnknownSymbol, STATUS,) > [UnknownSymbol, EmptySymbol, EmptySymbol]
# (SYSINFO, EXECUTE,) > [UnknownSymbol, EmptySymbol, EmptySymbol]
# (UnknownSymbol, UnknownSymbol,) > [UnknownSymbol, EmptySymbol, EmptySymbol]
# (SYSINFO, UnknownSymbol,) > [UnknownSymbol, EmptySymbol, EmptySymbol]
# (STATUS, DOWNLOAD,) > [UnknownSymbol, EmptySymbol, EmptySymbol]
# (LOGIN, STATUS,) > [UnknownSymbol, PASSWORD_ACCEPTED, SDBOT]
# (DOWNLOAD, UnknownSymbol,) > [UnknownSymbol, EmptySymbol, EmptySymbol]
#
#
#
#
#