retdec
heuristics.h
Go to the documentation of this file.
1 
7 #ifndef RETDEC_CPDETECT_HEURISTICS_HEURISTICS_H
8 #define RETDEC_CPDETECT_HEURISTICS_HEURISTICS_H
9 
10 #include "retdec/cpdetect/search.h"
13 
14 namespace retdec {
15 namespace cpdetect {
16 
21 {
22  private:
25  void getSectionHeuristics();
27 
30  bool parseGccComment(const std::string &record);
31  bool parseGhcComment(const std::string &record);
32  bool parseOpen64Comment(const std::string &record);
35 
38  bool parseGccProducer(const std::string &producer);
39  bool parseClangProducer(const std::string &producer);
40  bool parseTmsProducer(const std::string &producer);
41  void getDwarfInfo();
43 
46  std::string getEmbarcaderoVersion();
49 
52  void getSymbolHeuristic();
54 
60 
61  protected:
67  bool canSearch;
70 
72  std::vector<const retdec::fileformat::Section*> sections;
74  std::map<std::string, std::size_t> sectionNameMap;
76  std::size_t noOfSections;
77 
82  bool priorityLanguageIsSet = false;
83 
86  std::string getUpxVersion();
87  const DetectResult* isDetected(
88  const std::string &name,
89  const DetectionStrength minStrength = DetectionStrength::LOW);
91 
97 
100  void addCompiler(
101  DetectionMethod source,
102  DetectionStrength strength,
103  const std::string &name,
104  const std::string &version = "",
105  const std::string &extra = "");
106  void addLinker(
107  DetectionMethod source,
108  DetectionStrength strength,
109  const std::string &name,
110  const std::string &version = "",
111  const std::string &extra = "");
112  void addInstaller(
113  DetectionMethod source,
114  DetectionStrength strength,
115  const std::string &name,
116  const std::string &version = "",
117  const std::string &extra = "");
118  void addPacker(
119  DetectionMethod source,
120  DetectionStrength strength,
121  const std::string &name,
122  const std::string &version = "",
123  const std::string &extra = "");
125 
128  void addCompiler(
129  std::size_t matchNibbles,
130  std::size_t totalNibbles,
131  const std::string &name,
132  const std::string &version = "",
133  const std::string &extra = "");
134  void addPacker(
135  std::size_t matchNibbles,
136  std::size_t totalNibbles,
137  const std::string &name,
138  const std::string &version = "",
139  const std::string &extra = "");
141 
144  void addLanguage(
145  const std::string &name,
146  const std::string &extraInfo = "",
147  bool isBytecode = false);
148  void addPriorityLanguage(
149  const std::string &name,
150  const std::string &extraInfo = "",
151  bool isBytecode = false);
153 
156  std::size_t findSectionName(const std::string &sectionName) const;
157  std::size_t findSectionNameStart(const std::string &sectionName) const;
159 
160  public:
161  Heuristics(
162  retdec::fileformat::FileFormat &parser, Search &searcher,
164  virtual ~Heuristics() = default;
165 
168  void getAllHeuristics();
170 };
171 
172 } // namespace cpdetect
173 } // namespace retdec
174 
175 #endif
Definition: heuristics.h:21
void addPriorityLanguage(const std::string &name, const std::string &extraInfo="", bool isBytecode=false)
Definition: heuristics.cpp:404
void getSymbolHeuristic()
Definition: heuristics.cpp:863
bool parseGccComment(const std::string &record)
Definition: heuristics.cpp:493
std::string getEmbarcaderoVersion()
Definition: heuristics.cpp:780
void addLanguage(const std::string &name, const std::string &extraInfo="", bool isBytecode=false)
Definition: heuristics.cpp:384
void addLinker(DetectionMethod source, DetectionStrength strength, const std::string &name, const std::string &version="", const std::string &extra="")
Definition: heuristics.cpp:291
void getCommonLanguageHeuristics()
Definition: heuristics.cpp:918
virtual void getFormatSpecificCompilerHeuristics()
Definition: heuristics.cpp:968
std::map< std::string, std::size_t > sectionNameMap
section name counts
Definition: heuristics.h:74
std::size_t noOfSections
section count
Definition: heuristics.h:76
void getCommentSectionsHeuristics()
Definition: heuristics.cpp:591
ToolInformation & toolInfo
results - detected tools
Definition: heuristics.h:69
bool parseOpen64Comment(const std::string &record)
Definition: heuristics.cpp:556
const DetectResult * isDetected(const std::string &name, const DetectionStrength minStrength=DetectionStrength::LOW)
Definition: heuristics.cpp:928
bool parseGhcComment(const std::string &record)
Definition: heuristics.cpp:520
Heuristics(retdec::fileformat::FileFormat &parser, Search &searcher, ToolInformation &toolInfo)
Definition: heuristics.cpp:235
bool parseGccProducer(const std::string &producer)
Definition: heuristics.cpp:618
void addInstaller(DetectionMethod source, DetectionStrength strength, const std::string &name, const std::string &version="", const std::string &extra="")
Definition: heuristics.cpp:309
bool priorityLanguageIsSet
Definition: heuristics.h:82
bool parseTmsProducer(const std::string &producer)
Definition: heuristics.cpp:663
void addCompiler(DetectionMethod source, DetectionStrength strength, const std::string &name, const std::string &version="", const std::string &extra="")
Definition: heuristics.cpp:273
virtual ~Heuristics()=default
std::size_t findSectionNameStart(const std::string &sectionName) const
Definition: heuristics.cpp:432
void addPacker(DetectionMethod source, DetectionStrength strength, const std::string &name, const std::string &version="", const std::string &extra="")
Definition: heuristics.cpp:327
void getAllHeuristics()
Definition: heuristics.cpp:982
bool parseClangProducer(const std::string &producer)
Definition: heuristics.cpp:643
std::size_t findSectionName(const std::string &sectionName) const
Definition: heuristics.cpp:422
void getDwarfInfo()
Definition: heuristics.cpp:686
void getEmbarcaderoHeuristics()
Definition: heuristics.cpp:825
std::string getUpxVersion()
Definition: heuristics.cpp:947
virtual void getFormatSpecificLanguageHeuristics()
Definition: heuristics.cpp:975
bool canSearch
true if we can use search engine
Definition: heuristics.h:67
void getCommonToolsHeuristics()
Definition: heuristics.cpp:906
Search & search
signature search engine
Definition: heuristics.h:65
std::vector< const retdec::fileformat::Section * > sections
section information
Definition: heuristics.h:72
void getSectionHeuristics()
Definition: heuristics.cpp:451
retdec::fileformat::FileFormat & fileParser
input file parser
Definition: heuristics.h:63
Definition: search.h:20
Definition: file_format.h:45
cpdetectl types and structures.
Definition of FileFormat class.
DetectionStrength
Definition: cptypes.h:75
DetectionMethod
Definition: cptypes.h:50
Definition: archive_wrapper.h:19
Class for search in file.
Definition: cptypes.h:129
Definition: cptypes.h:177