Markopy
Utilizing Markov Models for brute forcing attacks
markopy.py
Go to the documentation of this file.
1 #!/usr/bin/env python3
2 
3 
4 
8 
9 
13 
14 
18 
19 from importlib.util import spec_from_loader, module_from_spec
20 from importlib.machinery import SourceFileLoader, ExtensionFileLoader
21 import os
22 import sys
23 
24 ext = "so"
25 if os.name == 'nt':
26  ext="pyd"
27 
28 
29 try:
30  from base import BaseCLI
31  from mp import MarkovPasswordsCLI
32  from mmx import ModelMatrixCLI
33  from evaluate import CorpusEvaluator, ModelEvaluator
34  from importer import import_markopy
35  markopy = import_markopy()
36 
37 
38 except ModuleNotFoundError as e:
39  #print("Working in development mode. Trying to load markopy.py from ../../../Markopy/")
40  if(os.path.exists("../../../Markopy/src/CLI/base.py")):
41  sys.path.insert(1, '../../../Markopy/src/CLI/')
42  from base import BaseCLI
43  from mp import MarkovPasswordsCLI
44  from mmx import ModelMatrixCLI
45  from evaluate import CorpusEvaluator, ModelEvaluator
46  from importer import import_markopy
47  markopy = import_markopy()
48 
49  else:
50  raise e
51 
52 
53 from termcolor import colored
54 from abc import abstractmethod
55 
57  """!
58  @brief Top level model selector for Markopy CLI.
59  This class is used for injecting the -mt parameter to the CLI, and determining the model type depending on that.
60  @belongsto Python::Markopy
61  @extends Python::Markopy::BaseCLI
62  @extends Python::Markopy::ModelMatrixCLI
63  @extends Python::Markopy::MarkovPasswordsCLI
64  """
65 
66  def __init__(self, add_help=False):
67  """!
68  @brief default constructor
69  """
70 
71  BaseCLI.__init__(self,add_help)
72  self.argsargsargs = None
73  self.parserparser.epilog = f"""
74  {colored("Sample runs:", "yellow")}
75  {__file__.split("/")[-1]} -mt MP generate trained.mdl -n 500 -w output.txt
76  Import trained.mdl, and generate 500 lines to output.txt
77 
78  {__file__.split("/")[-1]} -mt MMX generate trained.mdl -n 500 -w output.txt
79  Import trained.mdl, and generate 500 lines to output.txt
80  """
81 
82  @abstractmethod
83  def add_arguments(self):
84  """!
85  @brief add -mt/--model_type constructor
86  """
87  self.parserparser.add_argument("-mt", "--model_type", default="_MMX", help="Model type to use. Accepted values: MP, MMX")
88  self.parserparser.add_argument("-h", "--help", action="store_true", help="Model type to use. Accepted values: MP, MMX")
89  self.parserparser.add_argument("-ev", "--evaluate", help="Evaluate a models integrity")
90  self.parserparser.add_argument("-evt", "--evaluate_type", help="Evaluation type, model or corpus")
91  self.parserparser.print_help = self.helphelphelp
92 
93  @abstractmethod
94  def help(self):
95  """!
96  @brief overload help function to print submodel helps
97  """
98  self.parserparser.print_help = self.stubstub
99  self.argsargsargs = self.parserparser.parse_known_args()[0]
100  if(self.argsargsargs.model_type!="_MMX"):
101  if(self.argsargsargs.model_type=="MP"):
102  mp = MarkovPasswordsCLI()
103  mp.add_arguments()
104  mp.parser.print_help()
105  elif(self.argsargsargs.model_type=="MMX"):
106  mp = ModelMatrixCLI()
107  mp.add_arguments()
108  mp.parser.print_help()
109  else:
110  print(colored("Model Mode selection choices:", "green"))
111  self.print_helpprint_help()
112  print(colored("Following are applicable for -mt MP mode:", "green"))
113  mp = MarkovPasswordsCLI()
114  mp.add_arguments()
115  mp.parser.print_help()
116  print(colored("Following are applicable for -mt MMX mode:", "green"))
117  mp = ModelMatrixCLI()
118  mp.add_arguments()
119  mp.parser.print_help()
120 
121  exit()
122 
123 
124  @abstractmethod
125  def parse(self):
126  "! @brief overload parse function to parse for submodels"
127 
129  self.parse_argumentsparse_arguments()
131  if(self.argsargsargs.evaluate):
132  self.evaluateevaluate(self.argsargsargs.evaluate)
133  exit()
134  if(self.argsargsargs.model_type == "MP"):
136  elif(self.argsargsargs.model_type == "MMX" or self.argsargsargs.model_type == "_MMX"):
137  self.clicli = ModelMatrixCLI()
138  else:
139  self.parse_failparse_fail()
140 
141  if(self.argsargsargs.help): return self.helphelphelp()
142  self.clicli.parse()
143 
144  @abstractmethod
146  pass
147 
148  @abstractmethod
149  def parse_fail(self):
150  "! @brief failed to parse model type"
151  print("Unrecognized model type.")
152  exit()
153 
154  def process(self):
155  "! @brief pass the process request to selected submodel"
156  return self.clicli.process()
157 
158  def stub(self):
159  "! @brief stub function to hack help requests"
160  return
161 
162 
163  def evaluate(self,filename : str):
164  if(not self.args.evaluate_type):
165  if(filename.endswith(".mdl")):
166  ModelEvaluator(filename).evaluate()
167  else:
168  CorpusEvaluator(filename).evaluate()
169  else:
170  if(self.args.evaluate_type == "model"):
171  ModelEvaluator(filename).evaluate()
172  else:
173  CorpusEvaluator(filename).evaluate()
174 
176  pass
177 
178 if __name__ == "__main__":
179  mp = MarkopyCLI()
180  mp.parse()
181  mp.process()
Base CLI class to handle user interactions
Definition: base.py:16
def init_post_arguments(self)
Definition: base.py:62
def add_arguments(self)
Definition: base.py:43
def parse_arguments(self)
Definition: base.py:73
def help(self)
Definition: base.py:51
Top level model selector for Markopy CLI.
Definition: markopy.py:56
def __init__(self, add_help=False)
default constructor
Definition: markopy.py:66
def help(self)
overload help function to print submodel helps
Definition: markopy.py:94
def init_post_arguments(self)
Definition: markopy.py:145
def add_arguments(self)
add -mt/–model_type constructor
Definition: markopy.py:83
def evaluate(self, str filename)
Definition: markopy.py:163
def process(self)
Process parameters for operation.
Definition: markopy.py:154
def init_post_arguments(sel)
Definition: markopy.py:175
Extension of Python.Markopy.Base.BaseCLI for Markov::API::MarkovPasswords.
Definition: mp.py:17
Extension of Python.Markopy.Base.BaseCLI for Markov::API::ModelMatrix.
Definition: mmx.py:18
def add_arguments(self)
Definition: mmx.py:32
def init_post_arguments(self)
Definition: mmx.py:36
def import_markopy()
import and return markopy module
Definition: importer.py:12